/******************************************************************************* * Copyright (c) 2012 Bundlemaker project team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bundlemaker project team - initial API and implementation ******************************************************************************/ package org.bundlemaker.tutorial.dependencyviewer; import org.bundlemaker.core.analysis.IBundleMakerArtifact; import org.bundlemaker.core.analysis.IDependency; import org.bundlemaker.core.ui.artifact.tree.DefaultArtifactLabelProvider; import org.eclipse.draw2d.ConnectionRouter; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.zest.core.viewers.IConnectionStyleProvider; import org.eclipse.zest.core.widgets.ZestStyles; /** * @author Nils Hartmann (nils@nilshartmann.net) * */ public class DependencyViewerLabelProvider extends LabelProvider implements IConnectionStyleProvider { private final DefaultArtifactLabelProvider _artifactLabelProvider = new DefaultArtifactLabelProvider(); private final DependencyViewerModel _model; public DependencyViewerLabelProvider(DependencyViewerModel model) { this._model = model; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object) */ @Override public Image getImage(Object element) { System.out.println("getImage, element: " + element); if (element instanceof IBundleMakerArtifact) { return _artifactLabelProvider.getImage(element); } return super.getImage(element); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { System.out.println("getText, element: " + element); if (element instanceof IBundleMakerArtifact) { return _artifactLabelProvider.getText(element); } return ""; } protected boolean isCircularReference(Object rel) { IDependency dependency = (IDependency) rel; IBundleMakerArtifact from = dependency.getFrom(); IBundleMakerArtifact to = dependency.getTo(); IDependency backDependency = to.getDependencyTo(from); System.out.println("Dependency from '" + from.getQualifiedName() + "' to '" + to.getQualifiedName() + "' circular: " + (backDependency != null)); return backDependency != null && backDependency.getWeight() != 0; } /* * (non-Javadoc) * * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getConnectionStyle(java.lang.Object) */ @Override public int getConnectionStyle(Object rel) { return ZestStyles.CONNECTIONS_DIRECTED; // return isCircularReference(rel) ? ZestStyles.CONNECTIONS_SOLID : ZestStyles.CONNECTIONS_DIRECTED; } public Color DARK_GRAY = new Color(Display.getDefault(), 49, 79, 79); public Color DARK_BLUE = new Color(Display.getDefault(), 0, 0, 255); public Color RED = new Color(Display.getDefault(), 255, 0, 0); /* * (non-Javadoc) * * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getColor(java.lang.Object) */ @Override public Color getColor(Object rel) { return isCircularReference(rel) ? RED : DARK_GRAY; } /* * (non-Javadoc) * * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getHighlightColor(java.lang.Object) */ @Override public Color getHighlightColor(Object rel) { return DARK_BLUE; } /* * (non-Javadoc) * * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getLineWidth(java.lang.Object) */ @Override public int getLineWidth(Object rel) { IDependency dependency = (IDependency) rel; return _model.getWeight(dependency); } /* * (non-Javadoc) * * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getTooltip(java.lang.Object) */ @Override public IFigure getTooltip(Object element) { if (element instanceof IDependency) { IDependency dependency = (IDependency) element; String tooltipText = dependencyAsString(dependency); IDependency reverseDependency = dependency.getTo().getDependencyTo(dependency.getFrom()); int backCount = (reverseDependency == null ? 0 : reverseDependency.getWeight()); if (backCount > 0) { tooltipText += "\n" + dependencyAsString(reverseDependency); } Label label = new Label(tooltipText); return label; } return null; } private String dependencyAsString(IDependency dependency) { String string = "From " + dependency.getFrom().getName() + " to " + dependency.getTo().getName() + ": " + dependency.getWeight() + " references"; return string; } @Override public ConnectionRouter getRouter(Object rel) { return null; } }