refactorings CREATE CLASS WITH ATTRIBUTES FROM PARAMETER LIST and
EXTRACT SUPERCLASS added
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.refactorings.uml24.compositional/META-INF/MANIFEST.MF
index d763841..1984b74 100644
--- a/org.eclipse.emf.refactor.refactorings.uml24.compositional/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/META-INF/MANIFEST.MF
@@ -5,6 +5,14 @@
 Bundle-Version: 0.7.0
 Bundle-Activator: org.eclipse.emf.refactor.refactorings.uml24.compositional.Activator
 Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime
+ org.eclipse.core.runtime,
+ comrel;bundle-version="0.8.0",
+ org.eclipse.uml2.uml;bundle-version="4.0.2",
+ org.eclipse.emf.refactor.refactoring;bundle-version="0.8.0",
+ org.eclipse.emf.refactor.refactoring.runtime;bundle-version="0.8.0",
+ org.eclipse.ltk.ui.refactoring;bundle-version="3.7.0",
+ org.eclipse.ltk.core.refactoring;bundle-version="3.6.0",
+ comrel.interpreter;bundle-version="0.8.0",
+ org.junit;bundle-version="4.10.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/UmlUtils.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/UmlUtils.class
new file mode 100644
index 0000000..60da009
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/UmlUtils.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAllInterfaces.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAllInterfaces.class
new file mode 100644
index 0000000..703dd61
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAllInterfaces.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAssociatedClass.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAssociatedClass.class
new file mode 100644
index 0000000..4c1ad37
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAssociatedClass.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetClassName.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetClassName.class
new file mode 100644
index 0000000..ad924cf
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetClassName.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetFirstClass.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetFirstClass.class
new file mode 100644
index 0000000..94858c0
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetFirstClass.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOperationsHavingParameters.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOperationsHavingParameters.class
new file mode 100644
index 0000000..9c5a89d
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOperationsHavingParameters.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributes.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributes.class
new file mode 100644
index 0000000..eda1f84
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributes.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributesNoAssocEnds.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributesNoAssocEnds.class
new file mode 100644
index 0000000..6ff6251
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributesNoAssocEnds.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedOperations.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedOperations.class
new file mode 100644
index 0000000..3a81878
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedOperations.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetParametersEqualToParameters.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetParametersEqualToParameters.class
new file mode 100644
index 0000000..52b1193
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetParametersEqualToParameters.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController$1.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController$1.class
new file mode 100644
index 0000000..61347d9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController$InternalRefactoringProcessor.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController$InternalRefactoringProcessor.class
new file mode 100644
index 0000000..5257807
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController$InternalRefactoringProcessor.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController.class
new file mode 100644
index 0000000..ed526ac
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringDataManagement.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringDataManagement.class
new file mode 100644
index 0000000..cba7736
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringDataManagement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringGuiHandler.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringGuiHandler.class
new file mode 100644
index 0000000..9d9a9c6
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringGuiHandler.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest$1.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest$1.class
new file mode 100644
index 0000000..63baadb
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest.class
new file mode 100644
index 0000000..b4ee07a
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizard.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizard.class
new file mode 100644
index 0000000..22a3cc6
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizard.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizardPage.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizardPage.class
new file mode 100644
index 0000000..5ff00d5
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizardPage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/UmlParameterList.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/UmlParameterList.class
new file mode 100644
index 0000000..5339d0e
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/UmlParameterList.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController$1.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController$1.class
new file mode 100644
index 0000000..ea05d5f
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController$InternalRefactoringProcessor.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController$InternalRefactoringProcessor.class
new file mode 100644
index 0000000..1dae20a
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController$InternalRefactoringProcessor.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController.class
new file mode 100644
index 0000000..b87ecd7
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement$ContextList.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement$ContextList.class
new file mode 100644
index 0000000..dfd3f3c
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement$ContextList.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement.class
new file mode 100644
index 0000000..f2effe2
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringGuiHandler.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringGuiHandler.class
new file mode 100644
index 0000000..2a6a947
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringGuiHandler.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizard.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizard.class
new file mode 100644
index 0000000..8e3012a
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizard.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizardPage.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizardPage.class
new file mode 100644
index 0000000..0512786
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizardPage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/build.properties b/org.eclipse.emf.refactor.refactorings.uml24.compositional/build.properties
index 34d2e4d..e9863e2 100644
--- a/org.eclipse.emf.refactor.refactorings.uml24.compositional/build.properties
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/build.properties
@@ -1,4 +1,5 @@
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
-               .
+               .,\
+               plugin.xml
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractsuperclass.comrel b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractsuperclass.comrel
new file mode 100644
index 0000000..ba00bf1
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractsuperclass.comrel
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<comrel:CompositeRefactoring xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:comrel="http://comrel/0.1" name="extractsuperclass" refId="comrel.extractsuperclass" label="Extract Superclass" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+  <mainRefactoringUnit xsi:type="comrel:SequentialUnit" name="extractsuperclass">

+    <helperUnits xsi:type="comrel:SingleFilterUnit" name="Get First Class" helperUnitId="comrel.getfirstclass" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" singleFilterHelper="//@helper.0">

+      <inputPort name="class_s" type="org.eclipse.uml2.uml.Class"/>

+      <outputPort name="class_" type="org.eclipse.uml2.uml.Class"/>

+    </helperUnits>

+    <helperUnits xsi:type="comrel:MultiFeatureUnit" name="GetOwnedAttributes" helperUnitId="comrel.getownedattributes" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" multiFeatureHelper="//@helper.1">

+      <inputPort name="class_" type="org.eclipse.uml2.uml.Class"/>

+      <outputPort name="property_s" type="org.eclipse.uml2.uml.Property"/>

+    </helperUnits>

+    <helperUnits xsi:type="comrel:MultiFeatureUnit" name="GetOwnedOperations" helperUnitId="comrel.getownedoperations" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" multiFeatureHelper="//@helper.2">

+      <inputPort name="class_" type="org.eclipse.uml2.uml.Class"/>

+      <outputPort name="operation_s" type="org.eclipse.uml2.uml.Operation"/>

+    </helperUnits>

+    <refactoringUnits xsi:type="comrel:SingleQueuedUnit" seqExecutionOrder="1">

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Create Superclass" unitId="de.unimarburg.swt.refactorings.uml.createsuperclass" label="Create Superclass" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" modelRefactoring="//@modelRefactorings.0">

+        <inputPorts name="selectedEObject" description="" type="org.eclipse.uml2.uml.Class"/>

+        <inputPorts name="className" description="" type="java.lang.String"/>

+      </refactoringUnit>

+      <singleInputPorts name="className" type="java.lang.String"/>

+      <multiInputPort name="classList" description="" type="org.eclipse.uml2.uml.Class"/>

+    </refactoringUnits>

+    <refactoringUnits xsi:type="comrel:SingleQueuedUnit" seqExecutionOrder="2" strict="false" lblStrict="non strict">

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Pull Up Attribute" unitId="de.unimarburg.swt.refactorings.uml.pullupattribute" label="Pull Up Attribute" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" modelRefactoring="//@modelRefactorings.1">

+        <inputPorts name="selectedEObject" description="" type="org.eclipse.uml2.uml.Property"/>

+        <inputPorts name="className" description="" type="java.lang.String"/>

+      </refactoringUnit>

+      <singleInputPorts name="className" type="java.lang.String"/>

+      <multiInputPort name="attributeList" type="org.eclipse.uml2.uml.Property"/>

+    </refactoringUnits>

+    <refactoringUnits xsi:type="comrel:SingleQueuedUnit" seqExecutionOrder="3" strict="false" lblStrict="non strict">

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Pull Up Operation" unitId="de.unimarburg.swt.refactorings.uml.pullupoperation" label="Pull Up Operation" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" modelRefactoring="//@modelRefactorings.2">

+        <inputPorts name="selectedEObject" description="" type="org.eclipse.uml2.uml.Operation"/>

+        <inputPorts name="className" description="" type="java.lang.String"/>

+      </refactoringUnit>

+      <singleInputPorts name="className" type="java.lang.String"/>

+      <multiInputPort name="operationList" type="org.eclipse.uml2.uml.Operation"/>

+    </refactoringUnits>

+    <inputPorts xsi:type="comrel:SingleInputPort" name="className" description="Name of the new superclass" type="java.lang.String"/>

+    <inputPorts xsi:type="comrel:MultiInputPort" name="selectedEObjects" type="org.eclipse.uml2.uml.Class"/>

+  </mainRefactoringUnit>

+  <portMappings xsi:type="comrel:MultiSinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.0/@multiInputPort" target="//@mainRefactoringUnit/@refactoringUnits.0/@refactoringUnit/@inputPorts.0"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.0/@singleInputPorts.0" target="//@mainRefactoringUnit/@refactoringUnits.0/@refactoringUnit/@inputPorts.1"/>

+  <portMappings xsi:type="comrel:MultiSinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.1/@multiInputPort" target="//@mainRefactoringUnit/@refactoringUnits.1/@refactoringUnit/@inputPorts.0"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.1/@singleInputPorts.0" target="//@mainRefactoringUnit/@refactoringUnits.1/@refactoringUnit/@inputPorts.1"/>

+  <portMappings xsi:type="comrel:MultiSinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.2/@multiInputPort" target="//@mainRefactoringUnit/@refactoringUnits.2/@refactoringUnit/@inputPorts.0"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.2/@singleInputPorts.0" target="//@mainRefactoringUnit/@refactoringUnits.2/@refactoringUnit/@inputPorts.1"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@inputPorts.0" target="//@mainRefactoringUnit/@refactoringUnits.0/@singleInputPorts.0"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@inputPorts.0" target="//@mainRefactoringUnit/@refactoringUnits.1/@singleInputPorts.0"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@inputPorts.0" target="//@mainRefactoringUnit/@refactoringUnits.2/@singleInputPorts.0"/>

+  <portMappings xsi:type="comrel:MultiPortMapping" source="//@mainRefactoringUnit/@inputPorts.1" target="//@mainRefactoringUnit/@refactoringUnits.0/@multiInputPort"/>

+  <portMappings xsi:type="comrel:MultiPortMapping" source="//@mainRefactoringUnit/@inputPorts.1" target="//@mainRefactoringUnit/@helperUnits.0/@inputPort"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@helperUnits.0/@outputPort" target="//@mainRefactoringUnit/@helperUnits.1/@inputPort"/>

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@helperUnits.0/@outputPort" target="//@mainRefactoringUnit/@helperUnits.2/@inputPort"/>

+  <portMappings xsi:type="comrel:MultiPortMapping" source="//@mainRefactoringUnit/@helperUnits.1/@outputPort" target="//@mainRefactoringUnit/@refactoringUnits.1/@multiInputPort"/>

+  <portMappings xsi:type="comrel:MultiPortMapping" source="//@mainRefactoringUnit/@helperUnits.2/@outputPort" target="//@mainRefactoringUnit/@refactoringUnits.2/@multiInputPort"/>

+  <modelRefactorings name="Create Superclass" refId="org.eclipse.emf.refactor.refactorings.uml24.createsuperclass" label="Create Superclass" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPorts name="selectedEObject" description="" type="org.eclipse.uml2.uml.Class"/>

+    <inputPorts name="className" description="" type="java.lang.String"/>

+  </modelRefactorings>

+  <modelRefactorings name="Pull Up Attribute" refId="org.eclipse.emf.refactor.refactorings.uml24.pullupattribute" label="Pull Up Attribute" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPorts name="selectedEObject" description="" type="org.eclipse.uml2.uml.Property"/>

+    <inputPorts name="className" description="" type="java.lang.String"/>

+  </modelRefactorings>

+  <modelRefactorings name="Pull Up Operation" refId="org.eclipse.emf.refactor.refactorings.uml24.pullupoperation" label="Pull Up Operation" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPorts name="selectedEObject" description="" type="org.eclipse.uml2.uml.Operation"/>

+    <inputPorts name="className" description="" type="java.lang.String"/>

+  </modelRefactorings>

+  <helper xsi:type="comrel:SingleFilterHelper" name="Get First Class" helperId="comrel.getfirstclass" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPort name="class_s" type="org.eclipse.uml2.uml.Class"/>

+    <outputPort name="class_" type="org.eclipse.uml2.uml.Class"/>

+  </helper>

+  <helper xsi:type="comrel:MultiFeatureHelper" name="GetOwnedAttributes" helperId="comrel.getownedattributes" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPort name="class_" type="org.eclipse.uml2.uml.Class"/>

+    <outputPort name="property_s" type="org.eclipse.uml2.uml.Property"/>

+  </helper>

+  <helper xsi:type="comrel:MultiFeatureHelper" name="GetOwnedOperations" helperId="comrel.getownedoperations" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPort name="class_" type="org.eclipse.uml2.uml.Class"/>

+    <outputPort name="operation_s" type="org.eclipse.uml2.uml.Operation"/>

+  </helper>

+</comrel:CompositeRefactoring>

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractsuperclass.comrel_diagram b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractsuperclass.comrel_diagram
new file mode 100644
index 0000000..ebdefab
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractsuperclass.comrel_diagram
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:comrel="http://comrel/0.1" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_5yoD0OnzEeCZ8NkEF9Ty2Q" type="Comrel" name="extractsuperclass.comrel_diagram" measurementUnit="Pixel">

+  <children xmi:type="notation:Shape" xmi:id="_AB7esOn0EeCZ8NkEF9Ty2Q" type="2005" fontName="Segoe UI">

+    <children xmi:type="notation:DecorationNode" xmi:id="_AB7es-n0EeCZ8NkEF9Ty2Q" type="5083"/>

+    <children xmi:type="notation:BasicCompartment" xmi:id="_AB7etOn0EeCZ8NkEF9Ty2Q" type="7079">

+      <children xmi:type="notation:Shape" xmi:id="_JbXd0On1EeCZ8NkEF9Ty2Q" type="3063" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_JbXd0un1EeCZ8NkEF9Ty2Q" type="5046"/>

+        <children xmi:type="notation:Node" xmi:id="_JcHEsOn1EeCZ8NkEF9Ty2Q" type="3017">

+          <children xmi:type="notation:DecorationNode" xmi:id="_JcHEten1EeCZ8NkEF9Ty2Q" type="5014">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_JcHEtun1EeCZ8NkEF9Ty2Q" x="-100" y="20"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_JcHEsen1EeCZ8NkEF9Ty2Q"/>

+          <styles xmi:type="notation:FontStyle" xmi:id="_JcHEsun1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+          <styles xmi:type="notation:FillStyle" xmi:id="_JcHEs-n1EeCZ8NkEF9Ty2Q"/>

+          <element xmi:type="comrel:MultiInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.0/@inputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JcHEtOn1EeCZ8NkEF9Ty2Q" x="-19" y="8"/>

+        </children>

+        <children xmi:type="notation:Shape" xmi:id="_JcHEt-n1EeCZ8NkEF9Ty2Q" type="3018" fontName="Segoe UI">

+          <children xmi:type="notation:DecorationNode" xmi:id="_JcHEuen1EeCZ8NkEF9Ty2Q" type="5015">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_JcHEuun1EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+          </children>

+          <element xmi:type="comrel:SingleOutputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.0/@outputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JcHEuOn1EeCZ8NkEF9Ty2Q" x="213" y="12"/>

+        </children>

