Bug 516820: [BPMN] implement SequenceFlow and FlowNode derived properties

Change-Id: I53f042e72aa38b3320514de6750a85ec86522d57
Signed-off-by: Géry Deloge <gery.deloge@cea.fr>
diff --git a/org.eclipse.papyrus.bpmn.tests/src/org/eclipse/papyrus/bpmn/bpmnprofiletest/FlowNodeCustomTest.java b/org.eclipse.papyrus.bpmn.tests/src/org/eclipse/papyrus/bpmn/bpmnprofiletest/FlowNodeCustomTest.java
new file mode 100644
index 0000000..d647c71
--- /dev/null
+++ b/org.eclipse.papyrus.bpmn.tests/src/org/eclipse/papyrus/bpmn/bpmnprofiletest/FlowNodeCustomTest.java
@@ -0,0 +1,123 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA.
+ * <p>
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * <p>
+ * Contributors:
+ * Géry Deloge (CEATech AQUI) gery.deloge@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.bpmn.bpmnprofiletest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
+import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
+import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
+import org.eclipse.papyrus.bpmn.BPMNProfile.impl.FlowNodeCustom;
+import org.eclipse.papyrus.bpmn.util.BPMNResource;
+import org.eclipse.uml2.uml.*;
+import org.eclipse.uml2.uml.util.UMLUtil;
+import org.eclipse.uml2.uml.util.UMLUtil.StereotypeApplicationHelper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class FlowNodeCustomTest {
+
+	private OpaqueAction source;
+	private OpaqueAction target;
+	
+	@Before
+	public void setUp() {
+		Model model = BPMNResource.createBPMNModel();
+
+		Activity activity = UMLFactory.eINSTANCE.createActivity();
+		model.getPackagedElements().add(activity);
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(activity, BPMNProfilePackage.eINSTANCE.getBPMNProcess());
+
+		ControlFlow controlFlow = UMLFactory.eINSTANCE.createControlFlow();
+		controlFlow.setActivity(activity);
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(controlFlow, BPMNProfilePackage.eINSTANCE.getSequenceFlow());
+	
+		source = UMLFactory.eINSTANCE.createOpaqueAction();
+		activity.getOwnedNodes().add(source);		
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(source, BPMNProfilePackage.eINSTANCE.getTask());
+	
+		target = UMLFactory.eINSTANCE.createOpaqueAction();
+		activity.getOwnedNodes().add(target);		
+		StereotypeApplicationHelper.getInstance(null).applyStereotype(target, BPMNProfilePackage.eINSTANCE.getTask());
+
+		controlFlow.setSource(source);
+		controlFlow.setTarget(target);
+	}
+	
+	@Test
+	public void getOutgoingGeneratedTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(source, FlowNode.class);
+		try{			
+			flownode.getOutgoing();
+		}
+		catch(UnsupportedOperationException e){
+			Assert.fail("missing custom code !");
+		}
+	}
+
+	/* ignored for now
+	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+	 */
+	@Ignore @Test
+	public void getOutgoingGeneratedCustomTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(source, FlowNode.class);	
+		EList<BPMNAssociation> list = FlowNodeCustom.getOutgoing(flownode);
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(target, list.get(0));
+	}
+
+	/* ignored for now
+	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+	 */
+	@Ignore @Test
+	public void getOutgoingTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(source, FlowNode.class);	
+		EList<BPMNAssociation> list = flownode.getOutgoing();
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(target, list.get(0));
+	}
+
+
+	@Test
+	public void getIncomingGeneratedTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(target, FlowNode.class);
+		try{
+			flownode.getIncoming();
+		}
+		catch(UnsupportedOperationException e){
+			Assert.fail("missing custom code !");
+		}
+	}
+
+	/* ignored for now
+   	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+ 	*/
+	@Ignore @Test
+	public void getIncomingGeneratedCustomTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(target, FlowNode.class);	
+		EList<BPMNAssociation> list = FlowNodeCustom.getOutgoing(flownode);
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(source, list.get(0));
+	}
+
+	/* ignored for now
+	   see https://bugs.eclipse.org/bugs/show_bug.cgi?id=516820
+ 	*/
+	@Ignore @Test
+	public void getIncomingTest(){
+		FlowNode flownode = UMLUtil.getStereotypeApplication(target, FlowNode.class);	
+		EList<BPMNAssociation> list = flownode.getOutgoing();
+		Assert.assertEquals(1, list.size());
+		Assert.assertEquals(source, list.get(0));
+	}
+}
diff --git a/org.eclipse.papyrus.bpmn/custom-src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeCustom.java b/org.eclipse.papyrus.bpmn/custom-src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeCustom.java
new file mode 100644
index 0000000..2c74298
--- /dev/null
+++ b/org.eclipse.papyrus.bpmn/custom-src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeCustom.java
@@ -0,0 +1,68 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST and others.
+ * <p>
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * <p>
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.bpmn.BPMNProfile.impl;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
+import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
+import org.eclipse.uml2.uml.ActivityEdge;
+import org.eclipse.uml2.uml.ActivityNode;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+public class FlowNodeCustom {
+
+	private FlowNodeCustom() {
+	}
+
+	/*
+	 * from BPMN profile v1.0 §10.2.2.4, should return List<SequenceFlow>
+	 */
+	public static EList<BPMNAssociation> getOutgoing(FlowNode flowNode) {
+
+		ActivityNode activityNode = flowNode.getBase_ActivityNode();
+		List<BPMNAssociation> list = new ArrayList<>();
+		if (activityNode != null) {
+			EList<ActivityEdge> outgoings = activityNode.getOutgoings();
+			list = outgoings.stream().map(e -> UMLUtil.getStereotypeApplication(e, BPMNAssociation.class))
+					.filter(Objects::nonNull)
+					.collect(Collectors.toList());
+		}
+
+		return new BasicEList<>(list);
+	}
+
+	/*
+	 * from BPMN profile v1.0 §10.2.2.4, should return List<SequenceFlow>
+	 */
+	public static EList<BPMNAssociation> getIncoming(FlowNode flowNode) {
+
+		ActivityNode activityNode = flowNode.getBase_ActivityNode();
+		List<BPMNAssociation> list = new ArrayList<>();
+		if (activityNode != null) {
+			EList<ActivityEdge> incomings = activityNode.getIncomings();
+			list = incomings.stream().map(e -> UMLUtil.getStereotypeApplication(e, BPMNAssociation.class))
+					.filter(Objects::nonNull)
+					.collect(Collectors.toList());
+		}
+
+		return new BasicEList<>(list);
+	}
+
+}
diff --git a/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore b/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore
index fd4a3b6..373c17a 100755
--- a/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore
+++ b/org.eclipse.papyrus.bpmn/model/BPMNProfile.ecore
@@ -44,11 +44,13 @@
   <eClassifiers xsi:type="ecore:EClass" name="FlowNode" abstract="true" eSuperTypes="#//FlowElement">
     <eAnnotations source="duplicates">
       <contents xsi:type="ecore:EReference" name="incoming" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/targetRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/targetRef">
         <eAnnotations source="redefines" references="#//BaseElement/incoming"/>
       </contents>
       <contents xsi:type="ecore:EReference" name="outgoing" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/sourceRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/sourceRef">
         <eAnnotations source="redefines" references="#//BaseElement/outgoing"/>
       </contents>
     </eAnnotations>
