package org.activiti.designer.features; import org.activiti.designer.ActivitiImageProvider; import org.activiti.designer.util.features.AbstractCreateBPMNFeature; import org.eclipse.bpmn2.Activity; import org.eclipse.bpmn2.BoundaryEvent; import org.eclipse.bpmn2.Bpmn2Factory; import org.eclipse.bpmn2.SubProcess; import org.eclipse.bpmn2.Task; import org.eclipse.bpmn2.TimerEventDefinition; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.context.ICreateContext; import org.eclipse.graphiti.mm.pictograms.Diagram; public class CreateBoundaryTimerFeature extends AbstractCreateBPMNFeature { public static final String FEATURE_ID_KEY = "boundarytimer"; public CreateBoundaryTimerFeature(IFeatureProvider fp) { // set name and description of the creation feature super(fp, "TimerBoundaryEvent", "Add timer boundary event"); } public boolean canCreate(ICreateContext context) { Object parentObject = getBusinessObjectForPictogramElement(context.getTargetContainer()); if (parentObject instanceof SubProcess == true || parentObject instanceof Task == true) { return true; } return false; } public Object[] create(ICreateContext context) { BoundaryEvent boundaryEvent = Bpmn2Factory.eINSTANCE.createBoundaryEvent(); TimerEventDefinition timerEvent = Bpmn2Factory.eINSTANCE.createTimerEventDefinition(); boundaryEvent.getEventDefinitions().add(timerEvent); boundaryEvent.setId(getNextId()); Object parentObject = getBusinessObjectForPictogramElement(context.getTargetContainer()); if (parentObject instanceof SubProcess) { getDiagram().eResource().getContents().add(boundaryEvent); } else if(context.getTargetContainer().getContainer() != null && context.getTargetContainer().getContainer() instanceof Diagram == false) { Object containerObject = getBusinessObjectForPictogramElement(context.getTargetContainer().getContainer()); if (containerObject instanceof SubProcess) { ((SubProcess) containerObject).getFlowElements().add(boundaryEvent); } } else { getDiagram().eResource().getContents().add(boundaryEvent); } ((Activity) parentObject).getBoundaryEventRefs().add(boundaryEvent); boundaryEvent.setAttachedToRef((Activity) parentObject); // do the add addGraphicalRepresentation(context, boundaryEvent); // return newly created business object(s) return new Object[] { boundaryEvent }; } @Override public String getCreateImageId() { return ActivitiImageProvider.IMG_BOUNDARY_TIMER; } @Override protected String getFeatureIdKey() { return FEATURE_ID_KEY; } @SuppressWarnings("rawtypes") @Override protected Class getFeatureClass() { return Bpmn2Factory.eINSTANCE.createTimerEventDefinition().getClass(); } }