Package com.onpositive.commons.ui.viewers

Source Code of com.onpositive.commons.ui.viewers.AbstractViewerEditorPart$ShowOverViewRunnable

package com.onpositive.commons.ui.viewers;

import java.util.ArrayList;
import java.util.Locale;
import java.util.Map;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IExpansionListener;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ImageHyperlink;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.part.DrillDownAdapter;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.plugin.AbstractUIPlugin;

import com.positive.charting.Chart;
import com.positive.charting.ChartCanvas;
import com.positive.charting.ChartFactory;
import com.positive.charts.block.RectangleInsets;
import com.positive.charts.data.general.DefaultPieDataset;
import com.positive.charts.plot.PiePlot;

public abstract class AbstractViewerEditorPart extends EditorPart {

  protected FormToolkit formToolkit;
  private ImageRegistry registry;
  private String imagesId;
  protected Form form;
  protected Composite buttons;
  public PageBook pageBook;
  protected ConfigurableViewer viewer;
  ArrayList<Runnable> modes = new ArrayList<Runnable>();
  ArrayList<ImageHyperlink> hyperLinks = new ArrayList<ImageHyperlink>();
  int mode;
  long lastChange;
  protected String modeText;
  private Composite viewerHolder;
  boolean sheduled = false;
  public ToolBarManager treeManager;
  private Composite lowBar;
  private Composite overview;

  public final class ShowOverViewRunnable implements Runnable {
    public void run() {
      enableFilters(false);
      treeManager.removeAll();
      treeManager.update(true);
      pageBook.showPage(overview);
    }
  }

  public AbstractViewerEditorPart(String imagesHolder) {
    this.imagesId = imagesHolder;
  }

  public void dispose() {
    super.dispose();
    formToolkit.dispose();
    registry.dispose();
  }

  protected abstract void enableFilters(boolean enable);

 
  public void doSave(IProgressMonitor monitor) {

  }

 
  public void doSaveAs() {

  }

 
  public boolean isDirty() {
    return false;
  }

 
  public boolean isSaveAsAllowed() {
    return false;
  }

 
  public void setFocus() {

  }

  public class ViewerConfigurationRunnable implements Runnable {
    private ViewerConfiguration config;

    public ViewerConfigurationRunnable(ViewerConfiguration config) {
      this.config = config;
    }

    public void run() {
      pageBook.showPage(viewerHolder);
      viewerHolder.setRedraw(false);
      enableFilters(true);
      onSetActiveConfig(config);
      viewer.configure(config);

      treeManager.removeAll();
      if (config.hasDrillDown()) {
        DrillDownAdapter dd = new DrillDownAdapter(viewer
            .getTreeViewer()) {

         
          public void goBack() {
            super.goBack();
            updateTitle(viewer.getTreeViewer().getInput());
          }

         
          public void goHome() {
            super.goHome();
            updateTitle(viewer.getTreeViewer().getInput());
          }

         
          public void goInto(Object newInput) {
            super.goInto(newInput);
            updateTitle(viewer.getTreeViewer().getInput());
          }

        };
        dd.addNavigationActions(treeManager);
      }
      treeManager.update(true);
      treeManager.getControl().getParent().layout(true, true);
      treeManager.getControl().getParent().getParent().layout(true);
      viewerHolder.setRedraw(true);
    }

  }

  protected abstract void updateTitle(Object input);