+        <element xmi:type="comrel:SingleFilterUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.0"/>

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JbXd0en1EeCZ8NkEF9Ty2Q" x="464" y="16"/>

+      </children>

+      <children xmi:type="notation:Shape" xmi:id="_PwVb0On1EeCZ8NkEF9Ty2Q" type="3062" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_PwVb0un1EeCZ8NkEF9Ty2Q" type="5045"/>

+        <children xmi:type="notation:Shape" xmi:id="_PwfM0On1EeCZ8NkEF9Ty2Q" type="3013" fontName="Segoe UI">

+          <children xmi:type="notation:DecorationNode" xmi:id="_PwfM0un1EeCZ8NkEF9Ty2Q" type="5010">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_PwfM0-n1EeCZ8NkEF9Ty2Q" x="-94" y="-20"/>

+          </children>

+          <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.1/@inputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PwfM0en1EeCZ8NkEF9Ty2Q" x="192" y="-19"/>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_PwfM1On1EeCZ8NkEF9Ty2Q" type="3015">

+          <children xmi:type="notation:DecorationNode" xmi:id="_PwfM2en1EeCZ8NkEF9Ty2Q" type="5012">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_PwfM2un1EeCZ8NkEF9Ty2Q" x="40" y="20"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_PwfM1en1EeCZ8NkEF9Ty2Q"/>

+          <styles xmi:type="notation:FontStyle" xmi:id="_PwfM1un1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+          <styles xmi:type="notation:FillStyle" xmi:id="_PwfM1-n1EeCZ8NkEF9Ty2Q"/>

+          <element xmi:type="comrel:MultiOutputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.1/@outputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PwfM2On1EeCZ8NkEF9Ty2Q" x="72" y="39"/>

+        </children>

+        <element xmi:type="comrel:MultiFeatureUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.1"/>

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PwVb0en1EeCZ8NkEF9Ty2Q" x="560" y="100"/>

+      </children>

+      <children xmi:type="notation:Shape" xmi:id="_TjI_EOn1EeCZ8NkEF9Ty2Q" type="3062" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_TjI_Eun1EeCZ8NkEF9Ty2Q" type="5045"/>

+        <children xmi:type="notation:Shape" xmi:id="_TjI_E-n1EeCZ8NkEF9Ty2Q" type="3013" fontName="Segoe UI">

+          <children xmi:type="notation:DecorationNode" xmi:id="_TjSwEOn1EeCZ8NkEF9Ty2Q" type="5010">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_TjSwEen1EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+          </children>

+          <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.2/@inputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TjI_FOn1EeCZ8NkEF9Ty2Q" x="53" y="-19"/>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_TjSwEun1EeCZ8NkEF9Ty2Q" type="3015">

+          <children xmi:type="notation:DecorationNode" xmi:id="_TjSwF-n1EeCZ8NkEF9Ty2Q" type="5012">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_TjSwGOn1EeCZ8NkEF9Ty2Q" y="5"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_TjSwE-n1EeCZ8NkEF9Ty2Q"/>

+          <styles xmi:type="notation:FontStyle" xmi:id="_TjSwFOn1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+          <styles xmi:type="notation:FillStyle" xmi:id="_TjSwFen1EeCZ8NkEF9Ty2Q"/>

+          <element xmi:type="comrel:MultiOutputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.2/@outputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TjSwFun1EeCZ8NkEF9Ty2Q" x="89" y="39"/>

+        </children>

+        <element xmi:type="comrel:MultiFeatureUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@helperUnits.2"/>

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TjI_Een1EeCZ8NkEF9Ty2Q" x="861" y="102"/>

+      </children>

+    </children>

+    <children xmi:type="notation:BasicCompartment" xmi:id="_AB7eten0EeCZ8NkEF9Ty2Q" type="7080">

+      <children xmi:type="notation:Shape" xmi:id="_CZPUUOn0EeCZ8NkEF9Ty2Q" type="3065" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_CZPUU-n0EeCZ8NkEF9Ty2Q" type="5061"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_CZPUVOn0EeCZ8NkEF9Ty2Q" type="7049"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_CZPUVen0EeCZ8NkEF9Ty2Q" type="7050">

+          <children xmi:type="notation:Shape" xmi:id="_El1HsOn0EeCZ8NkEF9Ty2Q" type="3068" fontName="Segoe UI">

+            <children xmi:type="notation:DecorationNode" xmi:id="_El1Hsun0EeCZ8NkEF9Ty2Q" type="5048"/>

+            <children xmi:type="notation:Shape" xmi:id="_El-RoOn0EeCZ8NkEF9Ty2Q" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_El-Roun0EeCZ8NkEF9Ty2Q" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_El-Ro-n0EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+              </children>

+              <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.0/@refactoringUnit/@inputPorts.0"/>

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_El-Roen0EeCZ8NkEF9Ty2Q" x="126" y="-19"/>

+            </children>

+            <children xmi:type="notation:Shape" xmi:id="_El-RpOn0EeCZ8NkEF9Ty2Q" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_El-Rpun0EeCZ8NkEF9Ty2Q" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_El-Rp-n0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+              </children>

+              <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.0/@refactoringUnit/@inputPorts.1"/>

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_El-Rpen0EeCZ8NkEF9Ty2Q" x="42" y="-19"/>

+            </children>

+            <element xmi:type="comrel:AtomicUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.0/@refactoringUnit"/>

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_El1Hsen0EeCZ8NkEF9Ty2Q" x="2" y="85"/>

+          </children>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_CZYeQOn0EeCZ8NkEF9Ty2Q" type="3024">

+          <children xmi:type="notation:DecorationNode" xmi:id="_CZYeRen0EeCZ8NkEF9Ty2Q" type="5021">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_CZYeRun0EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_CZYeQen0EeCZ8NkEF9Ty2Q"/>

+          <styles xmi:type="notation:FontStyle" xmi:id="_CZYeQun0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+          <styles xmi:type="notation:FillStyle" xmi:id="_CZYeQ-n0EeCZ8NkEF9Ty2Q"/>

+          <element xmi:type="comrel:MultiInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.0/@multiInputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CZYeROn0EeCZ8NkEF9Ty2Q" x="138" y="-19"/>

+        </children>

+        <children xmi:type="notation:Shape" xmi:id="_MMLOAOn0EeCZ8NkEF9Ty2Q" type="3023" fontName="Segoe UI">

+          <children xmi:type="notation:DecorationNode" xmi:id="_MMLOAun0EeCZ8NkEF9Ty2Q" type="5020">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_MMLOA-n0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+          </children>

+          <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.0/@singleInputPorts.0"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MMLOAen0EeCZ8NkEF9Ty2Q" x="54" y="-19"/>

+        </children>

+        <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_CZPUUen0EeCZ8NkEF9Ty2Q"/>

+        <element xmi:type="comrel:SingleQueuedUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.0"/>

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CZPUUun0EeCZ8NkEF9Ty2Q" x="14" y="78" width="337" height="247"/>

+      </children>

+      <children xmi:type="notation:Shape" xmi:id="_Pr7SYOn0EeCZ8NkEF9Ty2Q" type="3065" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_Pr7SY-n0EeCZ8NkEF9Ty2Q" type="5061"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_Pr7SZOn0EeCZ8NkEF9Ty2Q" type="7049"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_Pr7SZen0EeCZ8NkEF9Ty2Q" type="7050">

+          <children xmi:type="notation:Shape" xmi:id="_TtwJEOn0EeCZ8NkEF9Ty2Q" type="3068" fontName="Segoe UI">

+            <children xmi:type="notation:DecorationNode" xmi:id="_TtwJEun0EeCZ8NkEF9Ty2Q" type="5048"/>

+            <children xmi:type="notation:Shape" xmi:id="_TtwJE-n0EeCZ8NkEF9Ty2Q" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_TtwJFen0EeCZ8NkEF9Ty2Q" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_TtwJFun0EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+              </children>

+              <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.1/@refactoringUnit/@inputPorts.0"/>

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TtwJFOn0EeCZ8NkEF9Ty2Q" x="131" y="-19"/>

+            </children>

+            <children xmi:type="notation:Shape" xmi:id="_TtwJF-n0EeCZ8NkEF9Ty2Q" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_TtwJGen0EeCZ8NkEF9Ty2Q" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_TtwJGun0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+              </children>

+              <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.1/@refactoringUnit/@inputPorts.1"/>

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TtwJGOn0EeCZ8NkEF9Ty2Q" x="47" y="-19"/>

+            </children>

+            <element xmi:type="comrel:AtomicUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.1/@refactoringUnit"/>

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TtwJEen0EeCZ8NkEF9Ty2Q" x="8" y="89"/>

+          </children>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_Pr7SZun0EeCZ8NkEF9Ty2Q" type="3024">

+          <children xmi:type="notation:DecorationNode" xmi:id="_Pr7Sa-n0EeCZ8NkEF9Ty2Q" type="5021">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_Pr7SbOn0EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_Pr7SZ-n0EeCZ8NkEF9Ty2Q"/>

+          <styles xmi:type="notation:FontStyle" xmi:id="_Pr7SaOn0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+          <styles xmi:type="notation:FillStyle" xmi:id="_Pr7Saen0EeCZ8NkEF9Ty2Q"/>

+          <element xmi:type="comrel:MultiInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.1/@multiInputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Pr7Saun0EeCZ8NkEF9Ty2Q" x="150" y="-19"/>

+        </children>

+        <children xmi:type="notation:Shape" xmi:id="_Y-lJgOn0EeCZ8NkEF9Ty2Q" type="3023" fontName="Segoe UI">

+          <children xmi:type="notation:DecorationNode" xmi:id="_Y-lJgun0EeCZ8NkEF9Ty2Q" type="5020">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_Y-lJg-n0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+          </children>

+          <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.1/@singleInputPorts.0"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Y-lJgen0EeCZ8NkEF9Ty2Q" x="66" y="-19"/>

+        </children>

+        <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_Pr7SYen0EeCZ8NkEF9Ty2Q"/>

+        <element xmi:type="comrel:SingleQueuedUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.1"/>

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Pr7SYun0EeCZ8NkEF9Ty2Q" x="374" y="76" width="367" height="249"/>

+      </children>

+      <children xmi:type="notation:Shape" xmi:id="_cJzvYOn0EeCZ8NkEF9Ty2Q" type="3065" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_cJzvY-n0EeCZ8NkEF9Ty2Q" type="5061"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_cJzvZOn0EeCZ8NkEF9Ty2Q" type="7049"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_cJzvZen0EeCZ8NkEF9Ty2Q" type="7050">

+          <children xmi:type="notation:Shape" xmi:id="_n66l8On0EeCZ8NkEF9Ty2Q" type="3068" fontName="Segoe UI">

+            <children xmi:type="notation:DecorationNode" xmi:id="_n66l8un0EeCZ8NkEF9Ty2Q" type="5048"/>

+            <children xmi:type="notation:Shape" xmi:id="_n66l8-n0EeCZ8NkEF9Ty2Q" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_n66l9en0EeCZ8NkEF9Ty2Q" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_n66l9un0EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+              </children>

+              <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.2/@refactoringUnit/@inputPorts.0"/>

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n66l9On0EeCZ8NkEF9Ty2Q" x="120" y="-19"/>

+            </children>

+            <children xmi:type="notation:Shape" xmi:id="_n66l9-n0EeCZ8NkEF9Ty2Q" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_n66l-en0EeCZ8NkEF9Ty2Q" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_n66l-un0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+              </children>

+              <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.2/@refactoringUnit/@inputPorts.1"/>

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n66l-On0EeCZ8NkEF9Ty2Q" x="54" y="-19"/>

+            </children>

+            <element xmi:type="comrel:AtomicUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.2/@refactoringUnit"/>

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n66l8en0EeCZ8NkEF9Ty2Q" x="2" y="84"/>

+          </children>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_cJzvZun0EeCZ8NkEF9Ty2Q" type="3024">

+          <children xmi:type="notation:DecorationNode" xmi:id="_cJzva-n0EeCZ8NkEF9Ty2Q" type="5021">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_cJzvbOn0EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_cJzvZ-n0EeCZ8NkEF9Ty2Q"/>

+          <styles xmi:type="notation:FontStyle" xmi:id="_cJzvaOn0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+          <styles xmi:type="notation:FillStyle" xmi:id="_cJzvaen0EeCZ8NkEF9Ty2Q"/>

+          <element xmi:type="comrel:MultiInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.2/@multiInputPort"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cJzvaun0EeCZ8NkEF9Ty2Q" x="132" y="-19"/>

+        </children>

+        <children xmi:type="notation:Shape" xmi:id="_rHU3kOn0EeCZ8NkEF9Ty2Q" type="3023" fontName="Segoe UI">

+          <children xmi:type="notation:DecorationNode" xmi:id="_rHU3kun0EeCZ8NkEF9Ty2Q" type="5020">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_rHU3k-n0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+          </children>

+          <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.2/@singleInputPorts.0"/>

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rHU3ken0EeCZ8NkEF9Ty2Q" x="66" y="-19"/>

+        </children>

+        <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_cJzvYen0EeCZ8NkEF9Ty2Q"/>

+        <element xmi:type="comrel:SingleQueuedUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit/@refactoringUnits.2"/>

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cJzvYun0EeCZ8NkEF9Ty2Q" x="764" y="78" width="367" height="247"/>

+      </children>

+    </children>

+    <children xmi:type="notation:Shape" xmi:id="_5WSQoOn0EeCZ8NkEF9Ty2Q" type="3027" fontName="Segoe UI">

+      <children xmi:type="notation:DecorationNode" xmi:id="_5WSQoun0EeCZ8NkEF9Ty2Q" type="5022">

+        <layoutConstraint xmi:type="notation:Location" xmi:id="_5WSQo-n0EeCZ8NkEF9Ty2Q" x="-20" y="-40"/>

+      </children>

+      <element xmi:type="comrel:SingleInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@inputPorts.0"/>

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5WSQoen0EeCZ8NkEF9Ty2Q" x="78" y="-19"/>

+    </children>

+    <children xmi:type="notation:Node" xmi:id="_D5bfQOn1EeCZ8NkEF9Ty2Q" type="3028">

+      <children xmi:type="notation:DecorationNode" xmi:id="_D5bfRen1EeCZ8NkEF9Ty2Q" type="5023">

+        <layoutConstraint xmi:type="notation:Location" xmi:id="_D5bfRun1EeCZ8NkEF9Ty2Q" x="40" y="-20"/>

+      </children>

+      <styles xmi:type="notation:DescriptionStyle" xmi:id="_D5bfQen1EeCZ8NkEF9Ty2Q"/>

+      <styles xmi:type="notation:FontStyle" xmi:id="_D5bfQun1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+      <styles xmi:type="notation:FillStyle" xmi:id="_D5bfQ-n1EeCZ8NkEF9Ty2Q"/>

+      <element xmi:type="comrel:MultiInputPort" href="extractsuperclass.comrel#//@mainRefactoringUnit/@inputPorts.1"/>

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_D5bfROn1EeCZ8NkEF9Ty2Q" x="282" y="-19"/>

+    </children>

+    <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_AB7esen0EeCZ8NkEF9Ty2Q"/>

+    <element xmi:type="comrel:SequentialUnit" href="extractsuperclass.comrel#//@mainRefactoringUnit"/>

+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AB7esun0EeCZ8NkEF9Ty2Q" x="18" y="72" width="1165" height="637"/>

