@Override public PictogramElement createShape( Object businessObject, ContainerShape layoutParent, int width, int height, IAddContext context) { final IPeCreateService peCreateService = Graphiti.getPeCreateService(); final ContainerShape containerShape = peCreateService.createContainerShape(layoutParent, true); final IGaService gaService = Graphiti.getGaService(); Diagram diagram = getFeatureProvider().getDiagramTypeProvider().getDiagram(); final Pool addedPool = (Pool) context.getNewObject(); // check whether the context has a size (e.g. from a create feature) // otherwise define a default size for the shape width = width <= 0 ? 500 : width; height = height <= 0 ? 150 : height; // create invisible outer rectangle expanded by // the width needed for the anchor final Rectangle invisibleRectangle = gaService.createInvisibleRectangle(containerShape); gaService.setLocationAndSize(invisibleRectangle, context.getX(), context.getY(), width, height); // create and set visible rectangle inside invisible rectangle Rectangle rectangle = gaService.createRectangle(invisibleRectangle); rectangle.setParentGraphicsAlgorithm(invisibleRectangle); rectangle.setStyle(StyleUtil.getStyleForPool(diagram)); gaService.setLocationAndSize(rectangle, 0, 0, width, height); // create shape for text final Shape shape = peCreateService.createShape(containerShape, false); // create and set text graphics algorithm String name = BpmnExtensionUtil.getPoolName(addedPool, ActivitiPlugin.getDefault()); final Text text = gaService.createDefaultText(diagram, shape, name); text.setStyle(StyleUtil.getStyleForEvent(diagram)); text.setHorizontalAlignment(Orientation.ALIGNMENT_CENTER); text.setVerticalAlignment(Orientation.ALIGNMENT_MIDDLE); gaService.setLocationAndSize(text, 0, 0, 20, height); text.setAngle(-90); Font font = null; if (OSUtil.getOperatingSystem() == OSEnum.Mac) { font = gaService.manageFont(diagram, text.getFont().getName(), 11, false, true); } else { font = gaService.manageDefaultFont(diagram, false, true); } text.setFont(font); // create link and wire it getFeatureProvider().link(shape, addedPool); return containerShape; }
// Checks whether a Software Dependency can be added to the target object @Override public boolean canAdd(final IAddContext context) { boolean result = false; boolean diagraminstance = context.getTargetContainer() instanceof Diagram; if (context.getNewObject() instanceof TDeploymentArtifact && !diagraminstance) { if (((TDeploymentArtifact) context.getNewObject()) .getArtifactType() .toString() .compareTo("UA") == 0) result = true; } return result; }
@Override public boolean canAdd(IAddContext context) { if (context.getNewObject() instanceof Event) { Object parentObject = getBusinessObjectForPictogramElement(context.getTargetContainer()); if (context.getTargetContainer() instanceof Diagram || parentObject instanceof SubProcess || parentObject instanceof Lane) { return true; } } return false; }
@Override public PictogramElement add(IAddContext context) { final Event addedEvent = (Event) context.getNewObject(); final ContainerShape parent = context.getTargetContainer(); // CONTAINER SHAPE WITH CIRCLE final IPeCreateService peCreateService = Graphiti.getPeCreateService(); final ContainerShape containerShape = peCreateService.createContainerShape(parent, true); // check whether the context has a size (e.g. from a create feature) // otherwise define a default size for the shape final int width = context.getWidth() <= 0 ? 35 : context.getWidth(); final int height = context.getHeight() <= 0 ? 35 : context.getHeight(); final IGaService gaService = Graphiti.getGaService(); Ellipse circle; { final Ellipse invisibleCircle = gaService.createEllipse(containerShape); invisibleCircle.setFilled(false); invisibleCircle.setLineVisible(false); gaService.setLocationAndSize(invisibleCircle, context.getX(), context.getY(), width, height); // create and set visible circle inside invisible circle circle = gaService.createEllipse(invisibleCircle); circle.setParentGraphicsAlgorithm(invisibleCircle); circle.setStyle(StyleUtil.getStyleForEvent(getDiagram())); gaService.setLocationAndSize(circle, 0, 0, width, height); // create link and wire it link(containerShape, addedEvent); } { final Shape shape = peCreateService.createShape(containerShape, false); final Image image = gaService.createImage(shape, PluginImage.IMG_STARTEVENT_MESSAGE.getImageKey()); image.setWidth(20); image.setHeight(20); gaService.setLocationAndSize(image, (width - 20) / 2, (height - 20) / 2, 20, 20); } // add a chopbox anchor to the shape peCreateService.createChopboxAnchor(containerShape); if (!(addedEvent instanceof EndEvent)) { // create an additional box relative anchor at middle-right final BoxRelativeAnchor boxAnchor = peCreateService.createBoxRelativeAnchor(containerShape); boxAnchor.setRelativeWidth(1.0); boxAnchor.setRelativeHeight(0.51); boxAnchor.setReferencedGraphicsAlgorithm(circle); final Ellipse ellipse = ActivitiUiUtil.createInvisibleEllipse(boxAnchor, gaService); gaService.setLocationAndSize(ellipse, 0, 0, 0, 0); } layoutPictogramElement(containerShape); return containerShape; }
public PictogramElement add(IAddContext context) { IAddConnectionContext addConContext = (IAddConnectionContext) context; EActionLink addedEReference = (EActionLink) context.getNewObject(); IPeCreateService peCreateService = Graphiti.getPeCreateService(); // CONNECTION WITH POLYLINE Connection connection = peCreateService.createFreeFormConnection(getDiagram()); connection.setStart(addConContext.getSourceAnchor()); connection.setEnd(addConContext.getTargetAnchor()); IGaService gaService = Graphiti.getGaService(); Polyline polyline = gaService.createPolyline(connection); polyline.setLineWidth(3); polyline.setForeground(manageColor(IColorConstant.LIGHT_ORANGE)); // create link and wire it link(connection, addedEReference); // add dynamic text decorator for the association name ConnectionDecorator textDecorator = peCreateService.createConnectionDecorator(connection, true, 0.5, true); Text text = gaService.createText(textDecorator); // createDefaultText(textDecorator); text.setForeground(manageColor(IColorConstant.BLACK)); gaService.setLocation(text, 10, 0); text.setValue("has the action"); return connection; }
@Override protected ContainerShape createPictogramElement(IAddContext context, IRectangle bounds) { T addedGateway = getBusinessObject(context); IGaService gaService = Graphiti.getGaService(); IPeService peService = Graphiti.getPeService(); int x = bounds.getX(); int y = bounds.getY(); int width = bounds.getWidth(); int height = bounds.getHeight(); // Create a container for the gateway-symbol final ContainerShape newShape = peService.createContainerShape(context.getTargetContainer(), true); final Rectangle gatewayRect = gaService.createInvisibleRectangle(newShape); gaService.setLocationAndSize(gatewayRect, x, y, width, height); Shape gatewayShape = peService.createShape(newShape, false); Polygon gateway = GraphicsUtil.createGateway(gatewayShape, width, height); StyleUtil.applyStyle(gateway, addedGateway); gaService.setLocationAndSize(gateway, 0, 0, width, height); return newShape; }
@Override protected void adjustLocationAndSize(IAddContext context, int width, int height) { if (context.getTargetConnection() != null) { adjustLocationForDropOnConnection(context); } super.adjustLocationAndSize(context, width, height); if (isImport(context)) { return; } // for backward compatibility with older files that included // the label height in the figure height if (width != height) { width = height = Math.min(width, height); } if (context instanceof AddContext) { AddContext addContext = (AddContext) context; addContext.setSize(width, height); } }
@Override public PictogramElement add(IAddContext context) { IPeService peService = Graphiti.getPeService(); IGaService gaService = Graphiti.getGaService(); BaseElement element = (BaseElement) context.getNewObject(); IAddConnectionContext addConContext = (IAddConnectionContext) context; Connection connection = peService.createFreeFormConnection(getDiagram()); Object importProp = context.getProperty(DIImport.IMPORT_PROPERTY); if (importProp != null && (Boolean) importProp) { connection.setStart(addConContext.getSourceAnchor()); connection.setEnd(addConContext.getTargetAnchor()); } else { ContainerShape sourceContainer = (ContainerShape) addConContext.getSourceAnchor().eContainer(); ContainerShape targetContainer = (ContainerShape) addConContext.getTargetAnchor().eContainer(); Tuple<FixPointAnchor, FixPointAnchor> anchors = AnchorUtil.getSourceAndTargetBoundaryAnchors( sourceContainer, targetContainer, connection); connection.setStart(anchors.getFirst()); connection.setEnd(anchors.getSecond()); } if (ModelUtil.hasName(element)) { ConnectionDecorator labelDecorator = Graphiti.getPeService().createConnectionDecorator(connection, true, 0.5, true); Text text = gaService.createText(labelDecorator, ModelUtil.getName(element)); peService.setPropertyValue( labelDecorator, UpdateBaseElementNameFeature.TEXT_ELEMENT, Boolean.toString(true)); text.setStyle(StyleUtil.getStyleForText(getDiagram())); } Polyline connectionLine = gaService.createPolyline(connection); connectionLine.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND)); decorateConnectionLine(connectionLine); createDIEdge(connection, element); createConnectionDecorators(connection); hook(addConContext, connection, element); return connection; }
@Override public PictogramElement createShape( Object businessObject, ContainerShape layoutParent, int width, int height, IAddContext context) { final IPeCreateService peCreateService = Graphiti.getPeCreateService(); final ContainerShape containerShape = peCreateService.createContainerShape(layoutParent, true); final IGaService gaService = Graphiti.getGaService(); Diagram diagram = getFeatureProvider().getDiagramTypeProvider().getDiagram(); final TextAnnotation annotation = (TextAnnotation) businessObject; height = Math.max(50, height); width = Math.max(100, width); final int commentEdge = 20; final Rectangle rect = gaService.createInvisibleRectangle(containerShape); gaService.setLocationAndSize(rect, context.getX(), context.getY(), width, height); final Shape lineShape = peCreateService.createShape(containerShape, false); final Polyline line = gaService.createPolyline( lineShape, new int[] {commentEdge, 0, 0, 0, 0, height, commentEdge, height}); line.setStyle(StyleUtil.getStyleForTask(diagram)); line.setLineWidth(2); gaService.setLocationAndSize(line, 0, 0, commentEdge, height); final Shape textShape = peCreateService.createShape(containerShape, false); String annotationText = BpmnExtensionUtil.getTextAnnotationText(annotation, ActivitiPlugin.getDefault()); final MultiText text = gaService.createDefaultMultiText(diagram, textShape, annotationText); text.setStyle(StyleUtil.getStyleForTask(diagram)); text.setVerticalAlignment(Orientation.ALIGNMENT_TOP); if (OSUtil.getOperatingSystem() == OSEnum.Mac) { text.setFont(gaService.manageFont(diagram, text.getFont().getName(), 11)); } gaService.setLocationAndSize(text, 5, 5, width - 5, height - 5); getFeatureProvider().link(textShape, annotation); peCreateService.createChopboxAnchor(containerShape); return containerShape; }
public boolean canAdd(IAddContext context) { // return true if given business object is an EReference // note, that the context must be an instance of IAddConnectionContext if (context instanceof IAddConnectionContext && context.getNewObject() instanceof EActionLink) { return true; } return false; }
@Override public boolean canAdd(IAddContext context) { // TODO Auto-generated method stub if (context instanceof IAddConnectionContext && context.getNewObject() instanceof AdviceEdge) { return true; } return false; }
@Override public boolean canAdd(IAddContext context) { // check if user wants to add a component service if (context.getNewObject() instanceof SwitchYardBindingType) { ContainerShape targetContainer = context.getTargetContainer(); // check if user wants to add to a component if (getBusinessObjectForPictogramElement(targetContainer) instanceof Service) { return true; } else if (getBusinessObjectForPictogramElement(targetContainer) instanceof Reference) { if (context.getNewObject() instanceof CamelQuartzBindingType) { return false; } return true; } } return false; }
@Override public PictogramElement add(IAddContext context) { ContainerShape targetContainer = context.getTargetContainer(); // nothing really to add - just refresh the object so the decorator // appears getDiagramBehavior().refreshRenderingDecorators(targetContainer); return targetContainer; }
@Override public PictogramElement add(IAddContext context) { final NamespaceDeclaration namespaceDeclaration = (NamespaceDeclaration) context.getNewObject(); final Diagram targetDiagram = (Diagram) context.getTargetContainer(); // CONTAINER SHAPE WITH ROUNDED RECTANGLE IPeCreateService peCreateService = Graphiti.getPeCreateService(); ContainerShape containerShape = peCreateService.createContainerShape(targetDiagram, true); // define a default size for the shape int width = 100; int height = 50; IGaService gaService = Graphiti.getGaService(); RoundedRectangle roundedRectangle; // need to access it later // create and set graphics algorithm roundedRectangle = gaService.createRoundedRectangle(containerShape, 5, 5); roundedRectangle.setForeground(manageColor(IColorConstant.BLACK)); roundedRectangle.setBackground(manageColor(IColorConstant.WHITE)); roundedRectangle.setLineWidth(2); gaService.setLocationAndSize(roundedRectangle, context.getX(), context.getY(), width, height); // create link and wire it link(containerShape, namespaceDeclaration); // create shape for text Shape shape = peCreateService.createShape(containerShape, false); // create and set text graphics algorithm Text text = gaService.createText(shape, namespaceDeclaration.getName()); text.setForeground(manageColor(IColorConstant.BLACK)); text.setHorizontalAlignment(Orientation.ALIGNMENT_CENTER); // vertical alignment has as default value "center" text.setFont(gaService.manageDefaultFont(getDiagram(), false, true)); gaService.setLocationAndSize(text, 0, 0, width, 20); // create link and wire it link(shape, namespaceDeclaration); return containerShape; }
/** {@inheritDoc} */ @Override public PictogramElement add(final IAddContext context) { final Component addedModelElement = (Component) context.getNewObject(); // NEW stuff Object target = getBusinessObjectForPictogramElement(context.getTargetContainer()); final ContainerShape targetContainer = context.getTargetContainer(); final ISprayStyle style = new BcmSpray3DefaultStyle(); final ISprayShape shape = new ComponentShape(getFeatureProvider()); final ContainerShape conShape = shape.getShape(targetContainer, style); final IGaService gaService = Graphiti.getGaService(); gaService.setLocation(conShape.getGraphicsAlgorithm(), context.getX(), context.getY()); link(conShape, addedModelElement); linkShapes(conShape, addedModelElement); setDoneChanges(true); updatePictogramElement(conShape); layout(conShape); return conShape; }
public PictogramElement add(IAddContext context) { Object newObject = context.getNewObject(); Shape shape = Graphiti.getPeCreateService().createShape(context.getTargetContainer(), true); IGaService gaService = Graphiti.getGaService(); Rectangle r = gaService.createRectangle(shape); gaService.setLocationAndSize(r, context.getX(), context.getY(), 400, 100); r.setBackground(gaService.manageColor(getDiagram(), IColorConstant.WHITE)); String text = newObject.getClass().getName() + " - " + newObject.toString(); Text textGa = gaService.createDefaultText(getDiagram(), r, text); gaService.setLocationAndSize(textGa, 0, 0, 400, 100); textGa.setRotation(-1d); // Create an italic font to use it later in the rich tooltip gaService.manageFont( getDiagram(), IGaService.DEFAULT_FONT, IGaService.DEFAULT_FONT_SIZE, true, false); return shape; }
/** {@inheritDoc} */ @Override public boolean canAdd(final IAddContext context) { final EObject newObject = (EObject) context.getNewObject(); if (newObject instanceof Component) { // check if user wants to add to a diagram if (context.getTargetContainer() instanceof Diagram) { return true; } else if (context.getTargetContainer() instanceof ContainerShape) { // OLD STUFF final Object target = getBusinessObjectForPictogramElement(context.getTargetContainer()); // NEW stuff // cls Component refers to this metaClass» if (target instanceof bcm.Component) { if (SprayLayoutService.isCompartment(context.getTargetContainer())) { String id = GraphitiProperties.get(context.getTargetContainer(), TEXT_ID); if ((id != null) && (id.equals("comps"))) { return true; } } } // cls Component refers to this metaClass» if (target instanceof bcm.Component) { if (SprayLayoutService.isCompartment(context.getTargetContainer())) { String id = GraphitiProperties.get(context.getTargetContainer(), TEXT_ID); if ((id != null) && (id.equals("comps"))) { return true; } } } } } return false; }
@Override public PictogramElement add(IAddContext context) { IPeService peService = Graphiti.getPeService(); BaseElement element = (BaseElement) context.getNewObject(); IAddConnectionContext addConContext = (IAddConnectionContext) context; Connection connection = peService.createFreeFormConnection(getDiagram()); Object importProp = context.getProperty(DIImport.IMPORT_PROPERTY); if (importProp != null && (Boolean) importProp) { connection.setStart(addConContext.getSourceAnchor()); connection.setEnd(addConContext.getTargetAnchor()); } else { ContainerShape sourceContainer = (ContainerShape) addConContext.getSourceAnchor().eContainer(); ContainerShape targetContainer = (ContainerShape) addConContext.getTargetAnchor().eContainer(); Tuple<FixPointAnchor, FixPointAnchor> anchors = AnchorUtil.getSourceAndTargetBoundaryAnchors( sourceContainer, targetContainer, connection); connection.setStart(anchors.getFirst()); connection.setEnd(anchors.getSecond()); } IGaService gaService = Graphiti.getGaService(); Polyline connectionLine = gaService.createPolyline(connection); connectionLine.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND)); decorateConnectionLine(connectionLine); createDIEdge(connection, element); createConnectionDecorators(connection); hook(addConContext, connection, element); return connection; }
@Override public PictogramElement add(IAddContext context) { // TODO Auto-generated method stub IAddConnectionContext addConContext = (IAddConnectionContext) context; AdviceEdge edge = (AdviceEdge) context.getNewObject(); IPeCreateService peCreateService = Graphiti.getPeCreateService(); Connection connection = peCreateService.createFreeFormConnection(getDiagram()); connection.setStart(addConContext.getSourceAnchor()); connection.setEnd(addConContext.getTargetAnchor()); IGaService gaService = Graphiti.getGaService(); Polyline polyline = gaService.createPlainPolyline(connection); polyline.setStyle(StyleUtil.getStyleForElement(getDiagram())); polyline.setLineStyle(LineStyle.DOT); link(connection, edge); // add dynamic text decorator for the reference name ConnectionDecorator textDecorator = peCreateService.createConnectionDecorator(connection, true, 0.5, true); Text text = gaService.createPlainText(textDecorator); text.setStyle(StyleUtil.getStyleForTextDecorator((getDiagram()))); gaService.setLocation(text, 10, 0); text.setValue(edge.getAdvicetype().toString()); ConnectionDecorator cd; cd = peCreateService.createConnectionDecorator(connection, false, 1.0, true); int[] xy = {getPointCutR() * 2, 0, 0, -getPointCutR() * 2, 0, 0, 0, getPointCutR() * 2}; Polygon polygon = Graphiti.getGaCreateService().createPolygon(cd, xy); polygon.setStyle(StyleUtil.getStyleForElement(getDiagram())); polygon.setLineStyle(LineStyle.DOT); return connection; }
@Override public boolean canAdd(IAddContext context) { return ObjectDslUtils.isNamespaceDeclaration(context.getNewObject()); }
// Adds a User Application figure to the target object @Override public PictogramElement add(final IAddContext context) { TDeploymentArtifact addedClass = (TDeploymentArtifact) context.getNewObject(); ContainerShape targetDiagram = (ContainerShape) context.getTargetContainer(); Object[] targetDiagrams = targetDiagram.getChildren().toArray(); int ySD = 0; int interdist = 0; for (int i = 0; i < targetDiagrams.length; i++) { Object o = getBusinessObjectForPictogramElement((Shape) targetDiagrams[i]); if (o instanceof UserApplication) interdist = 3; } for (int i = 0; i < targetDiagrams.length; i++) { Object o = getBusinessObjectForPictogramElement((Shape) targetDiagrams[i]); if (((Shape) targetDiagrams[i]).getGraphicsAlgorithm() instanceof Rectangle || (o instanceof SoftwareDependency)) { if (((Shape) targetDiagrams[i]).getGraphicsAlgorithm() instanceof Rectangle) { ySD = ((Shape) targetDiagrams[i]).getGraphicsAlgorithm().getY(); } ((Shape) targetDiagrams[i]) .getGraphicsAlgorithm() .setY(((Shape) targetDiagrams[i]).getGraphicsAlgorithm().getY() + 20 + interdist); } } // CONTAINER SHAPE WITH ROUNDED RECTANGLE IPeCreateService peCreateService = Graphiti.getPeCreateService(); ContainerShape containerShape = peCreateService.createContainerShape(targetDiagram, true); final int width = StyleUtil.SOFT_DEPENDENCY_WIDTH; final int height = 20; IGaService gaService = Graphiti.getGaService(); RoundedRectangle roundedRectangle; { // create and set graphics algorithm int x = (StyleUtil.APP_COMPONENT_WIDTH - width) / 2; roundedRectangle = gaService.createRoundedRectangle(containerShape, 5, 5); roundedRectangle.setForeground(manageColor(E_CLASS_FOREGROUND)); roundedRectangle.setBackground(manageColor(E_CLASS_BACKGROUND)); roundedRectangle.setLineWidth(2); gaService.setLocationAndSize(roundedRectangle, x, ySD - 10 + interdist, width, height); if (addedClass.eResource() == null) { getDiagram().eResource().getContents().add(addedClass); } // create link and wire it link(containerShape, addedClass); } // SHAPE WITH LINE { // create shape for line Shape shape = peCreateService.createShape(containerShape, false); // create and set graphics algorithm Polyline polyline = gaService.createPolyline(shape, new int[] {0, 20, width, 20}); polyline.setForeground(manageColor(E_CLASS_FOREGROUND)); polyline.setLineWidth(2); } // SHAPE WITH TEXT { // create shape for text Shape shape = peCreateService.createShape(containerShape, false); // create and set text graphics algorithm Text text = gaService.createText(shape, addedClass.getName()); text.setForeground(manageColor(E_CLASS_TEXT_FOREGROUND)); text.setHorizontalAlignment(Orientation.ALIGNMENT_CENTER); // vertical alignment has as default value "center" text.setFont(gaService.manageDefaultFont(getDiagram(), false, true)); gaService.setLocationAndSize(text, 0, 0, width, 20); // create link and wire it link(shape, addedClass); } return containerShape; }
@Override public boolean canAdd(IAddContext context) { return context instanceof IAddConnectionContext && getBoClass().isAssignableFrom(context.getNewObject().getClass()); }
@Override public boolean canAdd(IAddContext context) { return context instanceof IAddConnectionContext && context.getNewObject() instanceof AClass; }
@Override public boolean canAdd(IAddContext context) { return super.canAdd(context) || BusinessObjectUtil.containsElementOfType( context.getTargetContainer(), FlowElementsContainer.class); }
public boolean canAdd(IAddContext context) { return context.getTargetContainer() != null; }
@Override public PictogramElement add(IAddContext context) { final Task addedTask = (Task) context.getNewObject(); final ContainerShape parent = context.getTargetContainer(); // CONTAINER SHAPE WITH ROUNDED RECTANGLE final IPeCreateService peCreateService = Graphiti.getPeCreateService(); final ContainerShape containerShape = peCreateService.createContainerShape(parent, true); final IGaService gaService = Graphiti.getGaService(); DiagramBaseShape baseShape = DiagramBaseShape.ACTIVITY; if (ExtensionUtil.isCustomServiceTask(addedTask)) { final ServiceTask serviceTask = (ServiceTask) addedTask; final List<CustomServiceTask> customServiceTasks = ExtensionUtil.getCustomServiceTasks(ActivitiUiUtil.getProjectFromDiagram(getDiagram())); CustomServiceTask targetTask = null; for (final CustomServiceTask customServiceTask : customServiceTasks) { if (customServiceTask.getId().equals(ExtensionUtil.getCustomServiceTaskId(serviceTask))) { targetTask = customServiceTask; break; } } if (!DiagramBaseShape.ACTIVITY.equals(targetTask.getDiagramBaseShape())) { baseShape = targetTask.getDiagramBaseShape(); } } int width = 0; int height = 0; GraphicsAlgorithm algorithm = null; switch (baseShape) { case ACTIVITY: // check whether the context has a size (e.g. from a create feature) // otherwise define a default size for the shape width = context.getWidth() <= 0 ? 105 : context.getWidth(); height = context.getHeight() <= 0 ? 55 : context.getHeight(); RoundedRectangle roundedRectangle; // need to access it later { // create invisible outer rectangle expanded by // the width needed for the anchor final Rectangle invisibleRectangle = gaService.createInvisibleRectangle(containerShape); gaService.setLocationAndSize( invisibleRectangle, context.getX(), context.getY(), width, height); // create and set visible rectangle inside invisible rectangle roundedRectangle = gaService.createRoundedRectangle(invisibleRectangle, 20, 20); algorithm = roundedRectangle; roundedRectangle.setParentGraphicsAlgorithm(invisibleRectangle); roundedRectangle.setStyle(StyleUtil.getStyleForTask(getDiagram())); gaService.setLocationAndSize(roundedRectangle, 0, 0, width, height); // create link and wire it link(containerShape, addedTask); } break; case GATEWAY: // check whether the context has a size (e.g. from a create feature) // otherwise define a default size for the shape width = context.getWidth() <= 0 ? 60 : context.getWidth(); height = context.getHeight() <= 0 ? 60 : context.getHeight(); Polygon polygon; { int xy[] = new int[] {0, 30, 30, 0, 60, 30, 30, 60, 0, 30}; final Polygon invisiblePolygon = gaService.createPolygon(containerShape, xy); invisiblePolygon.setFilled(false); invisiblePolygon.setLineVisible(false); gaService.setLocationAndSize( invisiblePolygon, context.getX(), context.getY(), width, height); // create and set visible circle inside invisible circle polygon = gaService.createPolygon(invisiblePolygon, xy); algorithm = polygon; polygon.setParentGraphicsAlgorithm(invisiblePolygon); polygon.setStyle(StyleUtil.getStyleForTask(getDiagram())); gaService.setLocationAndSize(polygon, 0, 0, width, height); // create link and wire it link(containerShape, addedTask); } break; case EVENT: // check whether the context has a size (e.g. from a create feature) // otherwise define a default size for the shape width = context.getWidth() <= 0 ? 55 : context.getWidth(); height = context.getHeight() <= 0 ? 55 : context.getHeight(); Ellipse circle; { final Ellipse invisibleCircle = gaService.createEllipse(containerShape); invisibleCircle.setFilled(false); invisibleCircle.setLineVisible(false); gaService.setLocationAndSize( invisibleCircle, context.getX(), context.getY(), width, height); // create and set visible circle inside invisible circle circle = gaService.createEllipse(invisibleCircle); circle.setParentGraphicsAlgorithm(invisibleCircle); circle.setStyle(StyleUtil.getStyleForTask(getDiagram())); gaService.setLocationAndSize(circle, 0, 0, width, height); // create link and wire it link(containerShape, addedTask); } break; } // SHAPE WITH TEXT { // create shape for text final Shape shape = peCreateService.createShape(containerShape, false); // create and set text graphics algorithm final MultiText text = gaService.createDefaultMultiText(getDiagram(), shape, addedTask.getName()); text.setStyle(StyleUtil.getStyleForTask(getDiagram())); text.setHorizontalAlignment(Orientation.ALIGNMENT_CENTER); text.setVerticalAlignment(Orientation.ALIGNMENT_CENTER); if (OSUtil.getOperatingSystem() == OSEnum.Mac) { text.setFont(gaService.manageFont(getDiagram(), text.getFont().getName(), 11)); } switch (baseShape) { case ACTIVITY: gaService.setLocationAndSize(text, 0, 20, width, height - 25); break; case GATEWAY: gaService.setLocationAndSize(text, 0, height + 5, width, 40); break; case EVENT: gaService.setLocationAndSize(text, 0, height + 5, width, 40); break; } // create link and wire it link(shape, addedTask); // provide information to support direct-editing directly // after object creation (must be activated additionally) final IDirectEditingInfo directEditingInfo = getFeatureProvider().getDirectEditingInfo(); // set container shape for direct editing after object creation directEditingInfo.setMainPictogramElement(containerShape); // set shape and graphics algorithm where the editor for // direct editing shall be opened after object creation directEditingInfo.setPictogramElement(shape); directEditingInfo.setGraphicsAlgorithm(text); } { final Shape shape = peCreateService.createShape(containerShape, false); final Image image = gaService.createImage(shape, getIcon(addedTask)); switch (baseShape) { case ACTIVITY: gaService.setLocationAndSize(image, 5, 5, IMAGE_SIZE, IMAGE_SIZE); break; case GATEWAY: gaService.setLocationAndSize( image, (width - IMAGE_SIZE) / 2, (height - IMAGE_SIZE) / 2, IMAGE_SIZE, IMAGE_SIZE); break; case EVENT: gaService.setLocationAndSize( image, (width - IMAGE_SIZE) / 2, (height - IMAGE_SIZE) / 2, IMAGE_SIZE, IMAGE_SIZE); break; } } // add a chopbox anchor to the shape peCreateService.createChopboxAnchor(containerShape); // create an additional box relative anchor at middle-right final BoxRelativeAnchor boxAnchor = peCreateService.createBoxRelativeAnchor(containerShape); boxAnchor.setRelativeWidth(1.0); boxAnchor.setRelativeHeight(0.51); boxAnchor.setReferencedGraphicsAlgorithm(algorithm); final Ellipse ellipse = ActivitiUiUtil.createInvisibleEllipse(boxAnchor, gaService); gaService.setLocationAndSize(ellipse, 0, 0, 0, 0); layoutPictogramElement(containerShape); return containerShape; }