  public abstract void onSetActiveConfig(ViewerConfiguration config);

 
  public void createPartControl(Composite parent) {
    formToolkit = new FormToolkit(parent.getDisplay());
    registry = new ImageRegistry();
    form = formToolkit.createForm(parent);
    // formToolkit.decorateFormHeading(createForm);
    buttons = formToolkit.createComposite(form.getHead(), SWT.NONE);
    buttons.setBackgroundMode(SWT.INHERIT_DEFAULT);
    // buttons.setBackground(null);
    buttons.setLayout(new GridLayout(7, false));
    form.setHeadClient(buttons);
    pageBook = new PageBook(form.getBody(), SWT.NONE);
    pageBook.setLayoutData(GridDataFactory.fillDefaults().grab(true, true)
        .create());
    viewerHolder = formToolkit.createComposite(pageBook);
    // pageBook.showPage(overview);
    viewerHolder.setLayoutData(GridDataFactory.fillDefaults().grab(true,
        true).create());
    viewerHolder.setLayout(new FillLayout());
    viewer = createViewer(viewerHolder);
    createHyperLinks();
    Composite c = formToolkit.createComposite(buttons, SWT.NONE);
    c.setLayoutData(new GridData(GridData.END, GridData.FILL, true, true));
    c.setLayout(new FillLayout(SWT.HORIZONTAL));
    treeManager = new ToolBarManager(new ToolBar(c, SWT.NONE));
    overview = createOverview(pageBook);
    createExtraPages(pageBook);
    viewer.setFilter(getViewerFilter());
    lowBar = formToolkit.createComposite(form.getBody());
    lowBar.setLayoutData(GridDataFactory.fillDefaults().grab(true, false)
        .create());
    createLowBarControls(lowBar);
    createControls(parent);
    init(mode);
    getSite().setSelectionProvider(getSelectionProvider());
    Composite body = form.getBody();
    GridLayout ll2 = new GridLayout(1, false);
    body.setLayout(ll2);
    modes.get(mode).run();
  }

  protected void createExtraPages(PageBook pageBook2) {
   
  }

  protected abstract void createLowBarControls(Composite lowBar);

  protected abstract ConfigurableViewer createViewer(Composite viewerHolder);

  protected abstract void createHyperLinks();

  protected Image getImage(String text) {
    Image image = registry.get(text);
    if (image != null) {
      return image;
    }
    ImageDescriptor imageDescriptorFromPlugin = AbstractUIPlugin
        .imageDescriptorFromPlugin(imagesId, text);
    registry.put(text, imageDescriptorFromPlugin);
    return registry.get(text);
  }

  protected void sheduleFilterAdjust() {
    lastChange = System.currentTimeMillis();
    if (!sheduled) {
      sheduled = true;

      Display.getCurrent().asyncExec(new Runnable() {

        public void run() {
          long currentTimeMillis = System.currentTimeMillis();
          if (currentTimeMillis - lastChange > 500) {
            sheduled = false;
            if (!viewerHolder.isDisposed()) {
              setupNewFilter();
            }

          } else {
            Display.getCurrent().asyncExec(this);
          }
        }

      });
    }
  }

  protected ISelectionProvider getSelectionProvider() {
    return viewer.getSelectionProvider();
  }

  protected abstract void setupNewFilter();

  protected void createViewerConfigurationLink(String text, String image,
      ViewerConfiguration hotSpotConfiguration) {
    createLink(text, image, new ViewerConfigurationRunnable(
        hotSpotConfiguration));
  }

  protected abstract IFilter getViewerFilter();

  protected ImageHyperlink createLink(String text, String image,
      final Runnable toRun) {
    modes.add(toRun);
    ImageHyperlink createImageHyperlink = formToolkit.createImageHyperlink(
        buttons, SWT.NONE);
    hyperLinks.add(createImageHyperlink);
    createImageHyperlink.setText(text);
    createImageHyperlink.setImage(getImage(image));
    createImageHyperlink.addHyperlinkListener(new IHyperlinkListener() {

      public void linkActivated(HyperlinkEvent e) {
        onNavigate(toRun);
      }

      public void linkEntered(HyperlinkEvent e) {

      }

      public void linkExited(HyperlinkEvent e) {

      }

    });
    return createImageHyperlink;
  }

