blob: 70194306d8a5162626ba3dc7a3009ecfe8d68bd4 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2012 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
* mwenz - Bug 355347 - Remove setters of Graphiti's Font Interface
* cbrand - Bug 376585 - Clean-up deprecations in Graphiti
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.examples.common.pattern.compartment;
import java.util.List;
import org.eclipse.graphiti.examples.common.Messages;
import org.eclipse.graphiti.features.IDirectEditingInfo;
import org.eclipse.graphiti.features.IReason;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.ILayoutContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.features.impl.Reason;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.Image;
import org.eclipse.graphiti.mm.algorithms.Polyline;
import org.eclipse.graphiti.mm.algorithms.Rectangle;
import org.eclipse.graphiti.mm.algorithms.RoundedRectangle;
import org.eclipse.graphiti.mm.algorithms.Text;
import org.eclipse.graphiti.mm.algorithms.styles.Orientation;
import org.eclipse.graphiti.mm.algorithms.styles.Point;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.PictogramLink;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.pattern.AbstractPattern;
import org.eclipse.graphiti.pattern.mapping.ILinkCreationInfo;
import org.eclipse.graphiti.pattern.mapping.IStructureMapping;
import org.eclipse.graphiti.pattern.mapping.IStructureMappingMulti;
import org.eclipse.graphiti.pattern.mapping.IStructureMappingSingle;
import org.eclipse.graphiti.pattern.mapping.data.IDataMapping;
import org.eclipse.graphiti.pattern.mapping.data.IImageDataMapping;
import org.eclipse.graphiti.pattern.mapping.data.ITextDataMapping;
import org.eclipse.graphiti.pattern.mapping.data.LabelDataMapping;
import org.eclipse.graphiti.platform.IPlatformImageConstants;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.services.IGaCreateService;
import org.eclipse.graphiti.services.IGaService;
import org.eclipse.graphiti.services.ILinkService;
import org.eclipse.graphiti.services.IPeCreateService;
/**
* The Class CompartmentPattern.
*/
public abstract class CompartmentPattern extends AbstractPattern {
private final static int TEXT_HEIGHT = 25;
private IStructureMappingSingle headerMapping;
private IStructureMappingMulti[] compartmentMappings;
/**
* Instantiates a new compartment pattern.
*/
public CompartmentPattern() {
super(new DefaultCompartmentPatternConfiguration());
}
@Override
public PictogramElement add(IAddContext context) {
Object mainBusinessObject = context.getNewObject();
ContainerShape parentContainerShape = context.getTargetContainer();
// CONTAINER SHAPE WITH ROUNDED RECTANGLE
final IPeCreateService peCreateService = Graphiti.getPeCreateService();
IGaCreateService gaCreateService = Graphiti.getGaCreateService();
IGaService gaService = Graphiti.getGaService();
ContainerShape containerShape = peCreateService.createContainerShape(parentContainerShape, true);
getFeatureProvider().getDirectEditingInfo().setMainPictogramElement(containerShape);
// check whether valid size is available, e.g. if called from the create
// feature
int width = context.getWidth() <= 0 ? 100 : context.getWidth();
int height = context.getHeight() <= 0 ? 120 : context.getHeight();
{
// create and set graphics algorithm
RoundedRectangle roundedRectangle = gaCreateService.createRoundedRectangle(containerShape, getConfiguration().getCornerWidth(),
getConfiguration().getCornerHeight());
roundedRectangle.setForeground(manageColor(getConfiguration().getForegroundColor()));
roundedRectangle.setBackground(manageColor(getConfiguration().getBackgroundColor()));
roundedRectangle.setLineWidth(getConfiguration().getLineWidth());
roundedRectangle.setTransparency(getConfiguration().getTransparency());
Graphiti.getGaService().setLocationAndSize(roundedRectangle, context.getX(), context.getY(), width, height);
// create link and wire it
link(containerShape, mainBusinessObject);
}
// HEADER SHAPE
{
// create shape for text
Shape shape = peCreateService.createShape(containerShape, false);
Text text;
if (getConfiguration().isHeaderImageVisible()) {
Rectangle rectangle = gaCreateService.createRectangle(shape);
rectangle.setFilled(false);
rectangle.setLineVisible(false);
gaCreateService.createImage(rectangle, IPlatformImageConstants.IMG_EDIT_EXPANDALL);
text = gaCreateService.createText(rectangle);
text.setForeground(manageColor(getConfiguration().getTextColor()));
text.setHorizontalAlignment(Orientation.ALIGNMENT_LEFT);
text.setVerticalAlignment(Orientation.ALIGNMENT_CENTER);
text.setFont(gaService.manageDefaultFont(getDiagram(), false, true));
} else { // just a text data mapping
text = gaCreateService.createText(shape);
text.setForeground(manageColor(getConfiguration().getTextColor()));
text.setHorizontalAlignment(Orientation.ALIGNMENT_CENTER);
text.setVerticalAlignment(Orientation.ALIGNMENT_CENTER);
text.setFont(gaService.manageDefaultFont(getDiagram(), false, true));
}
IDirectEditingInfo dei = getFeatureProvider().getDirectEditingInfo();
dei.setPictogramElement(shape);
dei.setGraphicsAlgorithm(text);
// create link and wire it
ILinkCreationInfo linkCreationInfo = getHeaderMapping().getLinkCreationInfo(mainBusinessObject);
String linkProperty = linkCreationInfo.getProperty();
if (linkProperty != null) {
getLinkService().setLinkProperty(shape, linkProperty);
}
link(shape, linkCreationInfo.getBusinessObjects());
}
{
for (int compartmentIndex = 0; compartmentIndex < getCompartmentCount(); compartmentIndex++) {
// create a line shape above each compartment
// SHAPE WITH LINE
{
// create shape for line
Shape shape = peCreateService.createShape(containerShape, false);
// create and set graphics algorithm
Polyline polyline = gaCreateService.createPolyline(shape, new int[] { 0, 0, 0, 0 });
polyline.setForeground(manageColor(getConfiguration().getForegroundColor()));
polyline.setLineWidth(getConfiguration().getLineWidth());
}
ContainerShape compartmentContainerShape = peCreateService.createContainerShape(containerShape, false);
Rectangle compartmentRectangle = gaCreateService.createRectangle(compartmentContainerShape);
compartmentRectangle.setFilled(false);
compartmentRectangle.setLineVisible(false);
// createLink(compartmentContainerShape, mainBusinessObject);
}
}
peCreateService.createChopboxAnchor(containerShape);
updatePictogramElement(containerShape);
return containerShape;
}
/**
* Activates direct editing for header text control.
*/
protected void activateHeaderTextAutoDirectEditing() {
getFeatureProvider().getDirectEditingInfo().setActive(true);
}
@Override
public boolean layout(ILayoutContext context) {
boolean ret = false;
IGaService gaService = Graphiti.getGaService();
ContainerShape containerShape = (ContainerShape) context.getPictogramElement();
int continousY = getConfiguration().getOuterIndentTop();
List<Shape> containerShapeChildren = containerShape.getChildren();
// width
{
int containerWidth = containerShape.getGraphicsAlgorithm().getWidth();
int minimumWidth = getConfiguration().getMinimumWidth();
if (containerWidth < minimumWidth) {
containerShape.getGraphicsAlgorithm().setWidth(minimumWidth);
containerWidth = minimumWidth;
ret = true;
}
int innerWidth = containerWidth - getConfiguration().getOuterIndentLeft() - getConfiguration().getOuterIndentRight(); // without
// indents
for (Shape shape : containerShapeChildren) {
GraphicsAlgorithm ga = shape.getGraphicsAlgorithm();
// move horizontal lines
if (ga instanceof Polyline) {
Polyline pl = (Polyline) ga;
List<Point> points = pl.getPoints();
int x0 = points.get(0).getX();
points.set(0, gaService.createPoint(x0, continousY));
points.set(1, gaService.createPoint(containerWidth, continousY));
} else {
if (shape instanceof ContainerShape) {
ContainerShape compartmentContainerShape = (ContainerShape) shape;
compartmentContainerShape.getGraphicsAlgorithm().setY(continousY);
// loop the shapes inside a compartment
int innerY = 0;
for (Shape innerCompartmentShape : compartmentContainerShape.getChildren()) {
GraphicsAlgorithm innerGa = innerCompartmentShape.getGraphicsAlgorithm();
gaService.setLocationAndSize(innerGa, 0, innerY, innerWidth, TEXT_HEIGHT);
GraphicsAlgorithm imageGa = innerGa.getGraphicsAlgorithmChildren().get(0);
gaService.setLocationAndSize(imageGa, 0, 0, TEXT_HEIGHT, TEXT_HEIGHT);
GraphicsAlgorithm textGa = innerGa.getGraphicsAlgorithmChildren().get(1);
gaService.setLocationAndSize(textGa, TEXT_HEIGHT, 0, innerWidth - TEXT_HEIGHT, TEXT_HEIGHT);
innerY += TEXT_HEIGHT;
}
int compartmentHeight = compartmentContainerShape.getChildren().size() * TEXT_HEIGHT;
gaService.setLocationAndSize(compartmentContainerShape.getGraphicsAlgorithm(), getConfiguration()
.getOuterIndentLeft(), continousY, innerWidth, compartmentHeight, true);
} else { // header shape
gaService.setLocationAndSize(shape.getGraphicsAlgorithm(), getConfiguration().getOuterIndentLeft(),
getConfiguration().getOuterIndentTop(), innerWidth, TEXT_HEIGHT);
if (getConfiguration().isHeaderImageVisible()) {
GraphicsAlgorithm imageGa = ga.getGraphicsAlgorithmChildren().get(0);
GraphicsAlgorithm textGa = ga.getGraphicsAlgorithmChildren().get(1);
gaService.setLocationAndSize(imageGa, 0, 0, TEXT_HEIGHT, TEXT_HEIGHT);
gaService.setLocationAndSize(textGa, TEXT_HEIGHT, 0, innerWidth - TEXT_HEIGHT, TEXT_HEIGHT);
}
}
continousY += gaService.calculateSize(ga).getHeight();
}
}
}
// height
{
int additionalHeight = 0;
int compartmentCount = containerShapeChildren.size();
if (compartmentCount >= 1) {
Object lastCompartment = containerShapeChildren.get(compartmentCount - 1);
if (lastCompartment instanceof ContainerShape) {
ContainerShape lastCompartmentCs = (ContainerShape) lastCompartment;
if (lastCompartmentCs.getChildren().size() == 0) {
additionalHeight = getConfiguration().getCornerHeight() / 2;
}
}
}
int containerHeight = containerShape.getGraphicsAlgorithm().getHeight();
int newHeight = Math.max(containerHeight, continousY + additionalHeight + getConfiguration().getOuterIndentBottom());
newHeight = Math.max(newHeight, getConfiguration().getMinimumHeight());
if (containerHeight != newHeight) {
containerShape.getGraphicsAlgorithm().setHeight(newHeight);
ret = true;
}
}
return ret;
}
@Override
public boolean update(IUpdateContext context) {
boolean ret = false;
PictogramElement pe = context.getPictogramElement();
if (isPatternRoot(pe)) {
ret = updateAndLayoutRoot((ContainerShape) pe);
} else {
ContainerShape rootContainer = getPatternRoot(pe);
if (rootContainer != null) {
ret = updateAndLayoutRoot(rootContainer);
}
}
return ret;
}
@Override
public IReason updateNeeded(IUpdateContext context) {
// check only if the given pictogram element is the outer container
// shape
PictogramElement pe = context.getPictogramElement();
if (isPatternRoot(pe)) {
ContainerShape outerContainerShape = (ContainerShape) pe;
// check header
if (getHeaderMapping().getDataMapping() instanceof LabelDataMapping) {
} else {
Shape textShape = outerContainerShape.getChildren().get(0);
PictogramLink linkForPictogramElement = getLinkService().getLinkForPictogramElement(textShape);
if (linkForPictogramElement != null) {
GraphicsAlgorithm ga = textShape.getGraphicsAlgorithm();
String currentValue = ((Text) ga).getValue();
String value = getText(getHeaderMapping(), linkForPictogramElement);
// compare values
if (currentValue == null || !currentValue.equals(value)) {
return Reason.createTrueReason(getHeaderMapping().getDataMapping().getUpdateWarning(linkForPictogramElement)); // ("header
// out
// of
// date");
}
}
}
// check compartments
Object mainBusinessObject = getBusinessObjectForPictogramElement(outerContainerShape);
for (int compartmentIndex = 0; compartmentIndex < getCompartmentCount(); compartmentIndex++) {
ContainerShape compartmentContainerShape = (ContainerShape) outerContainerShape.getChildren().get(
(compartmentIndex + 1) * 2);
if (compartmentContainerShape != null) {
IStructureMappingMulti mapping = getCompartmentMapping(compartmentIndex);
IReason ret = updateCompartmentNeeded(compartmentContainerShape, mainBusinessObject, mapping);
if (ret.toBoolean()) {
return ret;
}
}
}
}
return Reason.createFalseReason();
}
/**
* Creates the compartment mappings.
*
* @return the i structure mapping multi[]
*/
abstract protected IStructureMappingMulti[] createCompartmentMappings();
/**
* Creates the header mapping.
*
* @return the i structure mapping single
*/
abstract protected IStructureMappingSingle createHeaderMapping();
/**
* @param compartmentContainerShape
* @param linkCreationInfos
*/
private void createShapesInCompartment(ContainerShape compartmentContainerShape, List<ILinkCreationInfo> linkCreationInfos) {
IGaCreateService gaCreateService = Graphiti.getGaCreateService();
IGaService gaService = Graphiti.getGaService();
// add multi text shapes
for (ILinkCreationInfo linkCreationInfo : linkCreationInfos) {
Shape shape = Graphiti.getPeCreateService().createShape(compartmentContainerShape, false);
Rectangle rectangle = gaCreateService.createRectangle(shape);
rectangle.setFilled(false);
rectangle.setLineVisible(false);
gaCreateService.createImage(rectangle, IPlatformImageConstants.IMG_EDIT_EXPANDALL);
Text text = gaCreateService.createText(rectangle);
text.setForeground(manageColor(getConfiguration().getTextColor()));
text.setHorizontalAlignment(Orientation.ALIGNMENT_LEFT);
text.setVerticalAlignment(Orientation.ALIGNMENT_CENTER);
text.setFont(gaService.manageDefaultFont(getDiagram(), false, true));
// create link and wire it
Object[] businessObjects = linkCreationInfo.getBusinessObjects();
link(shape, businessObjects);
String linkProperty = linkCreationInfo.getProperty();
if (linkProperty != null) {
getLinkService().setLinkProperty(shape, linkProperty);
}
}
}
/**
* @return Returns the compartmentCount.
*/
private int getCompartmentCount() {
return getCompartmentMappings().length;
}
private IStructureMappingMulti getCompartmentMapping(int index) {
return getCompartmentMappings()[index];
}
private IStructureMappingMulti[] getCompartmentMappings() {
if (compartmentMappings == null) {
compartmentMappings = createCompartmentMappings();
}
return compartmentMappings;
}
private IStructureMappingSingle getHeaderMapping() {
if (headerMapping == null) {
headerMapping = createHeaderMapping();
}
return headerMapping;
}
private ContainerShape getPatternRoot(PictogramElement pe) {
ContainerShape ret = null;
// Check that a pictogram element was provided and that it is alive
if (pe == null || pe.eResource() == null) {
return ret;
}
int i = 0;
do {
if (isPatternRoot(pe)) {
ret = (ContainerShape) pe;
} else if (pe instanceof Shape) {
pe = ((Shape) pe).getContainer();
}
i++;
} while (ret == null && i < 3);
return ret;
}
private boolean isCompartment(PictogramElement pe) {
boolean ret = false;
if (pe instanceof ContainerShape) {
ContainerShape cs = (ContainerShape) pe;
ContainerShape container = cs.getContainer();
ret = isPatternRoot(container);
}
return ret;
}
@SuppressWarnings("unused")
private boolean isCompartmentEntry(PictogramElement pe) {
boolean ret = false;
if (pe instanceof ContainerShape) {
ContainerShape cs = (ContainerShape) pe;
ContainerShape container = cs.getContainer();
ret = isCompartment(container);
}
return ret;
}
@SuppressWarnings("unused")
private boolean isHeader(PictogramElement pe) {
boolean ret = false;
if (pe instanceof Shape) {
Shape shape = (Shape) pe;
GraphicsAlgorithm ga = shape.getGraphicsAlgorithm();
if (ga instanceof Text) {
ContainerShape container = shape.getContainer();
ret = isPatternRoot(container);
}
}
return ret;
}
@Override
protected boolean isPatternControlled(PictogramElement pictogramElement) {
ContainerShape patternRoot = getPatternRoot(pictogramElement);
return patternRoot != null;
}
@Override
protected boolean isPatternRoot(PictogramElement pe) {
boolean ret = false;
// Check if not null, of right instance and alive
if (pe instanceof ContainerShape && pe.eResource() != null) {
GraphicsAlgorithm ga = pe.getGraphicsAlgorithm();
if (ga instanceof RoundedRectangle) {
Object bo = getBusinessObjectForPictogramElement(pe);
ret = isMainBusinessObjectApplicable(bo);
}
}
return ret;
}
private boolean updateCompartment(Object mainBusinessObject, ContainerShape compartmentContainerShape, IStructureMappingMulti mapping) {
boolean ret = false;
List<ILinkCreationInfo> linkCreationInfos = mapping.getLinkCreationInfos(mainBusinessObject);
List<Shape> currentCompartmentElements = compartmentContainerShape.getChildren();
if (linkCreationInfos.size() != currentCompartmentElements.size()) {
Object[] a = compartmentContainerShape.getChildren().toArray();
for (int i = 0; i < a.length; i++) {
Graphiti.getPeService().deletePictogramElement((PictogramElement) a[i]);
}
createShapesInCompartment(compartmentContainerShape, linkCreationInfos);
ret = true;
}
List<Shape> childShapes = compartmentContainerShape.getChildren();
for (Shape shape : childShapes) {
ret = ret | updateCompartmentEntry(shape, mapping);
}
return ret;
}
private boolean updateCompartmentEntry(Shape shape, IStructureMappingMulti mapping) {
boolean ret = false;
PictogramLink linkForPictogramElement;
linkForPictogramElement = getLinkService().getLinkForPictogramElement(shape);
if (linkForPictogramElement != null) {
Image imageGa = (Image) shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
Text textGa = (Text) shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(1);
imageGa.setId(getImage(mapping, linkForPictogramElement));
textGa.setValue(getText(mapping, linkForPictogramElement));
ret = true;
}
return ret;
}
private IReason updateCompartmentNeeded(ContainerShape compartmentContainerShape, Object mainBusinessObject,
IStructureMappingMulti mapping) {
PictogramLink linkForPictogramElement;
List<ILinkCreationInfo> linkCreationInfos = mapping.getLinkCreationInfos(mainBusinessObject);
List<Shape> childShapes = compartmentContainerShape.getChildren();
int childShapeCount = childShapes.size();
if (linkCreationInfos.size() != childShapeCount) {
// structural change inside the compartment
return Reason.createTrueReason(Messages.CompartmentPattern_CompartmentChangesText);
} else {
// check whether compartment content has changed
for (Shape shape : childShapes) {
linkForPictogramElement = getLinkService().getLinkForPictogramElement(shape);
if (linkForPictogramElement != null) {
Image imageGa = (Image) shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
Text textGa = (Text) shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(1);
String currentImage = imageGa.getId();
String currentText = textGa.getValue();
String image = getImage(mapping, linkForPictogramElement);
String text = getText(mapping, linkForPictogramElement);
// compare values
if (currentText == null || !currentText.equals(text)) {
return Reason.createTrueReason(mapping.getDataMapping().getUpdateWarning(linkForPictogramElement)); // ("text
// differs");
}
if (!(currentImage == null && image == null)) {
if (currentImage == null || !currentImage.equals(image)) {
return Reason.createTrueReason(mapping.getDataMapping().getUpdateWarning(linkForPictogramElement)); // ("image
// differs");
}
}
}
}
}
return Reason.createFalseReason();
}
private boolean updateHeader(Shape headerShape) {
boolean ret = false;
PictogramLink linkForPictogramElement = getLinkService().getLinkForPictogramElement(headerShape);
if (linkForPictogramElement != null) {
if (getConfiguration().isHeaderImageVisible()) {
Image imageGa = (Image) headerShape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
Text textGa = (Text) headerShape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(1);
imageGa.setId(getImage(getHeaderMapping(), linkForPictogramElement));
textGa.setValue(getText(getHeaderMapping(), linkForPictogramElement));
} else {
String value = getText(getHeaderMapping(), linkForPictogramElement);
((Text) headerShape.getGraphicsAlgorithm()).setValue(value);
}
ret = true;
}
return ret;
}
private boolean updateAndLayoutRoot(ContainerShape outerContainerShape) {
Object mainBusinessObject = getBusinessObjectForPictogramElement(outerContainerShape);
// header text
Shape textShape = outerContainerShape.getChildren().get(0);
boolean ret = updateHeader(textShape);
// compartments
for (int compartmentIndex = 0; compartmentIndex < getCompartmentCount(); compartmentIndex++) {
ContainerShape compartmentContainerShape = (ContainerShape) outerContainerShape.getChildren().get((compartmentIndex + 1) * 2);
IStructureMappingMulti mapping = getCompartmentMapping(compartmentIndex);
if (compartmentContainerShape != null) {
ret = ret | updateCompartment(mainBusinessObject, compartmentContainerShape, mapping);
}
}
layoutPictogramElement(outerContainerShape);
return ret;
}
/**
* Gets the configuration.
*
* @return the configuration
*/
protected ICompartmentPatternConfiguration getConfiguration() {
return (ICompartmentPatternConfiguration) getPatternConfiguration();
}
@Override
public void completeInfo(IDirectEditingInfo info, Object bo) {
super.completeInfo(info, bo);
PictogramElement mainPictogramElement = info.getMainPictogramElement();
ContainerShape mainCs = (ContainerShape) mainPictogramElement;
if (mainCs != null) {
for (Object childShape : mainCs.getChildren()) {
if (childShape instanceof ContainerShape) {
ContainerShape compartmentCs = (ContainerShape) childShape;
for (Object compartmentEntry : compartmentCs.getChildren()) {
if (compartmentEntry instanceof Shape) {
Shape compartmentEntryShape = (Shape) compartmentEntry;
Object firstBusinessObjectForPictogramElement = getBusinessObjectForPictogramElement(compartmentEntryShape);
if (bo.equals(firstBusinessObjectForPictogramElement)) {
GraphicsAlgorithm ga = compartmentEntryShape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(1);
if (ga instanceof Text) {
info.setPictogramElement(compartmentEntryShape);
info.setGraphicsAlgorithm(ga);
return;
}
}
}
}
}
}
}
}
protected ILinkService getLinkService() {
return Graphiti.getLinkService();
}
/**
* Gets the text.
*
* @param structureMapping
* the structure mapping
* @param link
* the pictogram link
* @return the text
*/
protected String getText(IStructureMapping structureMapping, PictogramLink link) {
String ret = null;
IDataMapping dm = structureMapping.getDataMapping();
if (dm instanceof ITextDataMapping) {
ret = ((ITextDataMapping) dm).getText(link);
}
return ret;
}
/**
* Gets the image.
*
* @param structureMapping
* the structure mapping
* @param link
* the pictogram link
* @return the image
*/
protected String getImage(IStructureMapping structureMapping, PictogramLink link) {
String ret = null;
IDataMapping dm = structureMapping.getDataMapping();
if (dm instanceof IImageDataMapping) {
ret = ((IImageDataMapping) dm).getImageId(link);
}
return ret;
}
}