package net.certware.sacm.graphiti.feature; import net.certware.sacm.SACM.Evidence.EvidenceContainer; import net.certware.sacm.SACM.Evidence.Object; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.context.IAddContext; import org.eclipse.graphiti.features.impl.AbstractAddShapeFeature; import org.eclipse.graphiti.mm.algorithms.Ellipse; import org.eclipse.graphiti.mm.algorithms.styles.LineStyle; import org.eclipse.graphiti.mm.pictograms.ContainerShape; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.services.IGaService; import org.eclipse.graphiti.services.IPeCreateService; import org.eclipse.graphiti.util.IColorConstant; public class ObjectAddFeature extends AbstractAddShapeFeature { public ObjectAddFeature(IFeatureProvider fp) { super(fp); } public boolean canAdd(IAddContext context) { if ( context.getNewObject() instanceof Object ) { java.lang.Object parentObject = getBusinessObjectForPictogramElement(context.getTargetContainer()); if ( parentObject instanceof EvidenceContainer ) { return true; } } return false; } public PictogramElement add(IAddContext context) { final net.certware.sacm.SACM.Evidence.Object addedObject = (Object)context.getNewObject(); final ContainerShape parent = context.getTargetContainer(); // container shape with circle final IPeCreateService peCreateService = Graphiti.getPeCreateService(); final ContainerShape containerShape = peCreateService.createContainerShape(parent,true); // use existing size or default final int width = context.getWidth() <= 35 ? 35 : context.getWidth(); final int height = context.getHeight() <= 50 ? 50 : context.getHeight(); final IGaService gaService = Graphiti.getGaService(); @SuppressWarnings("unused") Ellipse circle; { final Ellipse objectCircle = gaService.createEllipse(containerShape); //invisibleCircle.setFilled(false); //invisibleCircle.setLineVisible(false); gaService.setLocationAndSize(objectCircle, context.getX(), context.getY(), width, height); objectCircle.setLineWidth(2); objectCircle.setLineVisible(true); objectCircle.setFilled(true); objectCircle.setLineStyle(LineStyle.DASHDOT); objectCircle.setForeground(manageColor(IColorConstant.BLACK)); objectCircle.setBackground(manageColor(IColorConstant.DARK_ORANGE)); // create and set visible circle inside invisible circle //circle = gaService.createEllipse(objectCircle); //circle.setParentGraphicsAlgorithm(objectCircle); // TODO circle.setStyle(StyleUtil.getStyleForEvent(getDiagram())); //if (addedArgumentation instanceof EndEvent == true) { // circle.setLineWidth(3); //} //gaService.setLocationAndSize(circle, 0, 0, width, height); //gaService.setLocationAndSize(circle, 0, 0, width, height); link(containerShape, addedObject); } peCreateService.createChopboxAnchor(containerShape); /* if ( !(addedArgumentation 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); } */ /* if (addedEvent instanceof StartEvent && ((StartEvent) addedEvent).getEventDefinitions().size() > 0) { StartEvent startEvent = (StartEvent) addedEvent; final Shape shape = peCreateService.createShape(containerShape, false); Image image = null; if (startEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { image = gaService.createImage(shape, PluginImage.IMG_BOUNDARY_TIMER.getImageKey()); } else if (startEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition){ image = gaService.createImage(shape, PluginImage.IMG_STARTEVENT_MESSAGE.getImageKey()); } else image = gaService.createImage(shape, PluginImage.IMG_BOUNDARY_ERROR.getImageKey()); image.setWidth(IMAGE_SIZE); image.setHeight(IMAGE_SIZE); gaService.setLocationAndSize(image, (width - IMAGE_SIZE) / 2, (height - IMAGE_SIZE) / 2, IMAGE_SIZE, IMAGE_SIZE); } */ layoutPictogramElement(containerShape); return containerShape; } }