/* * Copyright (C) 2009 BonitaSoft S.A. * BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2.0 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.studio.model.process.diagram.edit.policies; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.bonitasoft.studio.model.process.ProcessPackage; import org.bonitasoft.studio.model.process.diagram.edit.parts.ANDGateway2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ANDGatewayEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.Activity2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ActivityEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.BoundaryMessageEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.BoundaryMessageEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.BoundarySignalEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.BoundarySignalEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.BoundaryTimerEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.BoundaryTimerEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.CallActivity2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.CallActivityEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.CatchLinkEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.CatchLinkEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndErrorEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndErrorEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndMessageEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndMessageEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndSignalEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndSignalEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndTerminatedEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EndTerminatedEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.Event2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.EventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.InclusiveGateway2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.InclusiveGatewayEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateCatchMessageEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateCatchMessageEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateCatchSignalEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateCatchSignalEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateCatchTimerEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateCatchTimerEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateErrorCatchEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateErrorCatchEvent3EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateErrorCatchEvent4EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateErrorCatchEvent5EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateErrorCatchEvent6EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateErrorCatchEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateThrowMessageEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateThrowMessageEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateThrowSignalEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.IntermediateThrowSignalEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.LaneEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.MainProcessEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.MessageFlowEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.NonInterruptingBoundaryTimerEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.NonInterruptingBoundaryTimerEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.PoolEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ReceiveTask2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ReceiveTaskEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ScriptTask2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ScriptTaskEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.SendTask2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.SendTaskEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.SequenceFlowEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ServiceTask2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ServiceTaskEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartErrorEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartErrorEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartMessageEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartMessageEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartSignalEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartSignalEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartTimerEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.StartTimerEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.SubProcessEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.SubProcessEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.Task2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.TaskEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.TextAnnotation2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.TextAnnotationAttachmentEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.TextAnnotationEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ThrowLinkEvent2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.ThrowLinkEventEditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.XORGateway2EditPart; import org.bonitasoft.studio.model.process.diagram.edit.parts.XORGatewayEditPart; import org.bonitasoft.studio.model.process.diagram.part.ProcessDiagramUpdater; import org.bonitasoft.studio.model.process.diagram.part.ProcessLinkDescriptor; import org.bonitasoft.studio.model.process.diagram.part.ProcessNodeDescriptor; import org.bonitasoft.studio.model.process.diagram.part.ProcessVisualIDRegistry; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.gef.EditPart; import org.eclipse.gef.commands.Command; import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil; import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand; import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.diagram.ui.commands.SetViewMutabilityCommand; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest; import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest; import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.Edge; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.gmf.tooling.runtime.update.UpdaterLinkDescriptor; /** * @generated */ public class MainProcessCanonicalEditPolicy extends CanonicalEditPolicy { /** * @generated */ protected void refreshOnActivate() { // Need to activate editpart children before invoking the canonical refresh for EditParts to add event listeners List<?> c = getHost().getChildren(); for (int i = 0; i < c.size(); i++) { ((EditPart) c.get(i)).activate(); } super.refreshOnActivate(); } /** * @generated */ protected EStructuralFeature getFeatureToSynchronize() { return ProcessPackage.eINSTANCE.getContainer_Elements(); } /** * @generated */ @SuppressWarnings("rawtypes") protected List getSemanticChildrenList() { View viewObject = (View) getHost().getModel(); LinkedList<EObject> result = new LinkedList<EObject>(); List<ProcessNodeDescriptor> childDescriptors = ProcessDiagramUpdater .getMainProcess_1000SemanticChildren(viewObject); for (ProcessNodeDescriptor d : childDescriptors) { result.add(d.getModelElement()); } return result; } /** * @generated */ protected boolean isOrphaned(Collection<EObject> semanticChildren, final View view) { return isMyDiagramElement(view) && !semanticChildren.contains(view.getElement()); } /** * @generated */ private boolean isMyDiagramElement(View view) { int visualID = ProcessVisualIDRegistry.getVisualID(view); switch (visualID) { case ANDGatewayEditPart.VISUAL_ID: case StartEventEditPart.VISUAL_ID: case EndEventEditPart.VISUAL_ID: case TaskEditPart.VISUAL_ID: case CallActivityEditPart.VISUAL_ID: case SubProcessEventEditPart.VISUAL_ID: case ReceiveTaskEditPart.VISUAL_ID: case SendTaskEditPart.VISUAL_ID: case ServiceTaskEditPart.VISUAL_ID: case ScriptTaskEditPart.VISUAL_ID: case XORGatewayEditPart.VISUAL_ID: case InclusiveGatewayEditPart.VISUAL_ID: case ActivityEditPart.VISUAL_ID: case PoolEditPart.VISUAL_ID: case StartMessageEventEditPart.VISUAL_ID: case EndMessageEventEditPart.VISUAL_ID: case IntermediateCatchMessageEventEditPart.VISUAL_ID: case IntermediateThrowMessageEventEditPart.VISUAL_ID: case TextAnnotationEditPart.VISUAL_ID: case IntermediateCatchTimerEventEditPart.VISUAL_ID: case StartTimerEventEditPart.VISUAL_ID: case CatchLinkEventEditPart.VISUAL_ID: case ThrowLinkEventEditPart.VISUAL_ID: case IntermediateThrowSignalEventEditPart.VISUAL_ID: case IntermediateCatchSignalEventEditPart.VISUAL_ID: case StartSignalEventEditPart.VISUAL_ID: case EndSignalEventEditPart.VISUAL_ID: case EventEditPart.VISUAL_ID: case EndErrorEventEditPart.VISUAL_ID: case StartErrorEventEditPart.VISUAL_ID: case EndTerminatedEventEditPart.VISUAL_ID: return true; } return false; } /** * @generated */ protected void refreshSemantic() { if (resolveSemanticElement() == null) { return; } LinkedList<IAdaptable> createdViews = new LinkedList<IAdaptable>(); List<ProcessNodeDescriptor> childDescriptors = ProcessDiagramUpdater .getMainProcess_1000SemanticChildren((View) getHost().getModel()); LinkedList<View> orphaned = new LinkedList<View>(); // we care to check only views we recognize as ours LinkedList<View> knownViewChildren = new LinkedList<View>(); for (View v : getViewChildren()) { if (isMyDiagramElement(v)) { knownViewChildren.add(v); } } // alternative to #cleanCanonicalSemanticChildren(getViewChildren(), semanticChildren) // // iteration happens over list of desired semantic elements, trying to find best matching View, while original CEP // iterates views, potentially losing view (size/bounds) information - i.e. if there are few views to reference same EObject, only last one // to answer isOrphaned == true will be used for the domain element representation, see #cleanCanonicalSemanticChildren() for (Iterator<ProcessNodeDescriptor> descriptorsIterator = childDescriptors.iterator(); descriptorsIterator .hasNext();) { ProcessNodeDescriptor next = descriptorsIterator.next(); String hint = ProcessVisualIDRegistry.getType(next.getVisualID()); LinkedList<View> perfectMatch = new LinkedList<View>(); // both semanticElement and hint match that of NodeDescriptor for (View childView : getViewChildren()) { EObject semanticElement = childView.getElement(); if (next.getModelElement().equals(semanticElement)) { if (hint.equals(childView.getType())) { perfectMatch.add(childView); // actually, can stop iteration over view children here, but // may want to use not the first view but last one as a 'real' match (the way original CEP does // with its trick with viewToSemanticMap inside #cleanCanonicalSemanticChildren } } } if (perfectMatch.size() > 0) { descriptorsIterator.remove(); // precise match found no need to create anything for the NodeDescriptor // use only one view (first or last?), keep rest as orphaned for further consideration knownViewChildren.remove(perfectMatch.getFirst()); } } // those left in knownViewChildren are subject to removal - they are our diagram elements we didn't find match to, // or those we have potential matches to, and thus need to be recreated, preserving size/location information. orphaned.addAll(knownViewChildren); // ArrayList<CreateViewRequest.ViewDescriptor> viewDescriptors = new ArrayList<CreateViewRequest.ViewDescriptor>( childDescriptors.size()); for (ProcessNodeDescriptor next : childDescriptors) { String hint = ProcessVisualIDRegistry.getType(next.getVisualID()); IAdaptable elementAdapter = new CanonicalElementAdapter(next.getModelElement(), hint); CreateViewRequest.ViewDescriptor descriptor = new CreateViewRequest.ViewDescriptor(elementAdapter, Node.class, hint, ViewUtil.APPEND, false, host().getDiagramPreferencesHint()); viewDescriptors.add(descriptor); } boolean changed = deleteViews(orphaned.iterator()); // CreateViewRequest request = getCreateViewRequest(viewDescriptors); Command cmd = getCreateViewCommand(request); if (cmd != null && cmd.canExecute()) { SetViewMutabilityCommand.makeMutable(new EObjectAdapter(host().getNotationView())).execute(); executeCommand(cmd); @SuppressWarnings("unchecked") List<IAdaptable> nl = (List<IAdaptable>) request.getNewObject(); createdViews.addAll(nl); } if (changed || createdViews.size() > 0) { postProcessRefreshSemantic(createdViews); } Collection<IAdaptable> createdConnectionViews = refreshConnections(); if (createdViews.size() > 1) { // perform a layout of the container DeferredLayoutCommand layoutCmd = new DeferredLayoutCommand(host().getEditingDomain(), createdViews, host()); executeCommand(new ICommandProxy(layoutCmd)); } createdViews.addAll(createdConnectionViews); makeViewsImmutable(createdViews); } /** * @generated */ private Collection<IAdaptable> refreshConnections() { Domain2Notation domain2NotationMap = new Domain2Notation(); Collection<ProcessLinkDescriptor> linkDescriptors = collectAllLinks(getDiagram(), domain2NotationMap); Collection existingLinks = new LinkedList(getDiagram().getEdges()); for (Iterator linksIterator = existingLinks.iterator(); linksIterator.hasNext();) { Edge nextDiagramLink = (Edge) linksIterator.next(); int diagramLinkVisualID = ProcessVisualIDRegistry.getVisualID(nextDiagramLink); if (diagramLinkVisualID == -1) { if (nextDiagramLink.getSource() != null && nextDiagramLink.getTarget() != null) { linksIterator.remove(); } continue; } EObject diagramLinkObject = nextDiagramLink.getElement(); EObject diagramLinkSrc = nextDiagramLink.getSource().getElement(); EObject diagramLinkDst = nextDiagramLink.getTarget().getElement(); for (Iterator<ProcessLinkDescriptor> linkDescriptorsIterator = linkDescriptors .iterator(); linkDescriptorsIterator.hasNext();) { ProcessLinkDescriptor nextLinkDescriptor = linkDescriptorsIterator.next(); if (diagramLinkObject == nextLinkDescriptor.getModelElement() && diagramLinkSrc == nextLinkDescriptor.getSource() && diagramLinkDst == nextLinkDescriptor.getDestination() && diagramLinkVisualID == nextLinkDescriptor.getVisualID()) { linksIterator.remove(); linkDescriptorsIterator.remove(); break; } } } deleteViews(existingLinks.iterator()); return createConnections(linkDescriptors, domain2NotationMap); } /** * @generated */ private Collection<ProcessLinkDescriptor> collectAllLinks(View view, Domain2Notation domain2NotationMap) { if (!MainProcessEditPart.MODEL_ID.equals(ProcessVisualIDRegistry.getModelID(view))) { return Collections.emptyList(); } LinkedList<ProcessLinkDescriptor> result = new LinkedList<ProcessLinkDescriptor>(); switch (ProcessVisualIDRegistry.getVisualID(view)) { case MainProcessEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getMainProcess_1000ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ANDGatewayEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getANDGateway_2009ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartEvent_2002ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndEvent_2003ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case TaskEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getTask_2004ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case CallActivityEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getCallActivity_2036ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case SubProcessEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getSubProcessEvent_2031ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ReceiveTaskEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getReceiveTask_2025ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case SendTaskEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getSendTask_2026ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ServiceTaskEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getServiceTask_2027ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ScriptTaskEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getScriptTask_2028ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case XORGatewayEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getXORGateway_2008ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case InclusiveGatewayEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getInclusiveGateway_2030ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ActivityEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getActivity_2006ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case PoolEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getPool_2007ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartMessageEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartMessageEvent_2010ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndMessageEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndMessageEvent_2011ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateCatchMessageEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateCatchMessageEvent_2013ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateThrowMessageEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateThrowMessageEvent_2014ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case TextAnnotationEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getTextAnnotation_2015ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateCatchTimerEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateCatchTimerEvent_2017ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartTimerEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartTimerEvent_2016ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case CatchLinkEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getCatchLinkEvent_2018ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ThrowLinkEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getThrowLinkEvent_2019ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateThrowSignalEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateThrowSignalEvent_2020ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateCatchSignalEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateCatchSignalEvent_2021ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartSignalEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartSignalEvent_2022ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndSignalEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndSignalEvent_2023ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEvent_2024ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndErrorEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndErrorEvent_2029ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartErrorEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartErrorEvent_2033ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndTerminatedEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndTerminatedEvent_2035ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateErrorCatchEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateErrorCatchEvent_3029ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case BoundaryMessageEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getBoundaryMessageEvent_3035ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case NonInterruptingBoundaryTimerEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getNonInterruptingBoundaryTimerEvent_3064ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case BoundaryTimerEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getBoundaryTimerEvent_3043ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case BoundarySignalEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getBoundarySignalEvent_3052ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateErrorCatchEventEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateErrorCatchEvent_3030ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case BoundaryMessageEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getBoundaryMessageEvent_3036ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case NonInterruptingBoundaryTimerEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getNonInterruptingBoundaryTimerEvent_3065ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case BoundaryTimerEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getBoundaryTimerEvent_3044ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case BoundarySignalEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getBoundarySignalEvent_3053ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ANDGateway2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getANDGateway_3009ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndEvent_3003ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case CallActivity2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getCallActivity_3063ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case Task2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getTask_3005ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ReceiveTask2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getReceiveTask_3026ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateErrorCatchEvent3EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateErrorCatchEvent_3031ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case SendTask2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getSendTask_3025ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ServiceTask2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getServiceTask_3027ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateErrorCatchEvent4EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateErrorCatchEvent_3032ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ScriptTask2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getScriptTask_3028ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateErrorCatchEvent5EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateErrorCatchEvent_3033ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case XORGateway2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getXORGateway_3008ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case Activity2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getActivity_3006ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateErrorCatchEvent6EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateErrorCatchEvent_3034ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateCatchMessageEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateCatchMessageEvent_3013ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartMessageEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartMessageEvent_3012ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndMessageEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndMessageEvent_3011ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateThrowMessageEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateThrowMessageEvent_3014ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case TextAnnotation2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getTextAnnotation_3015ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartTimerEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartTimerEvent_3016ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateCatchTimerEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateCatchTimerEvent_3017ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartSignalEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartSignalEvent_3023ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateThrowSignalEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateThrowSignalEvent_3022ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case IntermediateCatchSignalEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getIntermediateCatchSignalEvent_3021ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndSignalEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndSignalEvent_3020ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndErrorEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndErrorEvent_3050ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case EndTerminatedEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEndTerminatedEvent_3062ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartErrorEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartErrorEvent_3060ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case Event2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getEvent_3024ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case InclusiveGateway2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getInclusiveGateway_3051ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case LaneEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getLane_3007ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case StartEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getStartEvent_3002ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case SubProcessEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getSubProcessEvent_3058ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case ThrowLinkEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getThrowLinkEvent_3018ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case CatchLinkEvent2EditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getCatchLinkEvent_3019ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case SequenceFlowEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getSequenceFlow_4001ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case MessageFlowEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getMessageFlow_4002ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } case TextAnnotationAttachmentEditPart.VISUAL_ID: { if (!domain2NotationMap.containsKey(view.getElement())) { result.addAll(ProcessDiagramUpdater.getTextAnnotationAttachment_4003ContainedLinks(view)); } domain2NotationMap.putView(view.getElement(), view); break; } } for (Iterator children = view.getChildren().iterator(); children.hasNext();) { result.addAll(collectAllLinks((View) children.next(), domain2NotationMap)); } for (Iterator edges = view.getSourceEdges().iterator(); edges.hasNext();) { result.addAll(collectAllLinks((View) edges.next(), domain2NotationMap)); } return result; } /** * @generated */ private Collection<IAdaptable> createConnections(Collection<ProcessLinkDescriptor> linkDescriptors, Domain2Notation domain2NotationMap) { LinkedList<IAdaptable> adapters = new LinkedList<IAdaptable>(); for (ProcessLinkDescriptor nextLinkDescriptor : linkDescriptors) { EditPart sourceEditPart = getSourceEditPart(nextLinkDescriptor, domain2NotationMap); EditPart targetEditPart = getTargetEditPart(nextLinkDescriptor, domain2NotationMap); if (sourceEditPart == null || targetEditPart == null) { continue; } CreateConnectionViewRequest.ConnectionViewDescriptor descriptor = new CreateConnectionViewRequest.ConnectionViewDescriptor( nextLinkDescriptor.getSemanticAdapter(), ProcessVisualIDRegistry.getType(nextLinkDescriptor.getVisualID()), ViewUtil.APPEND, false, ((IGraphicalEditPart) getHost()).getDiagramPreferencesHint()); CreateConnectionViewRequest ccr = new CreateConnectionViewRequest(descriptor); ccr.setType(RequestConstants.REQ_CONNECTION_START); ccr.setSourceEditPart(sourceEditPart); sourceEditPart.getCommand(ccr); ccr.setTargetEditPart(targetEditPart); ccr.setType(RequestConstants.REQ_CONNECTION_END); Command cmd = targetEditPart.getCommand(ccr); if (cmd != null && cmd.canExecute()) { executeCommand(cmd); IAdaptable viewAdapter = (IAdaptable) ccr.getNewObject(); if (viewAdapter != null) { adapters.add(viewAdapter); } } } return adapters; } /** * @generated */ private EditPart getEditPart(EObject domainModelElement, Domain2Notation domain2NotationMap) { View view = (View) domain2NotationMap.get(domainModelElement); if (view != null) { return (EditPart) getHost().getViewer().getEditPartRegistry().get(view); } return null; } /** * @generated */ private Diagram getDiagram() { return ((View) getHost().getModel()).getDiagram(); } /** * @generated */ private EditPart getSourceEditPart(UpdaterLinkDescriptor descriptor, Domain2Notation domain2NotationMap) { return getEditPart(descriptor.getSource(), domain2NotationMap); } /** * @generated */ private EditPart getTargetEditPart(UpdaterLinkDescriptor descriptor, Domain2Notation domain2NotationMap) { return getEditPart(descriptor.getDestination(), domain2NotationMap); } /** * @generated */ protected final EditPart getHintedEditPart(EObject domainModelElement, Domain2Notation domain2NotationMap, int hintVisualId) { View view = (View) domain2NotationMap.getHinted(domainModelElement, ProcessVisualIDRegistry.getType(hintVisualId)); if (view != null) { return (EditPart) getHost().getViewer().getEditPartRegistry().get(view); } return null; } /** * @generated */ @SuppressWarnings("serial") protected static class Domain2Notation extends HashMap<EObject, View> { /** * @generated */ public boolean containsDomainElement(EObject domainElement) { return this.containsKey(domainElement); } /** * @generated */ public View getHinted(EObject domainEObject, String hint) { return this.get(domainEObject); } /** * @generated */ public void putView(EObject domainElement, View view) { if (!containsKey(view.getElement())) { this.put(domainElement, view); } } } }