package org.obeonetwork.bpmn2.design; import org.eclipse.emf.ecore.EObject; import org.eclipse.sirius.diagram.DNodeContainer; import org.obeonetwork.dsl.bpmn2.Bpmn2Factory; import org.obeonetwork.dsl.bpmn2.BusinessRuleTask; import org.obeonetwork.dsl.bpmn2.CallActivity; import org.obeonetwork.dsl.bpmn2.ChoreographyTask; import org.obeonetwork.dsl.bpmn2.FlowElementsContainer; import org.obeonetwork.dsl.bpmn2.GlobalBusinessRuleTask; import org.obeonetwork.dsl.bpmn2.GlobalManualTask; import org.obeonetwork.dsl.bpmn2.GlobalScriptTask; import org.obeonetwork.dsl.bpmn2.GlobalUserTask; import org.obeonetwork.dsl.bpmn2.ManualTask; import org.obeonetwork.dsl.bpmn2.ReceiveTask; import org.obeonetwork.dsl.bpmn2.ScriptTask; import org.obeonetwork.dsl.bpmn2.SendTask; import org.obeonetwork.dsl.bpmn2.ServiceTask; import org.obeonetwork.dsl.bpmn2.Task; import org.obeonetwork.dsl.bpmn2.UserTask; import org.obeonetwork.dsl.bpmn2.impl.TaskImpl; /** * Test and conversion services to operate on Task objects. * * @author vrichard * */ public class TaskService { public boolean isLikeScriptTask(final EObject eObject) { boolean isLikeScriptTask = eObject instanceof ScriptTask; if (!isLikeScriptTask && eObject instanceof CallActivity) { CallActivity callActivity = (CallActivity) eObject; isLikeScriptTask = callActivity.getCalledElementRef() instanceof GlobalScriptTask; } return isLikeScriptTask; } public boolean isLikeBusinessRuleTask(final EObject eObject) { boolean isLikeBusinessRuleTask = eObject instanceof BusinessRuleTask; if (!isLikeBusinessRuleTask && eObject instanceof CallActivity) { CallActivity callActivity = (CallActivity) eObject; isLikeBusinessRuleTask = callActivity.getCalledElementRef() instanceof GlobalBusinessRuleTask; } return isLikeBusinessRuleTask; } public boolean isLikeUserTask(final EObject eObject) { boolean isLikeUserTask = eObject instanceof UserTask; if (!isLikeUserTask && eObject instanceof CallActivity) { CallActivity callActivity = (CallActivity) eObject; isLikeUserTask = callActivity.getCalledElementRef() instanceof GlobalUserTask; } return isLikeUserTask; } public boolean isLikeManualTask(final EObject eObject) { boolean isLikeManualTask = eObject instanceof ManualTask; if (!isLikeManualTask && eObject instanceof CallActivity) { CallActivity callActivity = (CallActivity) eObject; isLikeManualTask = callActivity.getCalledElementRef() instanceof GlobalManualTask; } return isLikeManualTask; } // <%self.filter("Task")!=null && self.filter("UserTask")==null && // self.filter("ServiceTask")==null && self.filter("SendTask")==null && // self.filter("ScriptTask")==null && self.filter("ReceiveTask")==null && // self.filter("ManualTask")==null && self.filter("BusinessRuleTask")==null // && self.filter("CallActivity")==null%> public boolean isLikeTask(final EObject eObject) { return eObject instanceof Task && eObject.getClass().isAssignableFrom(TaskImpl.class); } public boolean isLikeReceiveTask(final EObject eObject) { return eObject instanceof ReceiveTask; } public boolean isLikeSendTask(final EObject eObject) { return eObject instanceof SendTask; } public boolean isLikeServiceTask(final EObject eObject) { return eObject instanceof ServiceTask; } public boolean isLikeChoreographyTask(final EObject eObject) { return eObject instanceof ChoreographyTask; } private Task clone(Task task, Task cloneTask) { cloneTask.getBoundaryEventRefs().addAll(task.getBoundaryEventRefs()); cloneTask.getCategoryValueRef().addAll(task.getCategoryValueRef()); cloneTask.getDataInputAssociations().addAll(task.getDataInputAssociations()); cloneTask.getDataOutputAssociations().addAll(task.getDataOutputAssociations()); cloneTask.getDocumentation().addAll(task.getDocumentation()); cloneTask.getExtensionDefinitions().addAll(task.getExtensionDefinitions()); cloneTask.getExtensionValues().addAll(task.getExtensionValues()); cloneTask.getIncoming().addAll(task.getIncoming()); cloneTask.getIncomingConversationLinks().addAll(task.getIncomingConversationLinks()); cloneTask.getLanes().addAll(task.getLanes()); cloneTask.getOutgoing().addAll(task.getOutgoing()); cloneTask.getOutgoingConversationLinks().addAll(task.getOutgoingConversationLinks()); cloneTask.getProperties().addAll(task.getProperties()); cloneTask.getResources().addAll(task.getResources()); cloneTask.setAuditing(task.getAuditing()); cloneTask.setCompletionQuantity(task.getCompletionQuantity()); cloneTask.setDefault(task.getDefault()); cloneTask.setId(task.getId()); cloneTask.setIoSpecification(task.getIoSpecification()); cloneTask.setIsForCompensation(task.isIsForCompensation()); cloneTask.setLoopCharacteristics(task.getLoopCharacteristics()); cloneTask.setMonitoring(task.getMonitoring()); cloneTask.setName(task.getName()); cloneTask.setStartQuantity(task.getStartQuantity()); FlowElementsContainer container = (FlowElementsContainer) task.eContainer(); container.getFlowElements().remove(task); container.getFlowElements().add(cloneTask); return cloneTask; } public Task convertToTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (!eObject.getClass().isAssignableFrom(TaskImpl.class)) { view.setTarget(clone(eObject, Bpmn2Factory.eINSTANCE.createTask())); } return eObject; } public BusinessRuleTask convertToBusinessRuleTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof BusinessRuleTask) { return (BusinessRuleTask) eObject; } else { BusinessRuleTask cloneTask = (BusinessRuleTask) clone(eObject, Bpmn2Factory.eINSTANCE.createBusinessRuleTask()); view.setTarget(cloneTask); return cloneTask; } } public ManualTask convertToManualTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof ManualTask) { return (ManualTask) eObject; } else { ManualTask cloneTask = (ManualTask) clone(eObject, Bpmn2Factory.eINSTANCE.createManualTask()); view.setTarget(cloneTask); return cloneTask; } } public ReceiveTask convertToReceiveTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof ReceiveTask) { return (ReceiveTask) eObject; } else { ReceiveTask cloneTask = (ReceiveTask) clone(eObject, Bpmn2Factory.eINSTANCE.createReceiveTask()); view.setTarget(cloneTask); return cloneTask; } } public ScriptTask convertToScriptTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof ScriptTask) { return (ScriptTask) eObject; } else { ScriptTask cloneTask = (ScriptTask) clone(eObject, Bpmn2Factory.eINSTANCE.createScriptTask()); view.setTarget(cloneTask); return cloneTask; } } public SendTask convertToSendTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof SendTask) { return (SendTask) eObject; } else { SendTask cloneTask = (SendTask) clone(eObject, Bpmn2Factory.eINSTANCE.createSendTask()); view.setTarget(cloneTask); return cloneTask; } } public ServiceTask convertToServiceTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof ServiceTask) { return (ServiceTask) eObject; } else { ServiceTask cloneTask = (ServiceTask) clone(eObject, Bpmn2Factory.eINSTANCE.createServiceTask()); view.setTarget(cloneTask); return cloneTask; } } public UserTask convertToUserTask(final DNodeContainer view) { Task eObject = (Task) view.getTarget(); if (eObject instanceof UserTask) { return (UserTask) eObject; } else { UserTask cloneTask = (UserTask) clone(eObject, Bpmn2Factory.eINSTANCE.createUserTask()); view.setTarget(cloneTask); return cloneTask; } } }