  protected void init(int mode2) {
    ImageHyperlink sel = hyperLinks.get(mode2);
    for (ImageHyperlink h : hyperLinks) {
      if (h != sel) {
        h.setUnderlined(true);
        h.setBackground(h.getParent().getBackground());
      } else {
        h.setUnderlined(false);
        modeText = h.getText();
        form.setText(modeText /* + ("(" + getPartName() + ")") */);
        h.setBackground(formToolkit.getColors().getColor(
            IFormColors.H_GRADIENT_START));
      }
    }
  }

  protected abstract void createControls(Composite parent);

  protected Composite createOverview(PageBook pageBook2) {
    Map<String, String> infoMap = getInfoMap();
    final Composite overview = formToolkit.createComposite(pageBook2,
        SWT.NONE);
    final Section createSection = formToolkit.createSection(
        (Composite) overview, Section.TITLE_BAR | Section.TWISTIE);
    createSection.setText("Summary");
    Composite createComposite = formToolkit.createComposite(createSection);
    createComposite.setLayout(new GridLayout(1, false));
    formToolkit.createLabel(createComposite,
        "This section contains basic information about this snapshot");

    createOptions(createComposite, infoMap);
    Section chartsSection = formToolkit.createSection(overview,
        Section.TITLE_BAR | Section.TWISTIE);
    chartsSection.setText("Analisys");
    createSection.setClient(createComposite);
    createSection.setExpanded(true);
    createSection.setLayoutData(GridDataFactory.fillDefaults().grab(true,
        false).create());
    chartsSection.setExpanded(true);
    chartsSection.setLayoutData(GridDataFactory.fillDefaults().grab(true,
        true).create());
    IExpansionListener listener = new IExpansionListener() {

      public void expansionStateChanged(ExpansionEvent e) {
        Control c = (Control) e.getSource();
        if (e.getState()) {
          c.setLayoutData(GridDataFactory.fillDefaults().grab(true,
              c == createSection ? false : true).create());
        } else {
          c.setLayoutData(GridDataFactory.fillDefaults().grab(true,
              false).create());
        }
        overview.layout(true, true);
      }

      public void expansionStateChanging(ExpansionEvent e) {

      }

    };
    chartsSection.addExpansionListener(listener);
    createSection.addExpansionListener(listener);
    CTabFolder flt = new CTabFolder(chartsSection, SWT.BOTTOM);
    chartsSection.setClient(flt);
    createAnalisysParts(flt);
    overview.setLayout(new GridLayout(1, true));
    return overview;
  }

  protected abstract void createAnalisysParts(CTabFolder flt);

  protected Map<String, String> getInfoMap() {
    return null;
  }

  protected void createOptions(Composite createComposite,
      Map<String, String> summary) {
    FormText createFormText = formToolkit.createFormText(createComposite,
        false);
    if (summary != null) {
      StringBuilder info = new StringBuilder();
      info.append("<form>");
      for (String s : summary.keySet()) {
        info.append("<li><b>");
        info.append(s);
        info.append(':');
        info.append("</b>  ");
        info.append(summary.get(s));
        info.append("</li>");
      }

      info.append("</form>");
      createFormText.setText(info.toString(), true, true);
    }
  }

  protected void createChartSectionPart(final Object[] hotSpotsByModule,
      String title, final CTabFolder basicData, Object calc) {
    createChartSectionPart(hotSpotsByModule, title, basicData, calc, true);
  }