+  </children>

+  <styles xmi:type="notation:DiagramStyle" xmi:id="_5yoD0enzEeCZ8NkEF9Ty2Q"/>

+  <element xmi:type="comrel:CompositeRefactoring" href="extractsuperclass.comrel#/"/>

+  <edges xmi:type="notation:Connector" xmi:id="_KbGR8On0EeCZ8NkEF9Ty2Q" type="4003" source="_CZYeQOn0EeCZ8NkEF9Ty2Q" target="_El-RoOn0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_KbGR8en0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiSinglePortMapping" href="extractsuperclass.comrel#//@portMappings.0"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KbGR8un0EeCZ8NkEF9Ty2Q" points="[-1, 10, 17, -249]$[-19, 249, -1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_NJnGoOn0EeCZ8NkEF9Ty2Q" type="4001" source="_MMLOAOn0EeCZ8NkEF9Ty2Q" target="_El-RpOn0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_NJnGoen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.1"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NJnGoun0EeCZ8NkEF9Ty2Q" points="[-3, 10, 71, -249]$[-76, 249, -2, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_XiCTAOn0EeCZ8NkEF9Ty2Q" type="4003" source="_Pr7SZun0EeCZ8NkEF9Ty2Q" target="_TtwJE-n0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_XiCTAen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiSinglePortMapping" href="extractsuperclass.comrel#//@portMappings.2"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_XiCTAun0EeCZ8NkEF9Ty2Q" points="[-2, 10, 35, -242]$[-40, 242, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_aQjuwOn0EeCZ8NkEF9Ty2Q" type="4001" source="_Y-lJgOn0EeCZ8NkEF9Ty2Q" target="_TtwJF-n0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_aQjuwen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.3"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aQjuwun0EeCZ8NkEF9Ty2Q" points="[-8, 10, -1, -242]$[-8, 242, -1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_p8MhMOn0EeCZ8NkEF9Ty2Q" type="4003" source="_cJzvZun0EeCZ8NkEF9Ty2Q" target="_n66l8-n0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_p8MhMen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiSinglePortMapping" href="extractsuperclass.comrel#//@portMappings.4"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_p8MhMun0EeCZ8NkEF9Ty2Q" points="[-2, 10, 29, -234]$[-31, 234, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_r6D8EOn0EeCZ8NkEF9Ty2Q" type="4001" source="_rHU3kOn0EeCZ8NkEF9Ty2Q" target="_n66l9-n0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_r6D8Een0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.5"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_r6D8Eun0EeCZ8NkEF9Ty2Q" points="[-3, 10, 67, -228]$[-71, 234, -1, -4]"/>

+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_r6NtEOn0EeCZ8NkEF9Ty2Q" id="(0.45,0.2)"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_6xVSUOn0EeCZ8NkEF9Ty2Q" type="4001" source="_5WSQoOn0EeCZ8NkEF9Ty2Q" target="_MMLOAOn0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_6xVSUen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.6"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_6xVSUun0EeCZ8NkEF9Ty2Q" points="[-10, 7, 478, -361]$[-492, 358, -4, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_7_vmMOn0EeCZ8NkEF9Ty2Q" type="4001" source="_5WSQoOn0EeCZ8NkEF9Ty2Q" target="_Y-lJgOn0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_7_vmMen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.7"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7_vmMun0EeCZ8NkEF9Ty2Q" points="[-4, 10, 106, -356]$[-114, 356, -4, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_84bhsOn0EeCZ8NkEF9Ty2Q" type="4001" source="_5WSQoOn0EeCZ8NkEF9Ty2Q" target="_rHU3kOn0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_84bhsen0EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.8"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_84bhsun0EeCZ8NkEF9Ty2Q" points="[9, 10, -337, -356]$[343, 356, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_E2IYEOn1EeCZ8NkEF9Ty2Q" type="4002" source="_D5bfQOn1EeCZ8NkEF9Ty2Q" target="_CZYeQOn0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_E2IYEen1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiPortMapping" href="extractsuperclass.comrel#//@portMappings.9"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_E2IYEun1EeCZ8NkEF9Ty2Q" points="[-10, 8, 410, -360]$[-424, 378, -4, 10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_KSHfoOn1EeCZ8NkEF9Ty2Q" type="4002" source="_D5bfQOn1EeCZ8NkEF9Ty2Q" target="_JcHEsOn1EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_KSHfoen1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiPortMapping" href="extractsuperclass.comrel#//@portMappings.10"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KSHfoun1EeCZ8NkEF9Ty2Q" points="[10, 7, -86, -69]$[96, 66, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_WHGJkOn1EeCZ8NkEF9Ty2Q" type="4001" source="_JcHEt-n1EeCZ8NkEF9Ty2Q" target="_PwfM0On1EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_WHGJken1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.11"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WHGJkun1EeCZ8NkEF9Ty2Q" points="[10, 10, -47, -43]$[54, 43, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_W-u8MOn1EeCZ8NkEF9Ty2Q" type="4001" source="_JcHEt-n1EeCZ8NkEF9Ty2Q" target="_TjI_E-n1EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_W-u8Men1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:SinglePortMapping" href="extractsuperclass.comrel#//@portMappings.12"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_W-u8Mun1EeCZ8NkEF9Ty2Q" points="[10, 2, -227, -53]$[235, 45, -2, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_YTiL8On1EeCZ8NkEF9Ty2Q" type="4002" source="_PwfM1On1EeCZ8NkEF9Ty2Q" target="_Pr7SZun0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_YTiL8en1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiPortMapping" href="extractsuperclass.comrel#//@portMappings.13"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YTiL8un1EeCZ8NkEF9Ty2Q" points="[-3, 10, 105, -133]$[-40, 143, 68, 0]$[-98, 143, 10, 0]"/>

+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YTiL8-n1EeCZ8NkEF9Ty2Q" id="(0.5,0.2)"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_ZDJD8On1EeCZ8NkEF9Ty2Q" type="4002" source="_TjSwEun1EeCZ8NkEF9Ty2Q" target="_cJzvZun0EeCZ8NkEF9Ty2Q">

+    <styles xmi:type="notation:FontStyle" xmi:id="_ZDJD8en1EeCZ8NkEF9Ty2Q" fontName="Segoe UI"/>

+    <element xmi:type="comrel:MultiPortMapping" href="extractsuperclass.comrel#//@portMappings.14"/>

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZDJD8un1EeCZ8NkEF9Ty2Q" points="[1, 10, -54, -275]$[52, 275, -3, -10]"/>

+  </edges>

+</notation:Diagram>

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml b/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml
new file mode 100644
index 0000000..14d5244
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         point="comrel.singlefilter">

+      <singlefilter 

+      		class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetFirstClass" 

+      		description="" 

+      		id="comrel.getfirstclass" 

+      		name="Get First Class" 

+      		namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+	  </singlefilter>

+   </extension>

+<extension point="comrel.multifeature">

+<multifeature 

+	  class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetOwnedAttributes" 

+	  description="" 

+	  id="comrel.getownedattributes" 

+	  name="GetOwnedAttributes" 

+	  namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</multifeature>

+<multifeature

+      class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetOwnedOperations"

+      id="comrel.getownedoperations"

+      name="GetOwnedOperations"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</multifeature>

+<multifeature

+      class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetParametersEqualToParameters"

+      description="Returns a list of parameters within a class equal to a parameter list snippet."

+      id="comrel.getparametersequaltoparameters"

+      name="Get Parameters Equal To Parameters"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</multifeature>

+<multifeature

+      class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetOwnedAttributesNoAssocEnds"

+      id="comrel.getownedattributesnoassocends"

+      name="GetOwnedAttributesNoAssocEnds"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</multifeature>

+<multifeature

+      class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetOperationsHavingParameters"

+      description="Returns a list of operations within a class with the given parameter list snippet."

+      id="comrel.getoperationshavingparameters"

+      name="Get Operations Having Parameters"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</multifeature>

+<multifeature

+      class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetAllInterfaces"

+      description="Returns all interfaces owned by the given package."

+      id="ecmfa.getallattributes"

+      name="Get All Interfaces"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</multifeature>

+</extension>

+<extension point="comrel.singlefeature">

+<singlefeature 

+	  class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetAssociatedClass" 

+	  description="" 

+	  id="comrel.getassociatedclass" 

+	  name="Get Associated Class" 

+	  namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</singlefeature>

+<singlefeature

+      class="org.eclipse.emf.refactor.refactorings.uml24.compositional.helper.GetClassName"

+      id="comrel.getclassname"

+      name="Get Class  Name"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+</singlefeature>

+</extension>

+<extension

+      point="org.eclipse.emf.refactor.refactorings">

+   <refactoring 

+      controller="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.RefactoringController" 

+      gui="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.RefactoringGuiHandler" 

+      id="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist" 

+      menulabel="Create Class with Attributes from Parameter List" 

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML"/>

+   <refactoring

+      controller="org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass.RefactoringController"

+      gui="org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass.RefactoringGuiHandler"

+      id="org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass"

+      menulabel="Extract Superclass"

+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML"/>

+</extension>

+</plugin>

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/UmlUtils.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/UmlUtils.java
new file mode 100644
index 0000000..f177665
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/UmlUtils.java
@@ -0,0 +1,854 @@
+package org.eclipse.emf.refactor.refactorings.uml24.compositional;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.common.util.TreeIterator;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.uml2.uml.Association;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Interface;

+import org.eclipse.uml2.uml.Model;

+import org.eclipse.uml2.uml.NamedElement;

+import org.eclipse.uml2.uml.Operation;

+import org.eclipse.uml2.uml.PackageableElement;

+import org.eclipse.uml2.uml.Parameter;

+import org.eclipse.uml2.uml.ParameterDirectionKind;

+import org.eclipse.uml2.uml.Property;

+import org.eclipse.uml2.uml.Type;

+import org.eclipse.uml2.uml.Usage;

+import org.eclipse.uml2.uml.VisibilityKind;

+

+public abstract class UmlUtils {

+

+	public static boolean haveSameSignatures(Operation op1, Operation op2) { // 23

+		EList<Parameter> inputParametersOp1 = getInputParameterList(op1.getOwnedParameters());

+		EList<Parameter> inputParametersOp2 = getInputParameterList(op2.getOwnedParameters());

+		if (inputParametersOp1.size() != inputParametersOp2.size()) return false;

+		for (int i=0; i < inputParametersOp1.size(); i++) {

+			Parameter par1 = inputParametersOp1.get(i);

+			Parameter par2 = inputParametersOp2.get(i);

+			if (! (haveSameNames(par1, par2) 

+					&& haveSameTypes(par1, par2) 

+					&& haveSameDirections(par1, par2) 

+					&& haveSameMultiplicities(par1, par2))) {

+				return false;

+			}

+		}

+		return true;

+	}

+

+	private static boolean haveSameMultiplicities(Parameter par1, Parameter par2) { // 3

+		if (par1.getLower() != par2.getLower()) return false;

+		if (par1.getUpper() != par2.getUpper()) return false;

+		return true;

+	}

+

+	private static boolean haveSameDirections(Parameter par1, Parameter par2) { // 1

+		return par1.getDirection().equals(par2.getDirection());

+	}

+

+	private static boolean haveSameTypes(Parameter par1, Parameter par2) { // 4

+		if (par1.getType() == null && par2.getType() == null) return true;

+		if (par1.getType() == null && par2.getType() != null) return false;

+		if (par1.getType() != null && par2.getType() == null) return false;

+		return (par1.getType().equals(par2.getType()));

+	}

+

+	private static boolean haveSameNames(Parameter par1, Parameter par2) { // 1

+		return par1.getName().equals(par2.getName());

+	}

+

+	public static EList<Parameter> getInputParameterList( // 5

+			EList<Parameter> parameters) {

+		EList<Parameter> inputParameterList = new BasicEList<Parameter>();

+		for (Parameter param : parameters) {

+			if (param.getDirection().getValue() != ParameterDirectionKind.RETURN) {

+				inputParameterList.add(param);

+			}

+		}

+		return inputParameterList;

+	}

+

+	public static boolean haveSameTypes(Operation op1, Operation op2) { // 4

+		if (op1.getType() == null && op2.getType() == null) return true;

+		if (op1.getType() == null && op2.getType() != null) return false;

+		if (op1.getType() != null && op2.getType() == null) return false;

+		return (op1.getType().equals(op2.getType()));

+	}

+

+	public static boolean hasAttributes(Class cl) { // 1

+		return (! cl.getOwnedAttributes().isEmpty());

+	}

+

+	public static boolean hasOperations(Class cl) { // 1

+		return (! cl.getOwnedOperations().isEmpty());

+	}

+

+	public static boolean hasSuperclasses(Class cl) { // 1

+		return (! cl.getSuperClasses().isEmpty());

+	}

+

+	public static boolean hasInnerClasses(Class cl) { // 1

+		return (! cl.getNestedClassifiers().isEmpty());

+	}

+

+	public static boolean hasOutgoingAssociations(Class cl) { // 13

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		for (Association association : associations) {

+			for (Property associationEnd : association.getMemberEnds()) {

+				if (associationEnd.getType().equals(cl) && (! associationEnd.isNavigable()))

+					return true;

+			}

+		}		

+		return false;

+	}

+

+	private static ArrayList<Association> getAllAssociations(Model model) { // 7

+		ArrayList<Association> associations = new ArrayList<Association>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if (eObject instanceof Association) {

+				associations.add((Association) eObject);

+			}			

+		}

+		return associations;

+	}

+

+	public static boolean hasIncomingAssociations(Class cl) { // 13

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		for (Association association : associations) {

+			for (Property associationEnd : association.getMemberEnds()) {

+				if (associationEnd.getType().equals(cl) && associationEnd.isNavigable())

+					return true;

+			}

+		}		

+		return false;

+	}

+

+	public static boolean implementsInterfaces(Class cl) { // 1

+		return (! cl.getInterfaceRealizations().isEmpty());

+	}

+

+	public static boolean usesInterfaces(Class cl) { // 14

+		ArrayList<Usage> usages = getAllUsages(cl.getModel());

+		for (Usage usage : usages) {

+			if (usage.getClients().contains(cl)) {

+				EList<NamedElement> suppliers = usage.getSuppliers();

+				for (NamedElement supplier : suppliers) {

+					if (supplier instanceof Interface) return true;

+				}

+			}

+		}

+		return false;

+	}

+

+	private static ArrayList<Usage> getAllUsages(Model model) { // 7

+		ArrayList<Usage> usages = new ArrayList<Usage>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if (eObject instanceof Usage) {

+				usages.add((Usage) eObject);

+			}			

+		}

+		return usages;

+	}

+

+	public static boolean isUsedAsAttributeType(Class cl) { // 12

+		ArrayList<Property> attributes = getAllAttributes(cl.getModel());

+		for (Property attribute : attributes) {

+			if (attribute.getType() != null 

+					&& attribute.getType().equals(cl)) return true;

+		}

+		return false;

+	}

+

+	private static ArrayList<Property> getAllAttributes(Model model) { // 8

+		ArrayList<Property> attributes = new ArrayList<Property>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if (eObject instanceof Property) {

+				Property attribute = (Property) eObject;

+				if (attribute.getClass_() != null) attributes.add(attribute);

+			}			

+		}		

+		return attributes;

+	}

+

+	public static boolean isUsedAsParameterType(Class cl) { // 11

+		ArrayList<Parameter> parameters = getAllParameters(cl.getModel());

+		for (Parameter parameter : parameters) {

+			if (parameter.getType() != null 

+					&& parameter.getType().equals(cl)) return true;

+		}

+		return false;

+	}

+

+	private static ArrayList<Parameter> getAllParameters(Model model) { // 7

+		ArrayList<Parameter> parameters = new ArrayList<Parameter>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if (eObject instanceof Parameter) {

+				parameters.add((Parameter) eObject);

+			}			

+		}		

+		return parameters;

+	}

+

+	public static EList<Type> getTypes(Model model) { // 11

+		EList<Type> types = new BasicEList<Type>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if ((eObject instanceof Type)

+					&&  !(eObject instanceof Association)) {

+				types.add((Type) eObject);

+			}			

+		}		

+		EList<PackageableElement> importedElements = model.getImportedMembers();

+		for (PackageableElement elem : importedElements) {

+			if ((elem instanceof Type)

+					&&  !(elem instanceof Association)) {

+				types.add((Type) elem);

+			}

+		}

+		return types;

+	}

+

+	public static EList<NamedElement> getNamedElementsFromList( // 4

+							EList<Type> types, String name) {

+		EList<NamedElement> namedElements = new BasicEList<NamedElement>();

+		for (Type ne : types) {

+			if (ne.getName().equals(name)) namedElements.add(ne);

+		}		

+		return namedElements;

+	}

+

+	public static boolean hasSubclasses(Class cl) { // 11

+		ArrayList<Class> classes = getAllClasses(cl.getModel());

+		for (Class cls : classes) {

+			if (cls.getSuperClasses().contains(cl)) return true;

+		}

+		return false;

+	}

+

+	public static ArrayList<Class> getAllClasses(Model model) { // 7

+		ArrayList<Class> classes = new ArrayList<Class>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if (eObject instanceof Class) {

+				classes.add((Class) eObject);

+			}			

+		}		

+		return classes;

+	}