@@ -456,9 +458,11 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="conditionExpression" ordered="false"
         eType="#//BPMNExpression"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="sourceRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="targetRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BPMNExpression" eSuperTypes="#//BaseElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_OpaqueExpression"
diff --git a/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml b/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml
index e023433..e560871 100755
--- a/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml
+++ b/org.eclipse.papyrus.bpmn/model/bpmn.profile.uml
@@ -12735,11 +12735,11 @@
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_J9hK4NywEeaKmtNtvNnrBw"/>
         <upperValue xmi:type="uml:LiteralInteger" xmi:id="_K0vGwNywEeaKmtNtvNnrBw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming" name="incoming" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming" name="incoming" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming-lowerValue"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-incoming-upperValue" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing" name="outgoing" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing" name="outgoing" visibility="public" type="BPMNProfile-CoreStructure-Common-SequenceFlow" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing-lowerValue"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="BPMNProfile-CoreStructure-Common-FlowNode-outgoing-upperValue" value="*"/>
       </ownedAttribute>
@@ -12924,8 +12924,8 @@
       <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-conditionExpression" name="conditionExpression" visibility="public" type="BPMNProfile-CoreStructure-Common-BPMNExpression" association="BPMNProfile-CoreStructure-Common-packagedElement-39" isderived="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-conditionExpression-lowerValue"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-sourceRef" name="sourceRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false"/>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-targetRef" name="targetRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-sourceRef" name="sourceRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-45" isderived="false"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="BPMNProfile-CoreStructure-Common-SequenceFlow-targetRef" name="targetRef" visibility="public" type="BPMNProfile-CoreStructure-Common-FlowNode" isReadOnly="true" isDerived="true" association="BPMNProfile-CoreStructure-Common-packagedElement-44" isderived="false"/>
       <icon xmi:type="uml:Image" xmi:id="_8EYzYOmcEeSE8qC-7-3YgA" format="Papyrus" location="platform:/plugin/org.eclipse.papyrus.bpmn/icons/SequenceFlow.png">
         <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mSNYsLJLEeW3evHeiuWSvw" source="image_papyrus">
           <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mSP08LJLEeW3evHeiuWSvw" key="image_kind_key" value="icon"/>
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java
index 70202ad..9e6eced 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/SequenceFlow.java
@@ -115,24 +115,13 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Source Ref</em>' reference.
-	 * @see #setSourceRef(FlowNode)
 	 * @see org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage#getSequenceFlow_SourceRef()