  protected void createChartSectionPart(final Object[] hotSpotsByModule,
      String title, final CTabFolder basicData, Object calc,
      boolean createLabels) {

    final Composite chart = formToolkit
        .createComposite((Composite) basicData);
    Composite createComposite1 = formToolkit.createComposite(chart);

    createComposite1.setLayout(new GridLayout(1, false));
    // formToolkit
    // .createLabel(createComposite1,
    // "This section contains information about detected module hot spots");
    // chart.setClient(createComposite1);
    // chart.setText(title);

    chart.setLayoutData(GridDataFactory.fillDefaults().grab(true, true)
        .create());
    // chart.setExpanded(true);
    chart.setLayout(new GridLayout(3, false));
    CTabItem item = new CTabItem(basicData, SWT.NONE);
    item.setText(title);
    item.setControl(chart);

    DefaultPieDataset dataset = new DefaultPieDataset();
    double rest = 100;
    for (int a = 0; a < hotSpotsByModule.length; a++) {
      double value = getChartValue(calc, hotSpotsByModule[a]);
      rest -= value;
      dataset.setValue(getChartKey(hotSpotsByModule[a], calc), value);
    }
    if (rest > 1) {
      dataset.setValue("Other" + " "
          + StringUtils.getPercentNumberString(rest), rest);
    }
    Chart ch = createChart(dataset, title);

    ChartCanvas chartCanvas = new ChartCanvas(chart, SWT.DOUBLE_BUFFERED,
        true, ch);
    if (createLabels) {
      Composite bs = formToolkit.createComposite(chart);
      GridLayout layout = new GridLayout(1, false);
      layout.marginHeight = 20;
      bs.setLayout(layout);

      for (int a = 0; a < hotSpotsByModule.length; a++) {
        double value = getChartValue(calc, hotSpotsByModule[a]);
        ImageHyperlink createImageHyperlink = formToolkit
            .createImageHyperlink(bs, SWT.NONE);
        createImageHyperlink.setText(getChartName(hotSpotsByModule[a]));
        final Image image = new Image(Display.getCurrent(), 16, 16);
        GC gc = new GC(image);
        PiePlot plot = (PiePlot) ch.getPlot();
        String key = getChartName(hotSpotsByModule[a]) + " "
            + StringUtils.getPercentNumberString(value);
        gc.setBackground(plot.lookupSectionPaint(key, true));
        gc.fillRoundRectangle(0, 0, 16, 16, 2, 2);
        gc.dispose();
        final int b = a;
        createImageHyperlink.setImage(image);
        createImageHyperlink.addDisposeListener(new DisposeListener() {

          public void widgetDisposed(DisposeEvent e) {
            image.dispose();
          }

        });
        createImageHyperlink
            .addHyperlinkListener(new IHyperlinkListener() {

              public void linkActivated(HyperlinkEvent e) {
                handleOpen(hotSpotsByModule[b]);
              }

              public void linkEntered(HyperlinkEvent e) {

              }

              public void linkExited(HyperlinkEvent e) {

              }

            });

      }
      bs.setLayoutData(GridDataFactory.fillDefaults().align(GridData.END,
          GridData.BEGINNING).grab(false, true).create());
    }
    chartCanvas.setLayoutData(GridDataFactory.fillDefaults().grab(true,
        true).create());

  }

  protected abstract String getChartName(Object object);

  protected abstract double getChartValue(Object calc, Object object);

  protected Comparable<?> getChartKey(Object calc, Object object) {
    return getChartName(calc)
        + " "
        + StringUtils
            .getPercentNumberString(getChartValue(object, calc));
  }

  protected abstract void handleOpen(Object object);

  private Chart createChart(DefaultPieDataset dataset, String title) {
    Chart chart = ChartFactory.createPieChart(title,
    // title
        dataset, // data
        true, Locale.getDefault()// include legend
        );
    PiePlot plot = (PiePlot) chart.getPlot();
    plot.setSectionOutlinesVisible(false);
    plot.setNoDataMessage("No data available");
    plot.setSimpleLabels(false);
    plot.setCircular(true);
    chart.setPadding(new RectangleInsets(0, 0, 0, 0));
    chart.removeLegend();
    return chart;
  }

  protected void onNavigate(final Runnable toRun) {
    init(modes.indexOf(toRun));
    toRun.run();
  }
}
TOP

Related Classes of com.onpositive.commons.ui.viewers.AbstractViewerEditorPart$ShowOverViewRunnable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.