+

+	private static Collection<? extends Class> getOtherAssociationEndsTypeClasses( // 6

+			Property assocend) {

+		ArrayList<Class> classes = new ArrayList<Class>();

+		Association assoc = assocend.getAssociation();

+		for (Property ae : assoc.getMemberEnds()) {

+			if ((! ae.equals(assocend)) 

+					&& (! ae.getType().equals(assocend.getType()))) {

+				classes.add((Class) ae.getType());

+			}

+		}

+		return classes;

+	}

+

+	public static List<Class> getOne2OneAssociatedClasses(Class cl) { // 59

+		ArrayList<Class> result = new ArrayList<Class>();

+		ArrayList<Association> incomingAssociations = 

+									getIncomingAssociations(cl);

+		ArrayList<Association> outgoingAssociations = 

+									getOutgoingAssociations(cl);

+		ArrayList<Class> classesFromIncomingAssociations = 

+			getOtherClassesFromAssociations(cl, incomingAssociations);

+		ArrayList<Class> classesFromOutgoingAssociations = 

+				getOtherClassesFromAssociations(cl, outgoingAssociations);

+		ArrayList<Class> associatedClasses = new ArrayList<Class>();

+		for (Class associatedClass : classesFromIncomingAssociations) {

+			if (classesFromOutgoingAssociations.contains(associatedClass))

+				associatedClasses.add(associatedClass);

+		}

+		for (Class associatedClass : associatedClasses) {

+			if (incomingAssociationHasOne2OneMultiplicityAndIsPublic

+					(cl, incomingAssociations, associatedClass)

+					&& outgoingAssociationHasOne2OneMultiplicityAndIsPublic

+						(cl, outgoingAssociations, associatedClass)){

+				result.add(associatedClass);

+			}

+		}

+		return result;

+	}

+

+	private static boolean outgoingAssociationHasOne2OneMultiplicityAndIsPublic( // 8

+			Class cl,

+			ArrayList<Association> outgoingAssociations, 

+			Class associatedClass) {

+		for (Association assoc : outgoingAssociations) {

+			for (Property ae1 : assoc.getMemberEnds()) {

+				if (ae1.getType().equals(cl)) {

+					for (Property ae2 : assoc.getMemberEnds()) {

+						if (ae2.getType().equals(associatedClass)) {

+							if ((ae2.getLower() == 1) 

+									&& (ae2.getUpper() == 1)

+									&& (ae2.getVisibility().equals(VisibilityKind.PUBLIC_LITERAL)))

+								return true;

+						}

+					}

+				}

+			}

+		}

+		return false;

+	}

+

+	private static boolean incomingAssociationHasOne2OneMultiplicityAndIsPublic( // 8

+			Class cl, 

+			ArrayList<Association> incomingAssociations, 

+			Class associatedClass) {

+		for (Association assoc : incomingAssociations) {

+			for (Property ae1 : assoc.getMemberEnds()) {

+				if (ae1.getType().equals(cl)) {

+					for (Property ae2 : assoc.getMemberEnds()) {

+						if (ae2.getType().equals(associatedClass)) {

+							if ((ae1.getLower() == 1) 

+									&& (ae1.getUpper() == 1)

+									&& (ae2.getVisibility().equals(VisibilityKind.PUBLIC_LITERAL)))

+								return true;

+						}

+					}

+				}

+			}

+		}

+		return false;

+	}

+

+	private static ArrayList<Class> getOtherClassesFromAssociations( // 8

+					Class cl, ArrayList<Association> incomingAssociations) { 

+		ArrayList<Class> result = new ArrayList<Class>();

+		for (Association assoc : incomingAssociations) {

+			for (Property associationEnd1 : assoc.getMemberEnds()) {

+				if (associationEnd1.getType().equals(cl)){

+					for (Property associationEnd2 : assoc.getMemberEnds()) {

+						if ((! associationEnd1.equals(associationEnd2)) 

+								&& associationEnd2.getType() instanceof Class

+								&& (! associationEnd2.getType().equals(cl))) {

+							result.add((Class) associationEnd2.getType());

+						}

+					}

+				}

+			}

+		}

+		return result;

+	}

+

+	private static ArrayList<Association> getOutgoingAssociations(Class cl) { // 16

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		ArrayList<Association> result = new ArrayList<Association>();

+		for (Association association : associations) {

+			for (Property associationEnd1 : association.getMemberEnds()) {

+				if (associationEnd1.getType().equals(cl)){

+					for (Property associationEnd2 : association.getMemberEnds()) {

+						if ((! associationEnd1.equals(associationEnd2)) 

+								&& associationEnd2.isNavigable()) {

+							result.add(association);

+						}

+					}

+				}

+			}

+		}		

+		return result;

+	}

+

+	private static ArrayList<Association> getIncomingAssociations(Class cl) { // 14

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		ArrayList<Association> result = new ArrayList<Association>();

+		for (Association association : associations) {

+			for (Property associationEnd : association.getMemberEnds()) {

+				if (associationEnd.getType().equals(cl) && associationEnd.isNavigable())

+					result.add(association);

+			}

+		}		

+		return result;

+	}

+	

+	public static Class getAssociatedClass(List<Class> classes, String className) { // 4

+		Class associatedClass = null;

+		for (Class cl : classes) {

+			if (cl.getName().equals(className)) associatedClass = cl;

+		}

+		return associatedClass;

+	}

+

+	public static boolean isAssociatedClass(List<Class> classes, String className) { // 3

+		for (Class cl : classes) {

+			if (cl.getName().equals(className)) return true;

+		}

+		return false;

+	}

+	

+	private static boolean haveSameStaticProperties(Operation op, Operation oper) { // 1

+		return (op.isStatic() == oper.isStatic());

+	}

+

+	private static boolean haveSameAbstractProperties(Operation op, // 1

+			Operation oper) {

+		return (op.isAbstract() == oper.isAbstract());

+	}

+

+	private static boolean haveSameQueryProperties(Operation op, Operation oper) { // 1

+		return (op.isQuery() == oper.isQuery());

+	}

+

+	private static boolean haveSameLeafProperties(Operation op, Operation oper) { // 1

+		return (op.isLeaf() == oper.isLeaf());

+	}

+

+	private static boolean haveSameMultiplicities(Operation op, Operation oper) { // 1

+		return ((op.getLower() == oper.getLower()) 

+				&& (op.getUpper() == oper.getUpper()));

+	}

+

+	private static boolean haveSameVisibilities(Operation op, Operation oper) { // 1

+		return op.getVisibility().equals(oper.getVisibility());

+	}

+

+	public static boolean haveSameType(Operation op, Operation oper) { // 3

+		if ((op.getType() == null) && (oper.getType() == null)) return true;

+		if ((op.getType() != null) 

+				&& (oper.getType() != null)

+				&& (op.getType().equals(oper.getType()))) return true;

+		return false;

+	}

+

+	public static boolean haveSameNames(Operation op, Operation oper) { // 1

+		return op.getName().equals(oper.getName());

+	}

+

+	private static int getOtherSideUpper(Property attribute) { // 4

+		int upper = 0;

+		for (Property ae : attribute.getAssociation().getMemberEnds()) {

+			if (! ae.equals(attribute)) upper = ae.getUpper();

+		}

+		return upper;

+	}

+

+	private static boolean haveSameDerivedUnionProperties(Property att1, Property att2) { // 1

+		return (att1.isDerivedUnion() == att2.isDerivedUnion());

+	}

+	

+	private static boolean haveSameStaticProperties(Property att1, Property att2) { // 1

+		return (att1.isStatic() == att2.isStatic());

+	}

+

+	private static boolean haveSameOrderedProperties(Property att1, Property att2) { // 1

+		return (att1.isOrdered() == att2.isOrdered());

+	}

+	

+	private static boolean haveSameUniqueProperties(Property att1, Property att2) { // 1

+		return (att1.isUnique() == att2.isUnique());

+	}

+	

+	private static boolean haveSameReadOnlyProperties(Property att1, Property att2) { // 1

+		return (att1.isReadOnly() == att2.isReadOnly());

+	}

+	

+	private static boolean haveSameLeafProperties(Property att1, Property att2) { // 1

+		return (att1.isLeaf() == att2.isLeaf());

+	}

+	

+	private static boolean haveSameDerivedProperties(Property att1, Property att2) { // 1

+		return (att1.isDerived() == att2.isDerived());

+	}

+

+	private static boolean haveSameDefaultValues(Property att1, Property att2) { // 3

+		if ((att1.getDefault() == null) && (att2.getDefault() == null)) return true;

+		if ((att1.getDefault() != null) 

+				&& (att2.getDefault() != null)

+				&& (att1.getDefault().equals(att2.getDefault()))) return true;

+		return false;

+	}

+

+	private static boolean haveSameAggregations(Property att1, Property att2) { // 1

+		return att1.getAggregation().equals(att2.getAggregation());

+	}

+

+	private static boolean haveSameMultiplicities(Property att1, Property att2) { // 1

+		return ((att1.getLower() == att2.getLower()) 

+				&& (att1.getUpper() == att2.getUpper()));

+	}

+

+	private static boolean haveSameVisibilities(Property att1, Property att2) { // 1

+		return att1.getVisibility().equals(att2.getVisibility());

+	}

+

+	private static boolean haveSameNames(Property att1, Property att2) { // 1

+		return att1.getName().equals(att2.getName());

+	}

+

+	private static boolean haveSameType(Property att1, Property att2) { // 3

+		if ((att1.getType() == null) && (att2.getType() == null)) return true;

+		if ((att1.getType() != null) 

+				&& (att2.getType() != null)

+				&& (att1.getType().equals(att2.getType()))) return true;

+		return false;

+	}

+

+	public static ArrayList<Class> getAllSubClasses(Class superClass) { // 12

+		ArrayList<Class> classes = getAllClasses(superClass.getModel());

+		ArrayList<Class> subClasses = new ArrayList<Class>();

+		for (Class cls : classes) {

+			if (cls.getSuperClasses().contains(superClass)) subClasses.add(cls);

+		}

+		return subClasses;

+	}

+

+	public static boolean operationHasParameters(Operation op, // 16

+			ArrayList<Parameter> parameters) {

+		for (Parameter param : parameters) {

+			if (! operationHasParameter(op, param)) return false;

+		}

+		return true;

+	}

+

+	private static boolean operationHasParameter(Operation op, Parameter param) { // 13

+		for (Parameter par : op.getOwnedParameters()) {

+			if (haveSameNames(param, par) 

+					&& haveSameTypes(param, par) 

+					&& haveSameDirections(param, par) 

+					&& haveSameMultiplicities(param, par)) {

+				return true;

+			}

+		}

+		return false;

+	}

+

+	public static Parameter getEqualParameterInOperation(Operation op, // 13

+			Parameter param) {

+		for (Parameter par : op.getOwnedParameters()) {

+			if (haveSameNames(param, par) 

+					&& haveSameTypes(param, par) 

+					&& haveSameDirections(param, par) 

+					&& haveSameMultiplicities(param, par)) {

+				return par;

+			}

+		}

+		return null;

+	}

+

+	public static boolean isInputParameter(Parameter param) { // 3

+		if (param.getDirection().equals(ParameterDirectionKind.IN_LITERAL)) return true;

+		if (param.getDirection().equals(ParameterDirectionKind.INOUT_LITERAL)) return true;

+		return false;

+	}

+	

+	public static boolean oneSubClassInheritsEquallyOperation( // 47

+			Class superClass,

+			Operation operation) {

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		for (Class cls : classes) {

+			for (NamedElement ne: cls.getInheritedMembers()) {

+				if ((! ne.equals(operation))

+						&& (ne instanceof Operation)) {

+					Operation op = (Operation) ne;

+					if (haveSameNames(op, operation)

+							&& haveSameType(op, operation)

+							&& haveSameSignatures(op, operation)) {

+						return true;

+					}

+				}

+			}

+		}

+		return false;

+	}

+

+	public static boolean oneSubClassHasEquallyOperation( // 47

+			Class superClass,

+			Operation operation) {

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		for (Class cls : classes) {

+			for (Operation op : cls.getOwnedOperations()) {

+				if (haveSameNames(op, operation)

+						&& haveSameType(op, operation)

+						&& haveSameSignatures(op, operation)) {

+					return true;

+				}

+			}

+		}

+		return false;

+	}

+

+	public static boolean oneSubClassInheritsEquallyNamedAttribute( // 18

+			Class superClass, 

+			Property attribute) {

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		for (Class cls : classes) {

+			for (NamedElement ne: cls.getInheritedMembers()) {

+				if ((! ne.equals(attribute)) 

+						&& (ne.getName().equals(attribute.getName()))) {

+					return true;

+				}

+			}

+		}

+		return false;

+	}

+

+	public static boolean oneSubClassHasEquallyNamedAttribute( // 18

+			Class superClass, 

+			Property attribute) {

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		for (Class cls : classes) {

+			for (Property attr : cls.getOwnedAttributes()) {

+				if (attr.getName().equals(attribute.getName())) {

+					return true;

+				}

+			}

+		}

+		return false;

+	}

+

