/*
* Copyright (c) 2012 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* HUMBOLDT EU Integrated Project #030962
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.ui.common.graph.labels;
import org.eclipse.draw2d.IFigure;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.zest.core.viewers.EntityConnectionData;
import eu.esdihumboldt.hale.common.align.extension.function.AbstractParameter;
import eu.esdihumboldt.hale.common.align.extension.function.FunctionDefinition;
import eu.esdihumboldt.hale.common.align.extension.function.ParameterDefinition;
import eu.esdihumboldt.hale.common.align.extension.function.PropertyFunctionDefinition;
import eu.esdihumboldt.hale.common.align.extension.function.TypeFunctionDefinition;
import eu.esdihumboldt.hale.common.core.service.ServiceProvider;
import eu.esdihumboldt.hale.ui.common.graph.figures.FunctionFigure;
import eu.esdihumboldt.hale.ui.common.graph.figures.ParameterFigure;
import eu.esdihumboldt.hale.ui.util.ResourceManager;
import eu.esdihumboldt.hale.ui.util.graph.CustomShapeFigure;
import eu.esdihumboldt.hale.ui.util.graph.shapes.FingerPost;
import eu.esdihumboldt.util.Pair;
/**
* Label provider for graphs based on {@link FunctionDefinition}(s).
*
* @author Patrick Lieb
*/
public class FunctionGraphLabelProvider extends GraphLabelProvider {
private static final int MAX_FIGURE_WIDTH = 150;
private final Color targetbackgroundcolor;
private final Color sourcebackgroundcolor;
private final ResourceManager resourceManager = new ResourceManager();
private final boolean showAll;
/**
* Default constructor
*
* @param provider the service provider that may be needed to obtain cell
* explanations, may be <code>null</code>
* @param showAll true if additional information (tooltips, etc.) should be
* shown
*/
public FunctionGraphLabelProvider(ServiceProvider provider, boolean showAll) {
super(null, provider);
final Display display = Display.getCurrent();
this.showAll = showAll;
targetbackgroundcolor = new Color(display, 255, 160, 122);
sourcebackgroundcolor = new Color(display, 255, 236, 139);
}
/**
* @see eu.esdihumboldt.hale.ui.common.graph.labels.GraphLabelProvider#getImage(java.lang.Object)
*/
@Override
public Image getImage(Object element) {
if (element instanceof Pair<?, ?>) {
return super.getImage(((Pair<?, ?>) element).getFirst());
}
return super.getImage(element);
}
/**
* @see eu.esdihumboldt.hale.ui.common.graph.labels.GraphLabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
if (element instanceof Pair<?, ?>) {
element = ((Pair<?, ?>) element).getFirst();
}
if (element instanceof EntityConnectionData) {
return "";
}
if (element instanceof AbstractParameter) {
String result = ((AbstractParameter) element).getDisplayName();
if (!result.equals(""))
return result;
return "(unnamed)";
}
return super.getText(element);
}
/**
* @see eu.esdihumboldt.hale.ui.common.graph.labels.GraphLabelProvider#getFigure(java.lang.Object)
*/
@Override
public IFigure getFigure(Object element) {
CustomShapeFigure figure = null;
if (element instanceof AbstractParameter) {
figure = new ParameterFigure(new FingerPost(10, SWT.LEFT),
getOccurenceString((ParameterDefinition) element),
((AbstractParameter) element).getDescription(), showAll);
}
else {
if (element instanceof Pair<?, ?>) {
element = ((Pair<?, ?>) element).getFirst();
}
if (element instanceof PropertyFunctionDefinition) {
figure = new FunctionFigure(resourceManager,
((PropertyFunctionDefinition) element).getDefinedParameters(), showAll);
}
else if (element instanceof TypeFunctionDefinition) {
figure = new FunctionFigure(resourceManager,
((TypeFunctionDefinition) element).getDefinedParameters(), showAll);
}
else if (element instanceof ParameterDefinition) {
figure = new ParameterFigure(new FingerPost(10, SWT.RIGHT),
getOccurenceString((ParameterDefinition) element),
((ParameterDefinition) element).getDescription(), showAll);
}
}
if (figure != null) {
figure.setMaximumWidth(MAX_FIGURE_WIDTH);
return figure;
}
return super.getFigure(element);
}
/**
* @see eu.esdihumboldt.hale.ui.common.graph.labels.GraphLabelProvider#getBackgroundColour(java.lang.Object)
*/
@Override
public Color getBackgroundColour(Object entity) {
if (entity instanceof AbstractParameter) {
return targetbackgroundcolor;
}
if (entity instanceof Pair<?, ?>) {
entity = ((Pair<?, ?>) entity).getFirst();
}
if (entity instanceof AbstractParameter) {
return sourcebackgroundcolor;
}
return super.getBackgroundColour(entity);
}
/**
* @see eu.esdihumboldt.hale.ui.common.graph.labels.GraphLabelProvider#dispose()
*/
@Override
public void dispose() {
resourceManager.dispose();
targetbackgroundcolor.dispose();
sourcebackgroundcolor.dispose();
super.dispose();
}
private String getOccurenceString(ParameterDefinition parameter) {
String max;
String min;
if (parameter.getMinOccurrence() == -1) {
min = "n";
}
else {
min = String.valueOf(parameter.getMinOccurrence());
}
if (parameter.getMaxOccurrence() == -1) {
max = "n";
}
else {
max = String.valueOf(parameter.getMaxOccurrence());
}
String text = min + ".." + max;
return text;
}
}