package org.projectusus.ui.dependencygraph.views;
import java.util.Set;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.projectusus.core.IUsusModelListener;
import org.projectusus.core.statistics.UsusModelProvider;
import org.projectusus.ui.dependencygraph.colorProvider.PackageEdgeColorProvider;
import org.projectusus.ui.dependencygraph.common.DependencyGraphModel;
import org.projectusus.ui.dependencygraph.common.DependencyGraphView;
import org.projectusus.ui.dependencygraph.common.DependencyGraphViewer;
import org.projectusus.ui.dependencygraph.nodes.GraphNode;
import org.projectusus.ui.dependencygraph.nodes.PackageRepresenter;
public class PackageGraphView extends DependencyGraphView {
public static final String VIEW_ID = "org.projectusus.ui.dependencygraph.PackageGraphView";
private static final String ONLY_IN_CYCLES = "Only cyclic dependencies";
private static final DependencyGraphModel packageGraphModel = new DependencyGraphModel() {
@Override
protected Set<? extends GraphNode> getRefreshedNodes() {
return PackageRepresenter.getAllPackages();
}
};
private static final PackageEdgeColorProvider packageEdgeColorProvider = new PackageEdgeColorProvider();
private boolean highlightStrongConnections = false;
private final IUsusModelListener listener;
public PackageGraphView() {
super( VIEW_ID, packageGraphModel, packageEdgeColorProvider );
listener = new IUsusModelListener() {
public void ususModelChanged() {
packageEdgeColorProvider.calculatePackageRelations();
}
};
UsusModelProvider.ususModel().addUsusModelListener( listener );
}
@Override
public void dispose() {
UsusModelProvider.ususModel().removeUsusModelListener( listener );
super.dispose();
}
@Override
public String getFilenameForScreenshot() {
return "usus-package-graph";
}
@Override
protected String getRestrictingCheckboxLabelName() {
return ONLY_IN_CYCLES;
}
@Override
protected Control createAdditionalWidgets( Composite filterArea ) {
Composite composite = new Composite( filterArea, SWT.NONE );
composite.setLayout( GridLayoutFactory.fillDefaults().numColumns( 4 ).spacing( 10, 0 ).create() );
createRestrictingCheckBox( composite );
createHighlightCheckbox( composite );
return composite;
}
private void createHighlightCheckbox( Composite composite ) {
final Button checkbox = new Button( composite, SWT.CHECK );
checkbox.setText( "Highlight strong connections" );
checkbox.setToolTipText( "Saturates edges based on the number of relations among packages" );
checkbox.addSelectionListener( highlightCheckboxSelectionAdapter() );
checkbox.setSelection( highlightStrongConnections );
}
private SelectionAdapter highlightCheckboxSelectionAdapter() {
return new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
Display.getDefault().asyncExec( new Runnable() {
public void run() {
Button source = (Button)e.getSource();
highlightStrongConnections = source.getSelection();
DependencyGraphViewer graphViewer = (DependencyGraphViewer)getZoomableViewer();
graphViewer.setHighlightStrongConnections( highlightStrongConnections );
graphViewer.refresh();
}
} );
}
};
}
}