-	 * @model required="true" volatile="true" ordered="false"
+	 * @model required="true" transient="true" changeable="false" volatile="true" derived="true" ordered="false"
 	 * @generated
 	 */
 	FlowNode getSourceRef();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow#getSourceRef <em>Source Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Source Ref</em>' reference.
-	 * @see #getSourceRef()
-	 * @generated
-	 */
-	void setSourceRef(FlowNode value);
-
-	/**
 	 * Returns the value of the '<em><b>Target Ref</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -141,24 +130,13 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Target Ref</em>' reference.
-	 * @see #setTargetRef(FlowNode)
 	 * @see org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage#getSequenceFlow_TargetRef()
-	 * @model required="true" volatile="true" ordered="false"
+	 * @model required="true" transient="true" changeable="false" volatile="true" derived="true" ordered="false"
 	 * @generated
 	 */
 	FlowNode getTargetRef();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow#getTargetRef <em>Target Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Target Ref</em>' reference.
-	 * @see #getTargetRef()
-	 * @generated
-	 */
-	void setTargetRef(FlowNode value);
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- begin-model-doc -->
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore
index 49923b5..66d6511 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfile.ecore
@@ -34,11 +34,13 @@
   <eClassifiers xsi:type="ecore:EClass" name="FlowNode" abstract="true" eSuperTypes="#//FlowElement">
     <eAnnotations source="duplicates">
       <contents xsi:type="ecore:EReference" name="incoming" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/targetRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/targetRef">
         <eAnnotations source="redefines" references="#//BaseElement/incoming"/>
       </contents>
       <contents xsi:type="ecore:EReference" name="outgoing" ordered="false" upperBound="-1"
-          eType="#//SequenceFlow" eOpposite="#//SequenceFlow/sourceRef">
+          eType="#//SequenceFlow" changeable="false" volatile="true" transient="true"
+          derived="true" eOpposite="#//SequenceFlow/sourceRef">
         <eAnnotations source="redefines" references="#//BaseElement/outgoing"/>
       </contents>
     </eAnnotations>
@@ -326,9 +328,11 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="conditionExpression" ordered="false"
         eType="#//BPMNExpression"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="sourceRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="targetRef" ordered="false"
-        lowerBound="1" eType="#//FlowNode" volatile="true"/>
+        lowerBound="1" eType="#//FlowNode" changeable="false" volatile="true" transient="true"
+        derived="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BPMNExpression" eSuperTypes="#//BaseElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_OpaqueExpression"
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java
index a999218..a60f4ef 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/BPMNProfilePackageImpl.java
@@ -15,12 +15,14 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfileFactory;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
 import org.eclipse.papyrus.bpmn.BPMNProfile.util.BPMNProfileValidator;