+	private static ArrayList<String> getReasonsWhySubClassDoesNotHaveOperation( // 55

+			Class cls, Operation op) {

+		ArrayList<String> reasons = new ArrayList<String>();

+		Operation equalOperation = null;

+		for (Operation oper : cls.getOwnedOperations()) {

+			if (haveSameNames(op, oper)

+					&& haveSameType(op, oper)

+					&& haveSameSignatures(op, oper)) {

+				equalOperation = oper;

+				break;

+			}

+		}

+		if (equalOperation == null) {

+			reasons.add("Class '" + cls.getName() + 

+					"' does not have an operation named '" + op.getName() + 

+					"' and with the same type and parameter list!");

+		} else {

+			if (! haveSameVisibilities(equalOperation, op)) 

+				reasons.add("Class '" + cls.getName() + "' has an operation named '" + 

+						op.getName() + "' of different visibility!");

+			if (! haveSameMultiplicities(equalOperation, op)) 

+				reasons.add("Class '" + cls.getName() + "' has an operation named '" + 

+						op.getName() + "' with different multiplicity!");

+			if (! haveSameLeafProperties(equalOperation, op)) 

+				reasons.add("Class '" + cls.getName() + "' has an operation named '" + 

+						op.getName() + "' with different leaf property!");

+			if (! haveSameStaticProperties(equalOperation, op))

+				reasons.add("Class '" + cls.getName() + "' has an operation named '" + 

+						op.getName() + "' with different static property!");

+			if (! haveSameQueryProperties(equalOperation, op))

+				reasons.add("Class '" + cls.getName() + "' has an operation named '" + 

+						op.getName() + "' with different query property!");

+			if (! haveSameAbstractProperties(equalOperation, op))

+				reasons.add("Class '" + cls.getName() + "' has an operation named '" + 

+						op.getName() + "' with different abstract property!");

+		}

+		return reasons;

+	}

+

+	

+	public static ArrayList<String> getReasonsWhySubClassesDoNotHaveOperation( // 74

+			Class superClass, Operation op) {

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		ArrayList<String> reasons = new ArrayList<String>();

+		for (Class cls : classes) {

+			ArrayList<String> reasonsWhySubClassDoesNotHaveOperation =

+					getReasonsWhySubClassDoesNotHaveOperation(cls, op);

+			if (! reasonsWhySubClassDoesNotHaveOperation.isEmpty()) {

+				reasons.addAll(reasonsWhySubClassDoesNotHaveOperation);

+			}

+		}

+		return reasons;

+	}

+

+

