package org.projectusus.ui.dependencygraph.views;
import static java.util.Collections.singleton;
import java.util.Collection;
import java.util.Set;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.projectusus.ui.dependencygraph.colorProvider.ClassEdgeColorProvider;
import org.projectusus.ui.dependencygraph.common.DependencyGraphModel;
import org.projectusus.ui.dependencygraph.common.DependencyGraphView;
import org.projectusus.ui.dependencygraph.nodes.ClassRepresenter;
import org.projectusus.ui.dependencygraph.nodes.GraphNode;
import org.projectusus.ui.dependencygraph.sourcefolder.SourceFolderFilterExtension;
public class ClassGraphView extends DependencyGraphView {
public static final String VIEW_ID = "org.projectusus.ui.dependencygraph.ClassGraphView";
private static final String ONLY_CROSS_PACKAGE = "Only cross-package relations";
private static final DependencyGraphModel classGraphModel = new DependencyGraphModel() {
@Override
protected Set<? extends GraphNode> getRefreshedNodes() {
return ClassRepresenter.getAllClassRepresenters();
}
};
private final ToolBarManager toolBarManager = new ToolBarManager( SWT.HORIZONTAL | SWT.RIGHT );
private final SourceFolderFilterExtension sourceFolderFilterExtension;
private Composite additionalWidgetsComposite;
public ClassGraphView() {
super( VIEW_ID, classGraphModel, new ClassEdgeColorProvider() );
sourceFolderFilterExtension = new SourceFolderFilterExtension( this );
}
@Override
public void createPartControl( Composite parent ) {
super.createPartControl( parent );
sourceFolderFilterExtension.initialize();
}
@Override
protected Collection<? extends ViewerFilter> createAdditionalFilters() {
return singleton( sourceFolderFilterExtension.getFilter() );
}
@Override
public String getFilenameForScreenshot() {
return "usus-class-graph";
}
@Override
protected String getRestrictingCheckboxLabelName() {
return ONLY_CROSS_PACKAGE;
}
@Override
public void dispose() {
sourceFolderFilterExtension.dispose();
toolBarManager.dispose();
super.dispose();
}
@Override
protected Control createAdditionalWidgets( Composite filterArea ) {
additionalWidgetsComposite = new Composite( filterArea, SWT.NONE );
additionalWidgetsComposite.setLayout( GridLayoutFactory.fillDefaults().numColumns( 2 ).spacing( 10, 0 ).create() );
createAdditionalToolbar( additionalWidgetsComposite );
createRestrictingCheckBox( additionalWidgetsComposite );
return additionalWidgetsComposite;
}
private void createAdditionalToolbar( Composite parent ) {
sourceFolderFilterExtension.contributeTo( toolBarManager );
toolBarManager.createControl( parent );
}
@Override
public void refresh() {
Display.getDefault().asyncExec( new Runnable() {
public void run() {
additionalWidgetsComposite.layout();
ClassGraphView.super.refresh();
}
} );
}
}