Package com.dubture.composer.ui.editor.composer

Source Code of com.dubture.composer.ui.editor.composer.DependencyGraphPage$DevFilter

package com.dubture.composer.ui.editor.composer;

import java.io.IOException;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.zest.core.viewers.GraphViewer;
import org.eclipse.zest.core.widgets.ZestStyles;
import org.eclipse.zest.layouts.LayoutAlgorithm;
import org.eclipse.zest.layouts.LayoutStyles;
import org.eclipse.zest.layouts.algorithms.CompositeLayoutAlgorithm;
import org.eclipse.zest.layouts.algorithms.HorizontalShift;
import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;

import com.dubture.composer.core.ComposerPlugin;
import com.dubture.composer.core.log.Logger;
import com.dubture.composer.core.resources.IComposerProject;
import com.dubture.composer.ui.actions.ToggleDevAction;
import com.dubture.composer.ui.controller.GraphController;
import com.dubture.composer.ui.editor.ComposerFormPage;
import com.dubture.composer.ui.editor.toolbar.SearchControl;
import com.dubture.getcomposer.core.ComposerPackage;
import com.dubture.getcomposer.core.collection.ComposerPackages;

/**
* @author Robert Gruendler <r.gruendler@gmail.com>
*/
public class DependencyGraphPage extends ComposerFormPage implements ModifyListener {

  private static final String SEARCH_ID = "composer.dpg.search";
  private static final String SEPARATOR_ID = "composer.dpg.separator";
  public final static String ID = "com.dubture.composer.ui.editor.composer.DependencyGraphPage";
  protected ComposerFormEditor editor;
  private GraphController graphController;
  private GraphViewer viewer;
  private IComposerProject composerProject;
  private IProject project;
  private SearchControl searchControl;
 
  private IToolBarManager manager;
 
 
  public DependencyGraphPage(ComposerFormEditor editor, String id, String title) {
    super(editor, id, title);
    this.editor = editor;
  }
 
  @Override
  public void setActive(boolean active) {
    super.setActive(active);
    if (active) {
      editor.getHeaderForm().getForm().setText("Dependency Graph");
    }
   
    active = active && editor.isValidJson();
   
    // set toolbar contributions visible
    manager.find(ToggleDevAction.ID).setVisible(active);
    manager.find(SEPARATOR_ID).setVisible(active);
    searchControl.setVisible(active);
    manager.update(true);
   
    viewer.getControl().setEnabled(active);
   
    if (active) {
      update();
    }
  }

  @Override
  protected void createFormContent(IManagedForm managedForm) {
    try {
      createGraph(managedForm);
    } catch (IOException e) {
      Logger.logException(e);
    }
  }
 
  private void createGraph(IManagedForm managedForm) throws IOException {
   
    ScrolledForm form = managedForm.getForm();
    Composite body = form.getBody();
    body.setLayout(new FillLayout());
   
    project = getComposerEditor().getProject();
    composerProject = ComposerPlugin.getDefault().getComposerProject(project);
    graphController = new GraphController(composerProject);
    graphController.setComposerProject(composerProject);
    viewer = new GraphViewer(body, SWT.NO_REDRAW_RESIZE);
    viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
    viewer.setContentProvider(graphController);
    viewer.setLabelProvider(graphController);
    viewer.setLayoutAlgorithm(setLayout());
    viewer.applyLayout();

    DevFilter filter = new DevFilter();
    ViewerFilter[] filters = new ViewerFilter[1];
    filters[0] = filter;
    viewer.setFilters(filters);
   
    update();
  }
 
  @Override
  public void contributeToToolbar(IToolBarManager manager, IManagedForm headerForm) {
    this.manager = manager;
    searchControl = new SearchControl(SEARCH_ID, headerForm);
    searchControl.setVisible(false);
    searchControl.addModifyListener(this);
   
    manager.add(searchControl);
    manager.add(new ToggleDevAction(this));
    manager.find(ToggleDevAction.ID).setVisible(false);
   
    Separator graphSeparator = new Separator();
    graphSeparator.setId(SEPARATOR_ID);
    graphSeparator.setVisible(false);
    manager.add(graphSeparator);
  }
 
  private LayoutAlgorithm setLayout() {
    LayoutAlgorithm layout;
    layout = new CompositeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING,
        new  LayoutAlgorithm[] {
          new TreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING),
          new HorizontalShift(LayoutStyles.NO_LAYOUT_NODE_RESIZING) });
    return layout;
  }
 
  private class DevFilter extends ViewerFilter {
    protected boolean showDev = true;

    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
      if (showDev == true) {
        return true;
      }

      if (element instanceof ComposerPackage) {
        return !composerProject.getComposerPackage().getRequireDev().has((ComposerPackage)element);
      }

      return true;
    }

    public void hideDevPackages() {
      showDev = false;
    }
  }
 
  protected void update() {
    if (composerProject != null
        && viewer != null
        && !viewer.getControl().isDisposed()
        && editor.isValidJson()) {
      ComposerPackages packages = composerProject.getInstalledPackages();
      packages.add(composerProject.getComposerPackage());
      viewer.setInput(packages);
      applyFilter(true);
    }
  }
 
  public void applyFilter(boolean showDev) {
    DevFilter filter = new DevFilter();

    if (!showDev) {
      filter.hideDevPackages();
    }

    ViewerFilter[] filters = new ViewerFilter[1];
    filters[0] = filter;
    viewer.setFilters(filters);
    viewer.applyLayout();
  }

  @Override
  public void modifyText(ModifyEvent e) {
    long start = System.nanoTime();
   
    graphController.setFilterText(searchControl.getText());
    viewer.refresh();
   
    double elapsed = (System.nanoTime() - start) * 1.0e-9;
   
    System.err.println("refresh inaaa " + elapsed);
  }
}
TOP

Related Classes of com.dubture.composer.ui.editor.composer.DependencyGraphPage$DevFilter

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.