package com.alfresco.designer.gui.features; import java.util.List; import org.activiti.bpmn.model.Lane; import org.activiti.bpmn.model.SubProcess; import org.activiti.bpmn.model.alfresco.AlfrescoUserTask; import org.activiti.designer.PluginImage; import org.activiti.designer.eclipse.preferences.PreferencesUtil; import org.activiti.designer.features.AbstractCreateFastBPMNFeature; import org.activiti.designer.util.editor.Bpmn2MemoryModel; import org.activiti.designer.util.editor.ModelHandler; import org.activiti.designer.util.preferences.Preferences; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.context.ICreateContext; import org.eclipse.graphiti.mm.pictograms.Diagram; public class CreateAlfrescoUserTaskFeature extends AbstractCreateFastBPMNFeature { public static final String FEATURE_ID_KEY = "alfrescoUsertask"; public CreateAlfrescoUserTaskFeature(IFeatureProvider fp) { super(fp, "AlfrescoUserTask", "Add Alfresco user task"); } @Override public boolean canCreate(ICreateContext context) { Object parentObject = getBusinessObjectForPictogramElement(context.getTargetContainer()); return (context.getTargetContainer() instanceof Diagram || parentObject instanceof SubProcess || parentObject instanceof Lane); } @Override public Object[] create(ICreateContext context) { AlfrescoUserTask newUserTask = new AlfrescoUserTask(); newUserTask.setId(getNextId(newUserTask)); newUserTask.setName("Alfresco User Task"); List<String> formTypes = PreferencesUtil.getStringArray(Preferences.ALFRESCO_FORMTYPES_USERTASK); if (formTypes.size() > 0) { newUserTask.setFormKey(formTypes.get(0)); } Object parentObject = getBusinessObjectForPictogramElement(context.getTargetContainer()); if (parentObject instanceof SubProcess) { ((SubProcess) parentObject).addFlowElement(newUserTask); } else if (parentObject instanceof Lane) { final Lane lane = (Lane) parentObject; lane.getFlowReferences().add(newUserTask.getId()); lane.getParentProcess().addFlowElement(newUserTask); } else { Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(getDiagram())); if (model.getBpmnModel().getMainProcess() == null) { model.addMainProcess(); } model.getBpmnModel().getMainProcess().addFlowElement(newUserTask); } addGraphicalContent(context, newUserTask); // activate direct editing after object creation getFeatureProvider().getDirectEditingInfo().setActive(true); return new Object[] { newUserTask }; } @Override public String getCreateImageId() { return PluginImage.IMG_USERTASK.getImageKey(); } @Override protected String getFeatureIdKey() { return FEATURE_ID_KEY; } }