package com.dubture.composer.ui.controller; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.IFigure; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; import org.eclipse.zest.core.viewers.EntityConnectionData; import org.eclipse.zest.core.viewers.IEntityStyleProvider; import org.eclipse.zest.core.viewers.IGraphEntityContentProvider; import com.dubture.composer.core.resources.IComposerProject; import com.dubture.getcomposer.core.ComposerPackage; import com.dubture.getcomposer.core.collection.ComposerPackages; public class GraphController extends LabelProvider implements IStructuredContentProvider, IGraphEntityContentProvider, IEntityStyleProvider { private Color LIGHT_BLUE = new Color(Display.getDefault(), 216, 228, 248); private Color DARK_BLUE = new Color(Display.getDefault(), 1, 70, 122); private Color LIGHT_GREY = new Color(null, 192, 192, 192); private Color GREEN = new Color(Display.getDefault(), 166, 222, 168); private ComposerPackages packages; private IComposerProject composerProject; private String filterText; public GraphController(IComposerProject project) { composerProject = project; } public void setComposerProject(IComposerProject project) { composerProject = project; } @Override public Object[] getConnectedTo(Object entity) { if (!(entity instanceof ComposerPackage)) { return null; } ComposerPackages connections = new ComposerPackages(); ComposerPackage pkg = (ComposerPackage) entity; for (ComposerPackage target : packages) { if (pkg.getRequire().has(target) || pkg.getRequireDev().has(target)) { connections.add(target); } } return connections.toArray(); } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (newInput instanceof ComposerPackages) { packages = (ComposerPackages) newInput; } } @Override public Object[] getElements(Object inputElement) { return packages.toArray(); } @Override public String getText(Object element) { if (element instanceof ComposerPackage) { return ((ComposerPackage) element).getName(); } if (element instanceof EntityConnectionData) { return ""; } return super.getText(element); } @Override public Color getNodeHighlightColor(Object entity) { return ColorConstants.yellow; } @Override public Color getBorderColor(Object entity) { return LIGHT_GREY; } @Override public Color getBorderHighlightColor(Object entity) { return LIGHT_GREY; } @Override public int getBorderWidth(Object entity) { return 0; } @Override public Color getBackgroundColour(Object entity) { if (entity instanceof ComposerPackage) { ComposerPackage pkg = (ComposerPackage) entity; if (filterText != null && filterText.length() > 0 && pkg.getName().contains(filterText)) { return GREEN; } if (composerProject.getComposerPackage().getRequireDev().has((ComposerPackage) entity)) { return ColorConstants.lightGray; } } return LIGHT_BLUE; } @Override public Color getForegroundColour(Object entity) { return DARK_BLUE; } @Override public IFigure getTooltip(Object entity) { return null; } @Override public boolean fisheyeNode(Object entity) { return false; } public String getFilterText() { return filterText; } public void setFilterText(String filterText) { this.filterText = filterText; } }