+import org.eclipse.uml2.types.TypesPackage;
 import org.eclipse.uml2.uml.UMLPackage;
 
 /**
@@ -1048,6 +1050,8 @@
 		isInited = true;
 
 		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+		TypesPackage.eINSTANCE.eClass();
 		UMLPackage.eINSTANCE.eClass();
 
 		// Load packages
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java
index fa5bfbc..fae9dfa 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/FlowNodeImpl.java
@@ -3,17 +3,13 @@
 package org.eclipse.papyrus.bpmn.BPMNProfile.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
-import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
 import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
 import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow;
 import org.eclipse.uml2.uml.ActivityNode;
 
 /**
@@ -102,14 +98,11 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT
 	 */
 	@Override
 	public EList<BPMNAssociation> getIncoming() {
-		if (incoming == null) {
-			incoming = new EObjectWithInverseResolvingEList<BPMNAssociation>(SequenceFlow.class, this, BPMNProfilePackage.FLOW_NODE__INCOMING, BPMNProfilePackage.BPMN_ASSOCIATION__TARGET_REF);
-		}
-		return incoming;
+		return FlowNodeCustom.getIncoming(this);
 	}
 
 	/**
@@ -118,20 +111,17 @@
 	 * @generated
 	 */
 	public boolean isSetIncoming() {
-		return incoming != null && !incoming.isEmpty();
+		return !getIncoming().isEmpty();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT
 	 */
 	@Override
 	public EList<BPMNAssociation> getOutgoing() {
-		if (outgoing == null) {
-			outgoing = new EObjectWithInverseResolvingEList<BPMNAssociation>(SequenceFlow.class, this, BPMNProfilePackage.FLOW_NODE__OUTGOING, BPMNProfilePackage.BPMN_ASSOCIATION__SOURCE_REF);
-		}
-		return outgoing;
+		return FlowNodeCustom.getOutgoing(this);
 	}
 
 	/**
@@ -140,40 +130,7 @@
 	 * @generated
 	 */
 	public boolean isSetOutgoing() {
-		return outgoing != null && !outgoing.isEmpty();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case BPMNProfilePackage.FLOW_NODE__INCOMING:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getIncoming()).basicAdd(otherEnd, msgs);
-			case BPMNProfilePackage.FLOW_NODE__OUTGOING:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getOutgoing()).basicAdd(otherEnd, msgs);
-		}
-		return super.eInverseAdd(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case BPMNProfilePackage.FLOW_NODE__INCOMING:
-				return ((InternalEList<?>)getIncoming()).basicRemove(otherEnd, msgs);
-			case BPMNProfilePackage.FLOW_NODE__OUTGOING:
-				return ((InternalEList<?>)getOutgoing()).basicRemove(otherEnd, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
+		return !getOutgoing().isEmpty();
 	}
 
 	/**
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java
index fa96e49..65fd427 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/impl/SequenceFlowImpl.java
@@ -220,17 +220,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setSourceRef(FlowNode newSourceRef) {
-		// TODO: implement this method to set the 'Source Ref' reference
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	public FlowNode getTargetRef() {
 		FlowNode targetRef = basicGetTargetRef();
 		return targetRef != null && targetRef.eIsProxy() ? (FlowNode)eResolveProxy((InternalEObject)targetRef) : targetRef;
@@ -250,17 +239,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setTargetRef(FlowNode newTargetRef) {
-		// TODO: implement this method to set the 'Target Ref' reference
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	public boolean SequenceFlowconditionExpression(DiagnosticChain diagnostics, Map<Object, Object> context) {
 		// TODO: implement this method
 		// -> specify the condition that violates the invariant
@@ -269,12 +247,12 @@
 		if (false) {
 			if (diagnostics != null) {
 				diagnostics.add
-						(new BasicDiagnostic
-								(Diagnostic.ERROR,
-										BPMNProfileValidator.DIAGNOSTIC_SOURCE,
-										BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWCONDITION_EXPRESSION,
-										EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowconditionExpression", EObjectValidator.getObjectLabel(this, context) }),
-										new Object [] { this }));
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 BPMNProfileValidator.DIAGNOSTIC_SOURCE,
+						 BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWCONDITION_EXPRESSION,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowconditionExpression", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
 			}
 			return false;
 		}
@@ -294,12 +272,12 @@
 		if (false) {
 			if (diagnostics != null) {
 				diagnostics.add
-						(new BasicDiagnostic
-								(Diagnostic.ERROR,
-										BPMNProfileValidator.DIAGNOSTIC_SOURCE,
-										BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWSOURCE_REF,
-										EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowsourceRef", EObjectValidator.getObjectLabel(this, context) }),
-										new Object [] { this }));
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 BPMNProfileValidator.DIAGNOSTIC_SOURCE,
+						 BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWSOURCE_REF,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowsourceRef", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
 			}
 			return false;
 		}
@@ -319,12 +297,12 @@
 		if (false) {
 			if (diagnostics != null) {
 				diagnostics.add
-						(new BasicDiagnostic
-								(Diagnostic.ERROR,
-										BPMNProfileValidator.DIAGNOSTIC_SOURCE,
-										BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWTARGET_REF,
-										EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowtargetRef", EObjectValidator.getObjectLabel(this, context) }),
-										new Object [] { this }));
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 BPMNProfileValidator.DIAGNOSTIC_SOURCE,
+						 BPMNProfileValidator.SEQUENCE_FLOW__SEQUENCE_FLOWTARGET_REF,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "SequenceFlowtargetRef", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
 			}
 			return false;
 		}
@@ -339,20 +317,20 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			if (resolve) return getBase_ControlFlow();
-			return basicGetBase_ControlFlow();
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			return isImmediate();
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			if (resolve) return getConditionExpression();
-			return basicGetConditionExpression();
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			if (resolve) return getSourceRef();
-			return basicGetSourceRef();
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			if (resolve) return getTargetRef();
-			return basicGetTargetRef();
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				if (resolve) return getBase_ControlFlow();
+				return basicGetBase_ControlFlow();
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				return isImmediate();
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				if (resolve) return getConditionExpression();
+				return basicGetConditionExpression();
+			case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
+				if (resolve) return getSourceRef();
+				return basicGetSourceRef();
+			case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
+				if (resolve) return getTargetRef();
+				return basicGetTargetRef();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -365,21 +343,15 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			setBase_ControlFlow((ControlFlow)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			setIsImmediate((Boolean)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			setConditionExpression((BPMNExpression)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			setSourceRef((FlowNode)newValue);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			setTargetRef((FlowNode)newValue);
-			return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				setBase_ControlFlow((ControlFlow)newValue);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				setIsImmediate((Boolean)newValue);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				setConditionExpression((BPMNExpression)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -392,21 +364,15 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			setBase_ControlFlow((ControlFlow)null);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			setIsImmediate(IS_IMMEDIATE_EDEFAULT);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			setConditionExpression((BPMNExpression)null);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			setSourceRef((FlowNode)null);
-			return;
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			setTargetRef((FlowNode)null);
-			return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				setBase_ControlFlow((ControlFlow)null);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				setIsImmediate(IS_IMMEDIATE_EDEFAULT);
+				return;
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				setConditionExpression((BPMNExpression)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -419,16 +385,16 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
-			return base_ControlFlow != null;
-		case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
-			return isImmediate != IS_IMMEDIATE_EDEFAULT;
-		case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
-			return conditionExpression != null;
-		case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
-			return basicGetSourceRef() != null;
-		case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
-			return basicGetTargetRef() != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__BASE_CONTROL_FLOW:
+				return base_ControlFlow != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__IS_IMMEDIATE:
+				return isImmediate != IS_IMMEDIATE_EDEFAULT;
+			case BPMNProfilePackage.SEQUENCE_FLOW__CONDITION_EXPRESSION:
+				return conditionExpression != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__SOURCE_REF:
+				return basicGetSourceRef() != null;
+			case BPMNProfilePackage.SEQUENCE_FLOW__TARGET_REF:
+				return basicGetTargetRef() != null;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -442,12 +408,12 @@
 	@SuppressWarnings("unchecked")
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-		case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWCONDITION_EXPRESSION__DIAGNOSTICCHAIN_MAP:
-			return SequenceFlowconditionExpression((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
-		case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWSOURCE_REF__DIAGNOSTICCHAIN_MAP:
-			return SequenceFlowsourceRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
-		case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWTARGET_REF__DIAGNOSTICCHAIN_MAP:
-			return SequenceFlowtargetRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
+			case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWCONDITION_EXPRESSION__DIAGNOSTICCHAIN_MAP:
+				return SequenceFlowconditionExpression((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
+			case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWSOURCE_REF__DIAGNOSTICCHAIN_MAP:
+				return SequenceFlowsourceRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
+			case BPMNProfilePackage.SEQUENCE_FLOW___SEQUENCE_FLOWTARGET_REF__DIAGNOSTICCHAIN_MAP:
+				return SequenceFlowtargetRef((DiagnosticChain)arguments.get(0), (Map<Object, Object>)arguments.get(1));
 		}
 		return super.eInvoke(operationID, arguments);
 	}
diff --git a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java
index d571606..4980994 100755
--- a/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java
+++ b/org.eclipse.papyrus.bpmn/src/org/eclipse/papyrus/bpmn/BPMNProfile/util/BPMNProfileSwitch.java
@@ -5,136 +5,6 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
-import org.eclipse.papyrus.bpmn.BPMNProfile.AdHocSubProcess;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Assignment;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Auditing;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNActivity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNArtifact;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNCollaboration;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNExtension;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNInterface;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNMessage;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNOperation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProcess;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProfilePackage;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNProperty;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNRelationship;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BPMNSignal;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BaseElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BoundaryEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.BusinessRuleTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CallActivity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CallConversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CallableElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CancelEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CatchEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Category;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CategoryValue;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CompensateEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ComplexBehaviorDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ComplexGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ConditionalEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Conversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ConversationLink;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ConversationNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationKey;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationProperty;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationPropertyBinding;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationPropertyRetrievalExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.CorrelationSubscription;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataInput;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataInputAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataObject;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataObjectReference;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataOutput;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataOutputAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataState;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataStore;
-import org.eclipse.papyrus.bpmn.BPMNProfile.DataStoreReference;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Definitions;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Documentation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EndEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ErrorEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Escalation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EscalationEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EventBasedGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.EventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExclusiveGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExtensionAttributeDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExtensionAttributeValue;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ExtensionDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FlowElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FlowElementsContainer;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FlowNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.FormalExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Gateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalBusinessRuleTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalConversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalManualTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalScriptTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.GlobalUserTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Group;
-import org.eclipse.papyrus.bpmn.BPMNProfile.HumanPerformer;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ImplicitThrowEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Import;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InclusiveGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InputOutputBinding;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InputOutputSpecification;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InputSet;
-import org.eclipse.papyrus.bpmn.BPMNProfile.InteractionNode;
-import org.eclipse.papyrus.bpmn.BPMNProfile.IntermediateCatchEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.IntermediateThrowEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ItemAwareElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ItemDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Lane;
-import org.eclipse.papyrus.bpmn.BPMNProfile.LaneSet;
-import org.eclipse.papyrus.bpmn.BPMNProfile.LinkEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.LoopCharacteristics;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ManualTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MessageEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MessageFlow;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MessageFlowAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Monitoring;
-import org.eclipse.papyrus.bpmn.BPMNProfile.MultiInstanceLoopCharacteristics;
-import org.eclipse.papyrus.bpmn.BPMNProfile.NonExclusiveGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.OutputSet;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ParallelGateway;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Participant;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ParticipantAssociation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ParticipantMultiplicity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.PartnerEntity;
-import org.eclipse.papyrus.bpmn.BPMNProfile.PartnerRole;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Performer;
-import org.eclipse.papyrus.bpmn.BPMNProfile.PotentialOwner;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ReceiveTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Rendering;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Resource;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceAssignmentExpression;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceParameter;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceParameterBinding;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ResourceRole;
-import org.eclipse.papyrus.bpmn.BPMNProfile.RootElement;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ScriptTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SendTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SequenceFlow;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ServiceTask;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SignalEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.StandardLoopCharacteristics;
-import org.eclipse.papyrus.bpmn.BPMNProfile.StartEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SubConversation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.SubProcess;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Task;
-import org.eclipse.papyrus.bpmn.BPMNProfile.TerminateEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.TextAnnotation;
-import org.eclipse.papyrus.bpmn.BPMNProfile.ThrowEvent;
-import org.eclipse.papyrus.bpmn.BPMNProfile.TimerEventDefinition;
-import org.eclipse.papyrus.bpmn.BPMNProfile.Transaction;
-import org.eclipse.papyrus.bpmn.BPMNProfile.UserTask;
 import org.eclipse.papyrus.bpmn.BPMNProfile.*;
 
 /**