package org.eclipse.graphiti.testtool.sketch; import java.util.List; import org.eclipse.graphiti.datatypes.ILocation; import org.eclipse.graphiti.mm.algorithms.AbstractText; import org.eclipse.graphiti.mm.algorithms.Ellipse; import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm; import org.eclipse.graphiti.mm.pictograms.ContainerShape; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import org.eclipse.graphiti.mm.pictograms.Shape; import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.services.ICreateService; import org.eclipse.graphiti.services.IPeService; import org.eclipse.graphiti.util.IColorConstant; /** * The Class SketchUtil. */ public class SketchUtil { /** * The Constant POOL_TAG. */ public static final String POOL_TAG = "POOL"; //$NON-NLS-1$ /** * The Constant LANE_TAG. */ public static final String LANE_TAG = "LANE"; //$NON-NLS-1$ public static final String GHOST_TAG = "GHOST_TAG"; //$NON-NLS-1$ public static final String CONTAINER_TAG = "CONTAINER_TAG"; //$NON-NLS-1$ public static final String GA_TAG = "GA_TAG"; //$NON-NLS-1$ // values for key GA_TAG public static final String GA_RECTANGLE = "GA_RECTANGLE"; //$NON-NLS-1$ public static final String GA_ROUNDED_RECTANGLE = "GA_ROUNDED_RECTANGLE"; //$NON-NLS-1$ public static final String GA_ELLIPSE = "GA_ELLIPSE"; //$NON-NLS-1$ // values for connection point public static final String CONNECTION_POINT = "CONNECTION_POINT"; //$NON-NLS-1$ public static final String CONNECTION_POINT_KEY = "CONNECTION_POINT_TAG"; //$NON-NLS-1$ /** * Gets the current label value. * * @param containerPe * the container pe * * @return the current label value */ public static String getCurrentLabelValue(PictogramElement containerPe) { String ret = ""; //$NON-NLS-1$ AbstractText text = getLabelGa(containerPe); if (text != null) { ret = text.getValue(); } return ret; } /** * Sets the current label value. * * @param containerPe * the container pe * @param newValue * the new value */ public static void setCurrentLabelValue(PictogramElement containerPe, String newValue) { AbstractText text = getLabelGa(containerPe); if (text != null) { text.setValue(newValue); } } /** * Gets the label ga. * * @param containerPe * the container pe * * @return the label ga */ public static AbstractText getLabelGa(PictogramElement containerPe) { AbstractText ret = null; List<GraphicsAlgorithm> children = containerPe.getGraphicsAlgorithm().getGraphicsAlgorithmChildren(); if (children.size() > 0) { GraphicsAlgorithm ga = children.get(0); if (ga instanceof AbstractText) { ret = (AbstractText) ga; } } return ret; } /** * Checks if is pool pe. * * @param pe * the pe * * @return true, if is pool pe */ public static boolean isPoolPe(PictogramElement pe) { return Graphiti.getPeService().getProperty(pe, POOL_TAG) != null; } /** * Checks if is lane pe. * * @param pe * the pe * * @return true, if is lane pe */ public static boolean isLanePe(PictogramElement pe) { return Graphiti.getPeService().getProperty(pe, LANE_TAG) != null; } /** * Checks if is lonely lane pe. * * @param pe * the pe * * @return true, if is lonely lane pe */ public static boolean isLonelyLanePe(PictogramElement pe) { boolean isLane = isLanePe(pe); if (isLane && pe instanceof ContainerShape) { ContainerShape cs = (ContainerShape) pe; ContainerShape container = cs.getContainer(); if (isPoolPe(container)) { List<Shape> children = container.getChildren(); int laneCounter = 0; for (Object child : children) { if (child instanceof PictogramElement) { PictogramElement childPe = (PictogramElement) child; if (isLanePe(childPe)) { laneCounter++; } } } return laneCounter == 1; } } return false; } /** * Gets the ghost ga. * * @param pictogramElement * the pictogram element * * @return the ghost ga */ public static GraphicsAlgorithm getGhostGa(PictogramElement pictogramElement) { final GraphicsAlgorithm potGhostGa = pictogramElement.getGraphicsAlgorithm(); final List<GraphicsAlgorithm> gaChildren = potGhostGa.getGraphicsAlgorithmChildren(); if (gaChildren.size() == 2) { if (gaChildren.get(1) instanceof AbstractText) { return potGhostGa; } } return null; } public static boolean isGhost(PictogramElement pe) { return Graphiti.getPeService().getProperty(pe, GHOST_TAG) != null; } public static boolean isContainer(PictogramElement pe) { return Graphiti.getPeService().getProperty(pe, CONTAINER_TAG) != null; } public static boolean isRectangle(PictogramElement pe) { return GA_RECTANGLE.equals(Graphiti.getPeService().getPropertyValue(pe, GA_TAG)); } public static boolean isRoundedRectangle(PictogramElement pe) { return GA_ROUNDED_RECTANGLE.equals(Graphiti.getPeService().getPropertyValue(pe, GA_TAG)); } public static boolean isConnectionPoint(PictogramElement pe) { return CONNECTION_POINT.equals(Graphiti.getPeService().getPropertyValue(pe, CONNECTION_POINT_KEY)); } public static Shape createConnectionPoint(ILocation location, ContainerShape cs) { final int POINT_SIZE = 15; ICreateService createService = Graphiti.getCreateService(); IPeService peService = Graphiti.getPeService(); Shape ret = createService.createShape(cs, true); peService.setPropertyValue(ret, CONNECTION_POINT_KEY, CONNECTION_POINT); Ellipse ellipse = createService.createEllipse(ret); int x = 0, y = 0; if (location != null) { x = location.getX(); y = location.getY(); } Graphiti.getLayoutService().setLocationAndSize(ellipse, x - POINT_SIZE / 2, y - POINT_SIZE / 2, POINT_SIZE, POINT_SIZE); ellipse.setFilled(true); Diagram diagram = peService.getDiagramForPictogramElement(ret); ellipse.setForeground(Graphiti.getGaService().manageColor(diagram, IColorConstant.LIGHT_BLUE)); return ret; } }