+	private static ArrayList<String> getReasonsWhyClassDoesNotHaveAttribute( // 58

+			Class cls, Property attribute) {

+		ArrayList<String> reasons = new ArrayList<String>();

+		Property equalAttribute = null;

+		for (Property attr : cls.getOwnedAttributes()) {

+			if (haveSameNames(attr, attribute)) {

+				equalAttribute = attr;

+				break;

+			}

+		}

+		if (equalAttribute == null) {

+			reasons.add("Class '" + cls.getName() + 

+					"' does not have an attribute named '" + 

+					attribute.getName() + "'!");

+		} else {

+			if (! haveSameType(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' of different type!");

+			if (! haveSameVisibilities(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' of different visibility!");

+			if (! haveSameMultiplicities(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+					attribute.getName() + "' with different multiplicity!");

+			if (! haveSameAggregations(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' of different aggregation kind!");

+			if (! haveSameDefaultValues(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different default value!");

+			if (! haveSameDerivedProperties(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different derived property!");

+			if (! haveSameLeafProperties(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different leaf property!");

+			if (! haveSameReadOnlyProperties(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different read only property!");

+			if (! haveSameUniqueProperties(equalAttribute, attribute)) 

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different unique property!");

+			if (! haveSameOrderedProperties(equalAttribute, attribute))

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different ordered property!");

+			if (! haveSameStaticProperties(equalAttribute, attribute))

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different static property!");

+			if (! haveSameDerivedUnionProperties(equalAttribute, attribute))

+				reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+						attribute.getName() + "' with different derived union property!");

+			if ((equalAttribute.getAssociation() != null) && (attribute.getAssociation() != null)) {

+				if (getOtherSideUpper(equalAttribute) != getOtherSideUpper(attribute))

+					reasons.add("Class '" + cls.getName() + "' has an attribute named '" + 

+							attribute.getName() + "' as end of an association whose " +

+									"opposite end has an upper multiplicity bound " +

+									"different from " + getOtherSideUpper(attribute) + "!");

+			}

+		}

+		return reasons;

+	}

+

+	public static ArrayList<String> getReasonsWhySubClassesDoNotHaveAttribute( // 77

+			Class superClass, Property attribute) {

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		ArrayList<String> reasons = new ArrayList<String>();

+		for (Class cls : classes) {

+			ArrayList<String> reasonsWhySubClassDoesNotHaveAttribute =

+					getReasonsWhyClassDoesNotHaveAttribute(cls, attribute);

+			if (! reasonsWhySubClassDoesNotHaveAttribute.isEmpty()) {

+				reasons.addAll(reasonsWhySubClassDoesNotHaveAttribute);

+			}

+		}

+		return reasons;

+	}

+	

+	public static boolean classHasEqualOperation(Class cls, Operation op) { // 48

+		if (op.getClass_().equals(cls)) return true;

+		boolean classHasEqualOperation = false;

+		for (Operation oper : cls.getOwnedOperations()) {

+			if (! haveSameNames(op, oper)) continue;

+			if (! haveSameType(op, oper)) continue;

+			if (! haveSameVisibilities(op, oper)) continue;

+			if (! haveSameMultiplicities(op, oper)) continue;

+			if (! haveSameSignatures(op, oper)) continue;

+			if (! haveSameLeafProperties(op, oper)) continue;

+			if (! haveSameQueryProperties(op, oper)) continue;

+			if (! haveSameAbstractProperties(op, oper)) continue;

+			if (! haveSameStaticProperties(op, oper)) continue;

+			classHasEqualOperation = true;

+			break;

+		}		

+		return classHasEqualOperation;

+	}

+

+	private static boolean classHasEqualAttribute(Class cls, Property attribute) { // 41

+		if (attribute.getClass_().equals(cls)) return true;

+		boolean classHasEqualAttribute = false;

+		for (Property attr : cls.getOwnedAttributes()) {

+			if (! haveSameNames(attr, attribute)) continue;

+			if (! haveSameType(attr, attribute)) continue;

+			if (! haveSameVisibilities(attr, attribute)) continue;

+			if (! haveSameMultiplicities(attr, attribute)) continue;

+			if (! haveSameAggregations(attr, attribute)) continue;

+			if (! haveSameDefaultValues(attr, attribute)) continue;

+			if (! haveSameDerivedProperties(attr, attribute)) continue;

+			if (! haveSameLeafProperties(attr, attribute)) continue;

+			if (! haveSameReadOnlyProperties(attr, attribute)) continue;

+			if (! haveSameUniqueProperties(attr, attribute)) continue;

+			if (! haveSameOrderedProperties(attr, attribute)) continue;

+			if (! haveSameStaticProperties(attr, attribute)) continue;

+			if (! haveSameDerivedUnionProperties(attr, attribute)) continue;

+			if ((attr.getAssociation() != null) && (attribute.getAssociation() != null)) {

+				if (getOtherSideUpper(attr) != getOtherSideUpper(attribute)) continue;

+			}

+			classHasEqualAttribute = true;

+			break;

+		}

+		return classHasEqualAttribute;

+	}

+

+	public static boolean subClassesHaveAttribute(Class superClass, Property attribute) { // 60

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		boolean eachSubclassHasAttribute = true;

+		for (Class cls : classes) {

+			if (! classHasEqualAttribute(cls, attribute)) {

+				eachSubclassHasAttribute = false;

+				break;

+			}

+		}

+		return eachSubclassHasAttribute;

+	}

+	

+	public static boolean subClassesHaveOperation(Class superClass, Operation operation) { // 67

+		ArrayList<Class> classes = getAllSubClasses(superClass);

+		boolean eachSubclassHasAttribute = true;

+		for (Class cls : classes) {

+			if (! classHasEqualOperation(cls, operation)) {

+				eachSubclassHasAttribute = false;

+				break;

+			}

+		}

+		return eachSubclassHasAttribute;

+	}

+

+	public static List<Association> getAssociations(Class cl) { // 14

+		ArrayList<Association> allAssociations = getAllAssociations(cl.getModel());

+		ArrayList<Association> associations = new ArrayList<Association>();

+		for (Association association : allAssociations) {

+			for (Property associationEnd : association.getMemberEnds()) {

+				if (associationEnd.getType().equals(cl))

+					if (! associations.contains(association)) associations.add(association);

+			}

+		}		

+		return associations;

+	}

+

+	public static boolean isUsedAsFurtherAttributeType(Class cl) { // 12

+		ArrayList<Property> attributes = getAllAttributes(cl.getModel());

+		for (Property attribute : attributes) {

+			if (attribute.getType() != null 

+					&& attribute.getType().equals(cl)

+					&& (attribute.getAssociation() == null)) return true;

+		}

+		return false;

+	}

+

+	public static ArrayList<Class> getOtherAssociatedClasses(Class cl) { // 20

+		ArrayList<Class> classes = new ArrayList<Class>();

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		for (Association assoc : associations) {

+			for (Property assocend : assoc.getMemberEnds()) {

+				if (assocend.getType().equals(cl)) {

+					classes.addAll(getOtherAssociationEndsTypeClasses(assocend));

+				}

+			}

+		}

+		return classes;

+	}

+

+}

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAllInterfaces.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAllInterfaces.java
new file mode 100644
index 0000000..064276d
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAllInterfaces.java
@@ -0,0 +1,92 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.uml2.uml.Interface;

+import org.eclipse.uml2.uml.PackageableElement;

+

+import comrel.ComrelFactory;

+import comrel.MultiOutputPort;

+import comrel.SingleInputPort;

+import comrel.extensions.IMultiFeatureHelper;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetAllInterfaces implements IMultiFeatureHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort package_;

+	private MultiOutputPort interface_s;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetAllInterfaces() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		package_ = factory.createSingleInputPort();

+		package_.setName("package_");

+		package_.setType(org.eclipse.uml2.uml.Package.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		interface_s = factory.createMultiOutputPort();

+		interface_s.setName("interface_s");

+		interface_s.setType(org.eclipse.uml2.uml.Interface.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleInputPort getInputPort() {

+		return package_;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public MultiOutputPort getOutputPort() {

+		return interface_s;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		org.eclipse.uml2.uml.Package in = (org.eclipse.uml2.uml.Package) package_.getValue();

+		EList<org.eclipse.uml2.uml.Interface> out = new BasicEList<org.eclipse.uml2.uml.Interface>();

+		

+		// TODO implement logic (fill 'out')

+		for (PackageableElement pe : in.getPackagedElements()) {

+			if (pe instanceof org.eclipse.uml2.uml.Interface) {

+				out.add((Interface) pe);

+			}

+		}

+		

+		interface_s.getValue().addAll(out);

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAssociatedClass.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAssociatedClass.java
new file mode 100644
index 0000000..79eb947
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetAssociatedClass.java
@@ -0,0 +1,222 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.common.util.TreeIterator;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.uml2.uml.Association;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Model;

+import org.eclipse.uml2.uml.Property;

+import org.eclipse.uml2.uml.VisibilityKind;

+

+import comrel.ComrelFactory;

+import comrel.SingleInputPort;

+import comrel.SingleOutputPort;

+import comrel.extensions.ISingleFeatureHelper;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetAssociatedClass implements ISingleFeatureHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort class_in;

+	private SingleOutputPort class_out;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetAssociatedClass() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		class_in = factory.createSingleInputPort();

+		class_in.setName("class_in");

+		class_in.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		class_out = factory.createSingleOutputPort();

+		class_out.setName("class_out");

+		class_out.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleInputPort getInputPort() {

+		return class_in;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleOutputPort getOutputPort() {

+		return class_out;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		org.eclipse.uml2.uml.Class in = (org.eclipse.uml2.uml.Class) class_in.getValue();

+		org.eclipse.uml2.uml.Class out = null;

+		

+		List<Class> associatedClasses = getOne2OneAssociatedClasses(in);

+		out = associatedClasses.get(0);

+		

+		class_out.setValue(out);

+	}

+	

+	public static List<Class> getOne2OneAssociatedClasses(Class cl) {

+		ArrayList<Class> result = new ArrayList<Class>();

+		ArrayList<Association> incomingAssociations = 

+									getIncomingAssociations(cl);

+		ArrayList<Association> outgoingAssociations = 

+									getOutgoingAssociations(cl);

+		ArrayList<Class> classesFromIncomingAssociations = 

+			getOtherClassesFromAssociations(cl, incomingAssociations);

+		ArrayList<Class> classesFromOutgoingAssociations = 

+				getOtherClassesFromAssociations(cl, outgoingAssociations);

+		ArrayList<Class> associatedClasses = new ArrayList<Class>();

+		for (Class associatedClass : classesFromIncomingAssociations) {

+			if (classesFromOutgoingAssociations.contains(associatedClass))

+				associatedClasses.add(associatedClass);

+		}

+		for (Class associatedClass : associatedClasses) {

+			if (incomingAssociationHasOne2OneMultiplicityAndIsPublic

+					(cl, incomingAssociations, associatedClass)

+					&& outgoingAssociationHasOne2OneMultiplicityAndIsPublic

+						(cl, outgoingAssociations, associatedClass)){

+				result.add(associatedClass);

+			}

+		}

+		return result;

+	}

+	

+	private static boolean outgoingAssociationHasOne2OneMultiplicityAndIsPublic(

+			Class cl,

+			ArrayList<Association> outgoingAssociations, 

+			Class associatedClass) {

+		for (Association assoc : outgoingAssociations) {

+			for (Property ae1 : assoc.getMemberEnds()) {

+				if (ae1.getType().equals(cl)) {

+					for (Property ae2 : assoc.getMemberEnds()) {

+						if (ae2.getType().equals(associatedClass)) {

+							if ((ae2.getLower() == 1) 

+									&& (ae2.getUpper() == 1)

+									&& (ae2.getVisibility().equals(VisibilityKind.PUBLIC_LITERAL)))

+								return true;

+						}

+					}

+				}

+			}

+		}

+		return false;

+	}

+	

+	private static boolean incomingAssociationHasOne2OneMultiplicityAndIsPublic(

+			Class cl, 

+			ArrayList<Association> incomingAssociations, 

+			Class associatedClass) {

+		for (Association assoc : incomingAssociations) {

+			for (Property ae1 : assoc.getMemberEnds()) {

+				if (ae1.getType().equals(cl)) {

+					for (Property ae2 : assoc.getMemberEnds()) {

+						if (ae2.getType().equals(associatedClass)) {

+							if ((ae1.getLower() == 1) 

+									&& (ae1.getUpper() == 1)

+									&& (ae2.getVisibility().equals(VisibilityKind.PUBLIC_LITERAL)))

+								return true;

+						}

+					}

+				}

+			}

+		}

+		return false;

+	}

+	

+	private static ArrayList<Class> getOtherClassesFromAssociations(Class cl, ArrayList<Association> incomingAssociations) {

+		ArrayList<Class> result = new ArrayList<Class>();

+		for (Association assoc : incomingAssociations) {

+			for (Property associationEnd1 : assoc.getMemberEnds()) {

+				if (associationEnd1.getType().equals(cl)){

+					for (Property associationEnd2 : assoc.getMemberEnds()) {

+						if ((! associationEnd1.equals(associationEnd2)) 

+								&& associationEnd2.getType() instanceof Class

+								&& (! associationEnd2.getType().equals(cl))) {

+							result.add((Class) associationEnd2.getType());

+						}

+					}

+				}

+			}

+		}

+		return result;

+	}

+	

+	private static ArrayList<Association> getIncomingAssociations(Class cl) {

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		ArrayList<Association> result = new ArrayList<Association>();

+		for (Association association : associations) {

+			for (Property associationEnd : association.getMemberEnds()) {

+				if (associationEnd.getType().equals(cl) && associationEnd.isNavigable())

+					result.add(association);

+			}

+		}		

+		return result;

+	}

+	

+	private static ArrayList<Association> getOutgoingAssociations(Class cl) {

+		ArrayList<Association> associations = getAllAssociations(cl.getModel());

+		ArrayList<Association> result = new ArrayList<Association>();

+		for (Association association : associations) {

+			for (Property associationEnd1 : association.getMemberEnds()) {

+				if (associationEnd1.getType().equals(cl)){

+					for (Property associationEnd2 : association.getMemberEnds()) {

+						if ((! associationEnd1.equals(associationEnd2)) 

+								&& associationEnd2.isNavigable()) {

+							result.add(association);

+						}

+					}

+				}

+			}

+		}		

+		return result;

+	}

+	

+	private static ArrayList<Association> getAllAssociations(Model model) {

+		ArrayList<Association> associations = new ArrayList<Association>();

+		TreeIterator<EObject> iter = model.eResource().getAllContents();

+		while (iter.hasNext()) {

+			EObject eObject = iter.next();

+			if (eObject instanceof Association) {

+				associations.add((Association) eObject);

+			}			

+		}

+		return associations;

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetClassName.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetClassName.java
new file mode 100644
index 0000000..857b87b
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetClassName.java
@@ -0,0 +1,82 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import comrel.extensions.ISingleFeatureHelper;

+import comrel.ComrelFactory;

+import comrel.SingleInputPort;

+import comrel.SingleOutputPort;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetClassName implements ISingleFeatureHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort class_in;

+	private SingleOutputPort string_out;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetClassName() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		class_in = factory.createSingleInputPort();

+		class_in.setName("class_in");

+		class_in.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		string_out = factory.createSingleOutputPort();

+		string_out.setName("string_out");

+		string_out.setType(String.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleInputPort getInputPort() {

+		return class_in;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleOutputPort getOutputPort() {

+		return string_out;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		org.eclipse.uml2.uml.Class in = (org.eclipse.uml2.uml.Class) class_in.getValue();

+		String out = null;

+		

+		out = in.getName();

+		

+		string_out.setValue(out);

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetFirstClass.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetFirstClass.java
new file mode 100644
index 0000000..870eb12
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetFirstClass.java
@@ -0,0 +1,99 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+

+import comrel.extensions.ISingleFilterHelper;

+import comrel.MultiInputPort;

+import comrel.ComrelFactory;

+import comrel.SingleOutputPort;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetFirstClass implements ISingleFilterHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private MultiInputPort class_s;

+	private SingleOutputPort class_;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetFirstClass() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		class_s = factory.createMultiInputPort();

+		class_s.setName("class_s");

+		class_s.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		class_ = factory.createSingleOutputPort();

+		class_.setName("class_");

+		class_.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public MultiInputPort getInputPort() {

+		return class_s;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleOutputPort getOutputPort() {

+		return class_;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		EList<org.eclipse.uml2.uml.Class> in = setInput();

+		org.eclipse.uml2.uml.Class out = null;

+		

+		// TODO implement logic (replace 'null')

+		out = in.get(0);

+		

+		class_.setValue(out);

+	}

+

+	/**

+	 * Helper method for extracting input to Java objects. 

+	 * @generated

+	 */

+	private EList<org.eclipse.uml2.uml.Class> setInput() {

+		EList<Object> origin = class_s.getValue();

+		EList<org.eclipse.uml2.uml.Class> in = new BasicEList<org.eclipse.uml2.uml.Class>();

+		for (Object o : origin) {

+			in.add((org.eclipse.uml2.uml.Class) o);

+		}

+		return in;

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOperationsHavingParameters.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOperationsHavingParameters.java
new file mode 100644
index 0000000..1b3d845
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOperationsHavingParameters.java
@@ -0,0 +1,62 @@
+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import java.util.ArrayList;

+

+import org.eclipse.emf.refactor.refactorings.uml24.compositional.UmlUtils;

+import org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Operation;

+import org.eclipse.uml2.uml.Parameter;

+

+import comrel.ComrelFactory;

+import comrel.MultiOutputPort;

+import comrel.SingleInputPort;

+import comrel.extensions.IMultiFeatureHelper;

+

+public class GetOperationsHavingParameters implements IMultiFeatureHelper {

+	

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort parameterList;

+	private MultiOutputPort operations;

+

+	public GetOperationsHavingParameters() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	private void initInputPort() {

+		parameterList = factory.createSingleInputPort();

+		parameterList.setName("parameterList");

+		parameterList.setType(UmlParameterList.class);

+	}

+

+	private void initOutputPort(){

+		operations = factory.createMultiOutputPort();

+		operations.setName("operations");

+		operations.setType(org.eclipse.uml2.uml.Operation.class);

+	}

+	

+	@Override

+	public SingleInputPort getInputPort() {

+		return parameterList;

+	}

+

+	@Override

+	public MultiOutputPort getOutputPort() {

+		return operations;

+	}

+

+	@Override

+	public void run() {

+		ArrayList<Parameter> parameters = 

+				((UmlParameterList) parameterList.getValue()).getUmlParameters();

+		Operation owningOperation = parameters.get(0).getOperation();

+		Class owningClass = owningOperation.getClass_();

+		for (Operation op : owningClass.getOwnedOperations()) {

+			if (UmlUtils.operationHasParameters(op, parameters)) {

+				operations.getValue().add(op);

+			}

+		}

+	}

+

+}

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributes.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributes.java
new file mode 100644
index 0000000..d9c7ff7
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributes.java
@@ -0,0 +1,86 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+

+import comrel.extensions.IMultiFeatureHelper;

+import comrel.ComrelFactory;

+import comrel.SingleInputPort;

+import comrel.MultiOutputPort;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetOwnedAttributes implements IMultiFeatureHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort class_;

+	private MultiOutputPort property_s;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetOwnedAttributes() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		class_ = factory.createSingleInputPort();

+		class_.setName("class_");

+		class_.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		property_s = factory.createMultiOutputPort();

+		property_s.setName("property_s");

+		property_s.setType(org.eclipse.uml2.uml.Property.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleInputPort getInputPort() {

+		return class_;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public MultiOutputPort getOutputPort() {

+		return property_s;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		org.eclipse.uml2.uml.Class in = (org.eclipse.uml2.uml.Class) class_.getValue();

+		EList<org.eclipse.uml2.uml.Property> out = new BasicEList<org.eclipse.uml2.uml.Property>();

+		

+		// TODO implement logic (fill 'out')

+		out = in.getOwnedAttributes();

+		

+		property_s.getValue().addAll(out);

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributesNoAssocEnds.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributesNoAssocEnds.java
new file mode 100644
index 0000000..db1335b
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedAttributesNoAssocEnds.java
@@ -0,0 +1,88 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.uml2.uml.Property;

+

+import comrel.ComrelFactory;

+import comrel.MultiOutputPort;

+import comrel.SingleInputPort;

+import comrel.extensions.IMultiFeatureHelper;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetOwnedAttributesNoAssocEnds implements IMultiFeatureHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort class_;

+	private MultiOutputPort property_s;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetOwnedAttributesNoAssocEnds() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		class_ = factory.createSingleInputPort();

+		class_.setName("class_");

+		class_.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		property_s = factory.createMultiOutputPort();

+		property_s.setName("property_s");

+		property_s.setType(org.eclipse.uml2.uml.Property.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleInputPort getInputPort() {

+		return class_;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public MultiOutputPort getOutputPort() {

+		return property_s;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		org.eclipse.uml2.uml.Class in = (org.eclipse.uml2.uml.Class) class_.getValue();

+		EList<org.eclipse.uml2.uml.Property> out = new BasicEList<org.eclipse.uml2.uml.Property>();

+		for (Property attr : in.getOwnedAttributes()) {

+			if (attr.getAssociation() == null) {

+				out.add(attr);

+			}

+		}

+		property_s.getValue().addAll(out);

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedOperations.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedOperations.java
new file mode 100644
index 0000000..ef31375
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetOwnedOperations.java
@@ -0,0 +1,86 @@
+/**

+ * <copyright>

+ * </copyright>

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+

+import comrel.extensions.IMultiFeatureHelper;

+import comrel.ComrelFactory;

+import comrel.SingleInputPort;

+import comrel.MultiOutputPort;

+

+/**

+ * Helper class for synchronizing ports in 

+ * composite model refactorings specified in CoMReL.

+ * @generated

+ */

+public class GetOwnedOperations implements IMultiFeatureHelper {

+

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort class_;

+	private MultiOutputPort operation_s;

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public GetOwnedOperations() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	/**

+	 * Method for setting the input port.

+	 * @generated

+	 */

+	private void initInputPort() {

+		class_ = factory.createSingleInputPort();

+		class_.setName("class_");

+		class_.setType(org.eclipse.uml2.uml.Class.class);

+	}

+	

+	/**

+	 * Method for setting the output port.

+	 * @generated

+	 */

+	private void initOutputPort(){

+		operation_s = factory.createMultiOutputPort();

+		operation_s.setName("operation_s");

+		operation_s.setType(org.eclipse.uml2.uml.Operation.class);

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public SingleInputPort getInputPort() {

+		return class_;

+	}

+

+	/**

+	 * @generated

+	 */

+	@Override

+	public MultiOutputPort getOutputPort() {

+		return operation_s;

+	}

+	

+	/**

+	 * @generated

+	 */

+	@Override

+	public void run() {

+		org.eclipse.uml2.uml.Class in = (org.eclipse.uml2.uml.Class) class_.getValue();

+		EList<org.eclipse.uml2.uml.Operation> out = new BasicEList<org.eclipse.uml2.uml.Operation>();

+

+		// TODO implement logic (fill 'out')

+		out = in.getOwnedOperations();

+		

+		operation_s.getValue().addAll(out);

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetParametersEqualToParameters.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetParametersEqualToParameters.java
new file mode 100644
index 0000000..7cba4d2
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/compositional/helper/GetParametersEqualToParameters.java
@@ -0,0 +1,70 @@
+package org.eclipse.emf.refactor.refactorings.uml24.compositional.helper;

+

+import java.util.ArrayList;

+

+import org.eclipse.emf.refactor.refactorings.uml24.compositional.UmlUtils;

+import org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Operation;

+import org.eclipse.uml2.uml.Parameter;

+

+import comrel.ComrelFactory;

+import comrel.MultiOutputPort;

+import comrel.SingleInputPort;

+import comrel.extensions.IMultiFeatureHelper;

+

+

+public class GetParametersEqualToParameters implements IMultiFeatureHelper {

+	

+	final ComrelFactory factory = ComrelFactory.eINSTANCE;

+	private SingleInputPort parameterList;

+	private MultiOutputPort parameters;

+

+	public GetParametersEqualToParameters() {

+		initInputPort();

+		initOutputPort();

+	}

+	

+	private void initInputPort() {

+		parameterList = factory.createSingleInputPort();

+		parameterList.setName("parameterList");

+		parameterList.setType(UmlParameterList.class);

+	}

+

+	private void initOutputPort(){

+		parameters = factory.createMultiOutputPort();

+		parameters.setName("parameters");

+		parameters.setType(org.eclipse.uml2.uml.Parameter.class);

+	}

+	

+	@Override

+	public SingleInputPort getInputPort() {

+		return parameterList;

+	}

+

+	@Override

+	public MultiOutputPort getOutputPort() {

+		return parameters;

+	}

+

+	@Override

+	public void run() {

+		ArrayList<Parameter> parametersList = 

+				((UmlParameterList) parameterList.getValue()).getUmlParameters();

+		Operation owningOperation = parametersList.get(0).getOperation();

+		Class owningClass = owningOperation.getClass_();

+		ArrayList<Operation> operations = new ArrayList<Operation>();

+		for (Operation op : owningClass.getOwnedOperations()) {

+			if (UmlUtils.operationHasParameters(op, parametersList)) {

+				operations.add(op);

+			}

+		}

+		for (Operation op : operations) {

+			for (Parameter param : parametersList) {

+				Parameter equalParameter = UmlUtils.getEqualParameterInOperation(op, param);

+				parameters.getValue().add(equalParameter);

+			}

+		}

+	}

+

+}

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController.java
new file mode 100644
index 0000000..1c652ed
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringController.java
@@ -0,0 +1,202 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringController.javajet,v 1.3 2011/01/21 13:08:06 tarendt Exp $

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.refactor.refactoring.core.Refactoring;

+import org.eclipse.emf.refactor.refactoring.interfaces.IController;

+import org.eclipse.emf.refactor.refactoring.interfaces.IDataManagement;

+import org.eclipse.emf.refactor.refactoring.runtime.ltk.LtkEmfRefactoringProcessorAdapter;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Operation;

+import org.eclipse.uml2.uml.Package;

+import org.eclipse.uml2.uml.Parameter;

+import org.eclipse.uml2.uml.Property;

+import org.eclipse.uml2.uml.UMLFactory;

+

+public final class RefactoringController implements IController{

+

+	/**

+	 * Refactoring supported by the controller.

+	 * @generated

+	 */

+	private Refactoring parent;

+	

+	/**

+	 * DataManagement object of the model refactoring.

+	 * @generated

+	 */

+	private RefactoringDataManagement dataManagement = 

+									new RefactoringDataManagement();

+	

+	/**

+	 * Invocation context of the model refactoring.

+	 * @generated

+	 */	

+	private List<EObject> selection = new ArrayList<EObject>();

+	

+	/**

+	 * Ltk RefactoringProcessor of the model refactoring.

+	 * @generated

+	 */

+	private InternalRefactoringProcessor refactoringProcessor = null;

+	

+	/**

+	 * Gets the Refactoring supported by the controller.

+	 * @return Refactoring supported by the controller.

+	 * @see org.eclipse.emf.refactor.common.core.IController#getParent()

+	 * @generated

+	 */

+	@Override

+	public Refactoring getParent() {

+		return this.parent;

+	}

+	

+	/**

+	 * Sets the Refactoring supported by the controller.

+	 * @param emfRefactoring Refactoring supported by the controller.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)

+	 * @generated

+	 */

+	@Override

+	public void setParent(Refactoring emfRefactoring) {

+		this.parent = emfRefactoring;

+	}

+	

+	/**

+	 * Returns the DataManagement object of the model refactoring.

+	 * @return DataManagement object of the model refactoring.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * getDataManagementObject()

+	 * @generated

+	 */

+	@Override

+	public IDataManagement getDataManagementObject() {

+		return this.dataManagement;

+	}

+

+	/**

+	 * Returns the ltk RefactoringProcessor of the model refactoring.

+	 * @return Ltk RefactoringProcessor of the model refactoring.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * getLtkRefactoringProcessor()

+	 * @generated

+	 */

+	@Override

+	public RefactoringProcessor getLtkRefactoringProcessor() {

+		return this.refactoringProcessor;

+	}

+	

+	/**

+	 * Sets the selected EObject (invocation context of the model refactoring).

+	 * @param selection Invocation context of the model refactoring.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * setSelection(java.util.List)

+	 * @generated

+	 */

+	@Override

+	public void setSelection(List<EObject> selection) {

+		this.selection = selection;

+		this.refactoringProcessor = 

+				new InternalRefactoringProcessor(this.selection);

+	}	

+	

+	/**

+	 * Returns a Runnable object that executes the model refactoring.

+	 * @return Runnable object that executes the model refactoring.

+	 * @generated

+	 */

+	private Runnable applyRefactoring() {

+		return new Runnable() {				

+			/**

+			 * @see java.lang.Runnable#run()

+			 * @generated

+			 */

+			@Override

+			public void run() {

+				ArrayList<org.eclipse.uml2.uml.Parameter> selectedEObjects = 

+					((UmlParameterList) dataManagement.

+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getUmlParameters();

+				String className =

+					(String) dataManagement.getInPortByName("className").getValue();

+				// execute: prepare contextual elements

+				Operation owningOperation = selectedEObjects.get(0).getOperation();

+				Class owningClass = owningOperation.getClass_();

+				Package owningPackage = owningClass.getPackage();

+				UMLFactory umlFactory = UMLFactory.eINSTANCE;

+				// execute: create class named as specified in 'className'

+				Class newClass = umlFactory.createClass();

+				newClass.setName(className);

+				owningPackage.getPackagedElements().add(newClass);

+				// execute: create attributes in new class from parameter list

+				for (Parameter param : selectedEObjects) {

+					Property newAttribute = umlFactory.createProperty();

+					if (param.getName() != null) {

+						newAttribute.setName(param.getName());

+					}

+					if (param.getType() != null) {

+						newAttribute.setType(param.getType());

+					}

+					newAttribute.setLower(param.getLower());

+					newAttribute.setUpper(param.getUpper());

+					newClass.getOwnedAttributes().add(newAttribute);

+				}

+			}

+		};

+	}

+

+	/**

+	 * Internal class for providing an instance of a LTK RefactoringProcessor 

+	 * used for EMF model refactorings.	 

+	 * @generated

+	 */

+	public final class InternalRefactoringProcessor extends 

+									LtkEmfRefactoringProcessorAdapter {

+

+		/**

+		 * Constructor using the invocation context of the model refactoring.

+		 * @param selection Invocation context of the model refactoring.

+		 * @generated

+		 */

+		private InternalRefactoringProcessor(List<EObject> selection){

+				super(getParent(), selection, applyRefactoring());				

+		}

+			

+		/**

+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#

+	 	 * checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)

+		 * @generated

+		 */	

+		@Override

+		public RefactoringStatus checkInitialConditions(){

+				RefactoringStatus result = new RefactoringStatus();

+				// This helper refactoring has no checks

+				return result;

+		}

+		

+		/**

+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#

+	     * checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, 

+	     * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)

+		 * @generated

+		 */	

+		@Override

+		public RefactoringStatus checkFinalConditions(){

+				RefactoringStatus result = new RefactoringStatus();

+				// This helper refactoring has no checks

+				return result;

+		}

+		

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringDataManagement.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringDataManagement.java
new file mode 100644
index 0000000..2384b96
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringDataManagement.java
@@ -0,0 +1,62 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringDataManagement.javajet,v 1.2 2011/01/21 13:08:06 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.refactor.refactoring.core.Port;

+import org.eclipse.emf.refactor.refactoring.runtime.DataManagementAdapter;

+import org.eclipse.uml2.uml.Parameter;

+

+/**

+ * Class for specific data concerning a model refactoring.

+ * @generated

+ */

+public class RefactoringDataManagement extends DataManagementAdapter {

+

+	protected final String SELECTEDEOBJECT = "selectedEObject";

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public RefactoringDataManagement() {

+		this.addPorts();

+	}

+	

+	/**

+	 * Adds the ports to the data management used for parameter passing.

+	 * @generated

+	 */

+	private void addPorts(){

+		this.inPorts.add

+			(new Port<UmlParameterList>

+				(SELECTEDEOBJECT, UmlParameterList.class));

+		this.inPorts.add

+			(new Port<String>

+				("className", String.class, "unspecified"));		

+	}

+	

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.IDataManagement#

+	 * preselect(java.util.List)

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void preselect(List<EObject> selection) {

+		ArrayList<Parameter> umlParameters = new ArrayList<Parameter>();

+		for (EObject eObject : selection) {

+			if (eObject instanceof Parameter) umlParameters.add((Parameter) eObject);

+		}		

+		getInPortByName(SELECTEDEOBJECT).setValue(new UmlParameterList(umlParameters));

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringGuiHandler.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringGuiHandler.java
new file mode 100644
index 0000000..57b43c7
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringGuiHandler.java
@@ -0,0 +1,78 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringGuiHandler.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.refactor.refactoring.core.Refactoring;

+import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;

+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;

+

+/**

+ * Class used for specifying gui topics of a specific model refactoring.

+ * @generated

+ */

+public class RefactoringGuiHandler implements IGuiHandler {

+

+	/**

+	 * Refactoring supported by the GuiHandler.

+	 * @generated

+	 */

+	Refactoring parent;

+	

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#getParent()

+	 * @generated

+	 */

+	@Override

+	public Refactoring getParent() {

+		return parent;

+	}

+

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#

+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)

+	 * @generated

+	 */

+	@Override

+	public void setParent(Refactoring emfRefactoring) {

+		this.parent = emfRefactoring;

+	}

+		

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#show()

+	 * @generated

+	 */

+	@Override

+	public RefactoringWizard show() {

+		return new org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.RefactoringWizard

+		((RefactoringController)this.parent.getController());

+	}

+	

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#

+	 * showInMenu(java.util.List)

+	 * @generated

+	 */

+	@Override

+	public boolean showInMenu(List<EObject> selection) {

+		if (selection.size() <= 1) return false;

+		boolean onlyParameters = true;

+		for(EObject o:selection){

+			if(null != o){

+				if (! (o instanceof org.eclipse.uml2.uml.Parameter)) {

+					onlyParameters = false;

+					break;

+				}

+			} 

+		}

+		return onlyParameters;

+	}

+

+}	

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest.java
new file mode 100644
index 0000000..f788a75
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringTest.java
@@ -0,0 +1,97 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringTest.javajet,v 1.2 2011/03/16 16:14:21 tarendt Exp $

+ */

+ 

+package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import java.io.File;

+import java.io.FilenameFilter;

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.refactor.refactoring.core.Refactoring;

+import org.eclipse.emf.refactor.refactoring.runtime.test.JUnitTestCaseAdapter;

+import org.eclipse.uml2.uml.UMLPackage;

+import org.junit.Test;

+import org.junit.runner.RunWith;

+import org.junit.runners.Parameterized;

+import org.junit.runners.Parameterized.Parameters;

+

+/**

+ * Class used for running individual JUnit test cases

+ * of the specific model refactoring.

+ * @generated

+ */

+@RunWith(value = Parameterized.class)

+public class RefactoringTest extends JUnitTestCaseAdapter {

+

+	/**

+	 * Number of test cases.

+	 * @generated

+	 */

+	private String number;

+

+	/**

+	 * Constructor implementation.

+	 * @param number Number of test cases.

+	 * @generated

+	 */

+	public RefactoringTest(String number) throws IOException {

+		super("de.unimarburg.swt.refactorings.uml.createclasswithattributesfromparameterlist",

+			"uml",

+			new File(".").getCanonicalPath(),

+			new Refactoring(null, "", "http://www.eclipse.org/uml2/4.0.0/UML", new RefactoringGuiHandler(), new RefactoringController()));

+		register(UMLPackage.eINSTANCE);

+		this.number = number;

+	}

+	

+	@Parameters

+	public static Collection<Object[]> data() {

+		List<String> testNumbers = getTestNumbers();

+		Object[][] data = new Object[testNumbers.size()][1];

+		for (int i = 0; i < testNumbers.size(); i++) {

+			data[i][0] = testNumbers.get(i);

+		}

+		return Arrays.asList(data);

+	}

+	

+	private static List<String> getTestNumbers() {

+		List<String> numbers = new ArrayList<String>();

+		try {

+			String pathPrefix = new File(".").getCanonicalPath() + "/tests/" + "de.unimarburg.swt.refactorings.uml.createclasswithattributesfromparameterlist";

+			File testCaseDir = new File(pathPrefix,"/");

+			FilenameFilter filter = new FilenameFilter() {

+				public boolean accept(File dir, String name) {

+					return name.startsWith("test_");

+				}

+			};

+			String[] children = testCaseDir.list(filter);

+			if (children != null) {

+				for (String child : children) {

+					numbers.add(

+							child.substring(

+									child.indexOf('_') + 1));

+					}

+				}

+			} catch (IOException e) {

+				e.printStackTrace();

+			}

+		return numbers;

+	}

+

+	/**

+	 * Runs the test.

+	 */	

+	@Test

+	public void test() {

+		System.out.println("running test test_" + number);

+		executeTestCase(number);

+	}	

+	

+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizard.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizard.java
new file mode 100644
index 0000000..469baee
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizard.java
@@ -0,0 +1,40 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringWizard.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import org.eclipse.emf.refactor.refactoring.interfaces.IController;

+import org.eclipse.emf.refactor.refactoring.runtime.ltk.ui.AbstractRefactoringWizard;

+

+/**

+ * Class used for providing an implementation of an LTK

+ * RefactoringWizard in EMF Refactor.

+ * @generated

+ */

+public class RefactoringWizard 

+    extends AbstractRefactoringWizard {

+		

+	/**

+	 * Default constructor implementation.

+	 * @param controller Controller of the EMF model refactoring.

+	 * @generated

+	 */					

+	public RefactoringWizard(IController controller) {

+		super(controller);

+	}

+

+	/**

+	 * @see org.eclipse.ltk.ui.refactoring.RefactoringWizard#

+	 * addUserInputPages()

+	 * @generated

+	 */

+	@Override

+	protected void addUserInputPages() {

+		addPage(new RefactoringWizardPage

+			(controller.getParent().getName(), (RefactoringController)controller));

+	}

+

+}

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizardPage.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizardPage.java
new file mode 100644
index 0000000..edeabd3
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/RefactoringWizardPage.java
@@ -0,0 +1,124 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringWizardPage.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import java.util.List;

+

+import org.eclipse.emf.refactor.refactoring.runtime.ltk.ui.AbstractRefactoringWizard;

+import org.eclipse.emf.refactor.refactoring.runtime.ui.IInputPageButtonCreator;

+import org.eclipse.emf.refactor.refactoring.runtime.ui.InputPageButtonLoader;

+import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Event;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Listener;

+import org.eclipse.swt.widgets.Text;

+

+/**

+ * Class for setting model refactoring specific parameters

+ * by the user.

+ * @generated

+ */

+public class RefactoringWizardPage extends 

+				UserInputWizardPage implements Listener {

+	

+	/**

+	 * Controller of the EMF model refactoring.

+	 * @generated

+	 */			

+	private final RefactoringController controller;

+	

+	/**

+	 * Label for each parameter.

+	 * @generated

+	 */	

+	private Label classNameLabel;

+	

+	/**

+	 * TextField for each parameter.

+	 * @generated

+	 */

+	private Text classNameWidget;

+

+	/**

+	 * Default constructor using a name and the controller of the 

+	 * EMF model refactoring.

+	 * @param name Name of the WizardPage.

+	 * @param controller Controller of the EMF model refactoring.

+	 * @generated

+	 */

+	public RefactoringWizardPage

+		(String name, RefactoringController controller) {

+		super(name);

+		this.controller = controller;

+	}

+

+	/**

+	 * @see org.eclipse.swt.widgets.Listener#

+	 * handleEvent(org.eclipse.swt.widgets.Event)

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void handleEvent(Event event) {		

+		getWizard().getContainer().updateButtons();

+				

+		if (classNameWidget != null) {

+			String className = classNameWidget.getText();

+			if (!className.isEmpty()){

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("className").

+						setValue(className);

+			} else {

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("className").

+						setValue("unspecified");

+			}

+		}

+

+	}

+	

+	/**

+	 * @see org.eclipse.jface.dialogs.IDialogPage#

+	 * createControl(org.eclipse.swt.widgets.Composite)

+	 * @generated

+	 */

+	@Override

+	public void createControl(Composite parent) {

+		Composite composite = new Composite(parent, SWT.NONE);

+		GridLayout gl = new GridLayout();

+		gl.numColumns = 2;

+		GridData gd = new GridData(GridData.FILL_HORIZONTAL);

+		composite.setLayout(gl);

+			

+		

+		classNameLabel = new Label(composite, SWT.NONE);

+		classNameLabel.setText("Name of the new class: ");

+		classNameLabel.setEnabled(true);

+		

+		classNameWidget = new Text(composite, SWT.BORDER);

+		classNameWidget.setToolTipText

+				("value of variable 'className'");

+		classNameWidget.setEnabled(true);

+		classNameWidget.setLayoutData(gd);

+		classNameWidget.addListener(SWT.Modify, this);

+		

+		List<IInputPageButtonCreator> buttonCreators = InputPageButtonLoader.iNSTANCE.getInputPageButtonCreatorClasses();

+		for(IInputPageButtonCreator creator : buttonCreators){

+			creator.createButton(composite, controller, (AbstractRefactoringWizard)this.getWizard());

+		}

+		

+		setControl(composite);

+	}

+	

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/UmlParameterList.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/UmlParameterList.java
new file mode 100644
index 0000000..5648359
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/createclasswithattributesfromparameterlist/UmlParameterList.java
@@ -0,0 +1,32 @@
+package org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist;

+

+import java.util.ArrayList;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.uml2.uml.Parameter;

+

+import comrel.interpreter.IEObjectGetter;

+

+public class UmlParameterList implements IEObjectGetter {

+	

+	public UmlParameterList(ArrayList<Parameter> umlParameters) {

+		super();

+		this.umlParameters = umlParameters;

+	}

+

+	private ArrayList<Parameter> umlParameters = new ArrayList<Parameter>();

+	

+	public ArrayList<Parameter> getUmlParameters() {

+		return umlParameters;

+	}

+

+	public void setUmlParameters(ArrayList<Parameter> umlParameters) {

+		this.umlParameters = umlParameters;

+	}

+

+	@Override

+	public EObject getEObject() {

+		return umlParameters.get(0);

+	}

+

+}

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController.java
new file mode 100644
index 0000000..466acc9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringController.java
@@ -0,0 +1,253 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringController.javajet,v 1.3 2011/01/21 13:08:06 tarendt Exp $

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass;

+

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.refactor.refactoring.core.Refactoring;

+import org.eclipse.emf.refactor.refactoring.interfaces.IController;

+import org.eclipse.emf.refactor.refactoring.interfaces.IDataManagement;

+import org.eclipse.emf.refactor.refactoring.runtime.ltk.LtkEmfRefactoringProcessorAdapter;

+import org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass.RefactoringDataManagement.ContextList;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Package;

+

+import comrel.InputPort;

+import comrel.MultiInputPort;

+import comrel.RefactoringUnit;

+import comrel.SingleInputPort;

+import comrel.interpreter.ComrelInterpreter;

+

+public final class RefactoringController implements IController{

+

+	/**

+	 * Refactoring supported by the controller.

+	 * @generated

+	 */

+	private Refactoring parent;

+	

+	/**

+	 * DataManagement object of the model refactoring.

+	 * @generated

+	 */

+	private RefactoringDataManagement dataManagement = 

+									new RefactoringDataManagement();

+	

+	/**

+	 * Invocation context of the model refactoring.

+	 * @generated

+	 */	

+	private List<EObject> selection = new ArrayList<EObject>();

+	

+	/**

+	 * Ltk RefactoringProcessor of the model refactoring.

+	 * @generated

+	 */

+	private InternalRefactoringProcessor refactoringProcessor = null;

+	

+	/**

+	 * Gets the Refactoring supported by the controller.

+	 * @return Refactoring supported by the controller.

+	 * @see org.eclipse.emf.refactor.common.core.IController#getParent()

+	 * @generated

+	 */

+	@Override

+	public Refactoring getParent() {

+		return this.parent;

+	}

+	

+	/**

+	 * Sets the Refactoring supported by the controller.

+	 * @param emfRefactoring Refactoring supported by the controller.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)

+	 * @generated

+	 */

+	@Override

+	public void setParent(Refactoring emfRefactoring) {

+		this.parent = emfRefactoring;

+	}

+	

+	/**

+	 * Returns the DataManagement object of the model refactoring.

+	 * @return DataManagement object of the model refactoring.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * getDataManagementObject()

+	 * @generated

+	 */

+	@Override

+	public IDataManagement getDataManagementObject() {

+		return this.dataManagement;

+	}

+

+	/**

+	 * Returns the ltk RefactoringProcessor of the model refactoring.

+	 * @return Ltk RefactoringProcessor of the model refactoring.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * getLtkRefactoringProcessor()

+	 * @generated

+	 */

+	@Override

+	public RefactoringProcessor getLtkRefactoringProcessor() {

+		return this.refactoringProcessor;

+	}

+	

+	/**

+	 * Sets the selected EObject (invocation context of the model refactoring).

+	 * @param selection Invocation context of the model refactoring.

+	 * @see org.eclipse.emf.refactor.common.core.IController#

+	 * setSelection(java.util.List)

+	 * @generated

+	 */

+	@Override

+	public void setSelection(List<EObject> selection) {

+		this.selection = selection;

+		this.refactoringProcessor = 

+				new InternalRefactoringProcessor(this.selection);

+	}	

+	

+	/**

+	 * Returns a Runnable object that executes the model refactoring.

+	 * @return Runnable object that executes the model refactoring.

+	 * @generated

+	 */

+	private Runnable applyRefactoring() {

+		return new Runnable() {				

+			/**

+			 * @see java.lang.Runnable#run()

+			 * @generated

+			 */

+			@Override

+			public void run() {

+				try {

+					ArrayList<org.eclipse.uml2.uml.Class> selectedEObjects = 

+						((ContextList) dataManagement.

+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getElements();

+					String className =

+						(String) dataManagement.getInPortByName("className").getValue();

+					// begin prepare and execute comrel interpreter

+					ComrelInterpreter interpreter = new ComrelInterpreter(selectedEObjects.get(0));

+					interpreter.loadComrelModel(dataManagement.getComrelFilePath());

+					setRootPortValues(interpreter, selectedEObjects,

+										className);

+					interpreter.execute();

+					// end prepare and execute comrel interpreter

+					stopTimeRecording();

+				} catch (IOException e) {

+					e.printStackTrace();

+				}

+			}

+			

+			private void setRootPortValues(

+					ComrelInterpreter interpreter,

+					ArrayList<org.eclipse.uml2.uml.Class> selectedEObjects, 

+					String className) {

+				RefactoringUnit rootRefactoringUnit = interpreter.getRootRefactoringUnit();

+				for (InputPort ip : rootRefactoringUnit.getAllInputPorts()) {

+					System.out.println(ip.getName());

+					if (ip.getName().equals("selectedEObjects")) {

+						((MultiInputPort) ip).getValue().addAll(selectedEObjects);

+					}

+					if (ip.getName().equals("className")) {

+						((SingleInputPort) ip).setValue(className);

+					}

+				}

+			}

+		};

+	}

+

+	/**

+	 * Internal class for providing an instance of a LTK RefactoringProcessor 

+	 * used for EMF model refactorings.	 

+	 * @generated

+	 */

+	public final class InternalRefactoringProcessor extends 

+									LtkEmfRefactoringProcessorAdapter {

+

+		/**

+		 * Constructor using the invocation context of the model refactoring.

+		 * @param selection Invocation context of the model refactoring.

+		 * @generated

+		 */

+		private InternalRefactoringProcessor(List<EObject> selection){

+				super(getParent(), selection, applyRefactoring());				

+		}

+			

+		/**

+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#

+	 	 * checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)

+		 * @generated

+		 */	

+		@Override

+		public RefactoringStatus checkInitialConditions(){

+				RefactoringStatus result = new RefactoringStatus();

+				ArrayList<org.eclipse.uml2.uml.Class> selectedEObjects = 

+						((ContextList) dataManagement.

+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getElements();

+				// test: all classes are owned by the same packages

+				String msg1 = "At least one class is not owned by a package!"; 

+				String msg2 = "The selected classes are not owned by the same package!";

+				ArrayList<Package> owningPackages = new ArrayList<Package>();

+				for (Class cls : selectedEObjects) {

+					if (cls.getPackage() == null) {

+						result.addFatalError(msg1);

+					} else {

+						if (! owningPackages.contains(cls.getPackage())) {

+							owningPackages.add(cls.getPackage());

+						}

+					}

+				}

+				if (owningPackages.size() > 1) result.addFatalError(msg2);

+				return result;

+		}

+		

+		/**

+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#

+	     * checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, 

+	     * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)

+		 * @generated

+		 */	

+		@Override

+		public RefactoringStatus checkFinalConditions(){

+				startTimeRecording();

+				RefactoringStatus result = new RefactoringStatus();

+				ArrayList<org.eclipse.uml2.uml.Class> selectedEObjects = 

+						((ContextList) dataManagement.

+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getElements();

+				String className =

+					(String) dataManagement.getInPortByName("className").getValue();

+				// test: No selected class must be named like specified in 'newName'

+				String msg = "At least one selected class is already named '" + className + "'!"; 

+				for (Class cls : selectedEObjects) {

+					if (cls.getName().equals(className)) {

+						result.addFatalError(msg);

+						break;

+					}

+				}

+				return result;

+		}

+		

+	}

+	

+	long zstVorher;

+	long zstNachher;

+	

+	private void startTimeRecording() {

+		zstVorher = System.currentTimeMillis();

+	}

+

+	private void stopTimeRecording() {

+		zstNachher = System.currentTimeMillis();

+		System.out.println("Time needed (withoud loading): " + ((zstNachher - zstVorher)) + " ms");

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement.java
new file mode 100644
index 0000000..248a7a1
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringDataManagement.java
@@ -0,0 +1,107 @@
+ 

+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringDataManagement.javajet,v 1.2 2011/01/21 13:08:06 tarendt Exp $

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass;

+

+import java.io.File;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.runtime.FileLocator;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.refactor.refactoring.core.Port;

+import org.eclipse.emf.refactor.refactoring.runtime.DataManagementAdapter;

+import org.eclipse.emf.refactor.refactorings.uml24.compositional.Activator;

+import org.osgi.framework.Bundle;

+

+import comrel.interpreter.IEObjectGetter;

+

+/**

+ * Class for specific data concerning a model refactoring.

+ * @generated

+ */

+public class RefactoringDataManagement extends DataManagementAdapter {

+

+	protected final String SELECTEDEOBJECT = "selectedEObject";

+	protected final String COMRELMODELS = "comrelmodels";

+	protected final String COMRELMODELSSLASH = "\\comrelmodels\\";

+	

+	private String comrelFileName = "extractsuperclass.comrel";

+

+	/**

+	 * Default constructor.

+	 * @generated

+	 */

+	public RefactoringDataManagement() {

+		this.addPorts();

+	}

+	

+	/**

+	 * Adds the ports to the data management used for parameter passing.

+	 * @generated

+	 */

+	private void addPorts(){

+		this.inPorts.add

+			(new Port<ContextList>(SELECTEDEOBJECT, ContextList.class));

+		this.inPorts.add

+			(new Port<String>

+				("className", String.class, "unspecified"));		

+	}

+	

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.IDataManagement#

+	 * preselect(java.util.List)

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void preselect(List<EObject> selection) {

+		getInPortByName(SELECTEDEOBJECT).setValue(new ContextList(selection));

+	}

+	

+	public String getComrelFilePath() {

+		String path = "";

+		final Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);

+		try {

+			if (bundle != null) {

+				path = FileLocator.toFileURL(bundle.getEntry(COMRELMODELS)).getFile();

+				path += this.comrelFileName;

+			} else {

+				path = new File(".").getCanonicalPath() 

+						+  COMRELMODELSSLASH + this.comrelFileName;

+			}

+		} catch(Exception e) {

+			e.printStackTrace();

+		}

+		return path;

+	}

+	

+	public class ContextList implements IEObjectGetter {

+		

+		private ArrayList<org.eclipse.uml2.uml.Class> elements = 

+								new ArrayList<org.eclipse.uml2.uml.Class>();

+		

+		public ContextList(List<EObject> selection) {

+			super();

+			for (EObject eObject : selection) {

+				this.elements.add((org.eclipse.uml2.uml.Class) eObject);

+			}

+		}

+		

+		public ArrayList<org.eclipse.uml2.uml.Class> getElements() {

+			return elements;

+		}

+	

+		@Override

+		public EObject getEObject() {

+			return elements.get(0);

+		}

+	}

+

+}

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringGuiHandler.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringGuiHandler.java
new file mode 100644
index 0000000..7a8ba01
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringGuiHandler.java
@@ -0,0 +1,77 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringGuiHandler.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass;

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.refactor.refactoring.core.Refactoring;

+import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;

+

+/**

+ * Class used for specifying gui topics of a specific model refactoring.

+ * @generated

+ */

+public class RefactoringGuiHandler implements IGuiHandler {

+

+	/**

+	 * Refactoring supported by the GuiHandler.

+	 * @generated

+	 */

+	Refactoring parent;

+	

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#getParent()

+	 * @generated

+	 */

+	@Override

+	public Refactoring getParent() {

+		return parent;

+	}

+

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#

+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)

+	 * @generated

+	 */

+	@Override

+	public void setParent(Refactoring emfRefactoring) {

+		this.parent = emfRefactoring;

+	}

+		

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#show()

+	 * @generated

+	 */

+	@Override

+	public RefactoringWizard show() {

+		return new org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass.RefactoringWizard

+		((RefactoringController)this.parent.getController());

+	}

+	

+	/**

+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#

+	 * showInMenu(java.util.List)

+	 * @generated

+	 */

+	@Override

+	public boolean showInMenu(List<EObject> selection) {

+		if (selection.size() <= 1) return false;

+		boolean onlyOneType = true;

+		for (EObject o : selection) {

+			if (null != o) {

+				if (! (o instanceof org.eclipse.uml2.uml.Class)) {

+					onlyOneType = false;

+					break;

+				}

+			} 

+		}

+		return onlyOneType;

+	}

+

+}	

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizard.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizard.java
new file mode 100644
index 0000000..906336a
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizard.java
@@ -0,0 +1,40 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringWizard.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass;

+

+import org.eclipse.emf.refactor.refactoring.interfaces.IController;

+import org.eclipse.emf.refactor.refactoring.runtime.ltk.ui.AbstractRefactoringWizard;

+

+/**

+ * Class used for providing an implementation of an LTK

+ * RefactoringWizard in EMF Refactor.

+ * @generated

+ */

+public class RefactoringWizard 

+    extends AbstractRefactoringWizard {

+		

+	/**

+	 * Default constructor implementation.

+	 * @param controller Controller of the EMF model refactoring.

+	 * @generated

+	 */					

+	public RefactoringWizard(IController controller) {

+		super(controller);

+	}

+

+	/**

+	 * @see org.eclipse.ltk.ui.refactoring.RefactoringWizard#

+	 * addUserInputPages()

+	 * @generated

+	 */

+	@Override

+	protected void addUserInputPages() {

+		addPage(new RefactoringWizardPage

+			(controller.getParent().getName(), (RefactoringController)controller));

+	}

+

+}

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizardPage.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizardPage.java
new file mode 100644
index 0000000..fe99486
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractsuperclass/RefactoringWizardPage.java
@@ -0,0 +1,124 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringWizardPage.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass;

+

+import java.util.List;

+

+import org.eclipse.emf.refactor.refactoring.runtime.ltk.ui.AbstractRefactoringWizard;

+import org.eclipse.emf.refactor.refactoring.runtime.ui.IInputPageButtonCreator;

+import org.eclipse.emf.refactor.refactoring.runtime.ui.InputPageButtonLoader;

+import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Event;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Listener;

+import org.eclipse.swt.widgets.Text;

+

+/**

+ * Class for setting model refactoring specific parameters

+ * by the user.

+ * @generated

+ */

+public class RefactoringWizardPage extends 

+				UserInputWizardPage implements Listener {

+	

+	/**

+	 * Controller of the EMF model refactoring.

+	 * @generated

+	 */			

+	private final RefactoringController controller;

+	

+	/**

+	 * Label for each parameter.

+	 * @generated

+	 */	

+	private Label classNameLabel;

+	

+	/**

+	 * TextField for each parameter.

+	 * @generated

+	 */

+	private Text classNameWidget;

+

+	/**

+	 * Default constructor using a name and the controller of the 

+	 * EMF model refactoring.

+	 * @param name Name of the WizardPage.

+	 * @param controller Controller of the EMF model refactoring.

+	 * @generated

+	 */

+	public RefactoringWizardPage

+		(String name, RefactoringController controller) {

+		super(name);

+		this.controller = controller;

+	}

+

+	/**

+	 * @see org.eclipse.swt.widgets.Listener#

+	 * handleEvent(org.eclipse.swt.widgets.Event)

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void handleEvent(Event event) {		

+		getWizard().getContainer().updateButtons();

+				

+		if (classNameWidget != null) {

+			String className = classNameWidget.getText();

+			if (!className.isEmpty()){

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("className").

+						setValue(className);

+			} else {

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("className").

+						setValue("unspecified");

+			}

+		}

+

+	}

+	

+	/**

+	 * @see org.eclipse.jface.dialogs.IDialogPage#

+	 * createControl(org.eclipse.swt.widgets.Composite)

+	 * @generated

+	 */

+	@Override

+	public void createControl(Composite parent) {

+		Composite composite = new Composite(parent, SWT.NONE);

+		GridLayout gl = new GridLayout();

+		gl.numColumns = 2;

+		GridData gd = new GridData(GridData.FILL_HORIZONTAL);

+		composite.setLayout(gl);

+			

+		

+		classNameLabel = new Label(composite, SWT.NONE);

+		classNameLabel.setText("Name of the new superclass: ");

+		classNameLabel.setEnabled(true);

+		

+		classNameWidget = new Text(composite, SWT.BORDER);

+		classNameWidget.setToolTipText

+				("value of variable 'className'");

+		classNameWidget.setEnabled(true);

+		classNameWidget.setLayoutData(gd);

+		classNameWidget.addListener(SWT.Modify, this);

+		

+		List<IInputPageButtonCreator> buttonCreators = InputPageButtonLoader.iNSTANCE.getInputPageButtonCreatorClasses();

+		for(IInputPageButtonCreator creator : buttonCreators){

+			creator.createButton(composite, controller, (AbstractRefactoringWizard)this.getWizard());

+		}

+		

+		setControl(composite);

+	}

+	

+}

+	
\ No newline at end of file