refactoring EXTRACT CLASS added
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController$1.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController$1.class
new file mode 100644
index 0000000..0959aa4
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController$InternalRefactoringProcessor.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController$InternalRefactoringProcessor.class
new file mode 100644
index 0000000..5d96c6c
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController$InternalRefactoringProcessor.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController.class
new file mode 100644
index 0000000..a542639
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringDataManagement.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringDataManagement.class
new file mode 100644
index 0000000..013a776
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringDataManagement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringGuiHandler.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringGuiHandler.class
new file mode 100644
index 0000000..7d7463f
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringGuiHandler.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizard.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizard.class
new file mode 100644
index 0000000..24e7e32
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizard.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizardPage.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizardPage.class
new file mode 100644
index 0000000..57dc2e9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizardPage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlOperationList.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlOperationList.class
new file mode 100644
index 0000000..5db94d7
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlOperationList.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlPropertyList.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlPropertyList.class
new file mode 100644
index 0000000..e2aa733
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlPropertyList.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractclass.comrel b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractclass.comrel
new file mode 100644
index 0000000..a0d3852
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractclass.comrel
@@ -0,0 +1,63 @@
+<?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="extractclass" refId="comrel.extractclass" label="Extract Class" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

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

+    <refactoringUnits xsi:type="comrel:AtomicUnit" name="Create Associated Class" seqExecutionOrder="1" unitId="org.eclipse.emf.refactor.refactorings.uml24.createassociatedclass" label="Create Associated Class" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" modelRefactoring="//@modelRefactorings.0">

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

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

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

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

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

+    </refactoringUnits>

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

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Move Attribute" unitId="org.eclipse.emf.refactor.refactorings.uml24.moveattribute" label="Move 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="selectedEObjects" type="org.eclipse.uml2.uml.Property"/>

+    </refactoringUnits>

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

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Move Operation" unitId="org.eclipse.emf.refactor.refactorings.uml24.moveoperation" label="Move 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="selectedEObjects" type="org.eclipse.uml2.uml.Operation"/>

+    </refactoringUnits>

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

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

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

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

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

+    <inputPorts xsi:type="comrel:SingleInputPort" name="roleName1" description="Name of the new association end role" type="java.lang.String"/>

+    <inputPorts xsi:type="comrel:SingleInputPort" name="roleName2" description="Name of the opposite association end role" type="java.lang.String"/>

+  </mainRefactoringUnit>

+  <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:MultiPortMapping" source="//@mainRefactoringUnit/@inputPorts.1" target="//@mainRefactoringUnit/@refactoringUnits.1/@multiInputPort"/>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+  </modelRefactorings>

+  <modelRefactorings name="Move Attribute" refId="org.eclipse.emf.refactor.refactorings.uml24.moveattribute" label="Move 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="Move Operation" refId="org.eclipse.emf.refactor.refactorings.uml24.moveoperation" label="Move 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>

+</comrel:CompositeRefactoring>

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractclass.comrel_diagram b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractclass.comrel_diagram
new file mode 100644
index 0000000..c14f079
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/extractclass.comrel_diagram
@@ -0,0 +1,265 @@
+<?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="_blQU0OnIEeC-qti3U75pWQ" type="Comrel" name="extractclass.comrel_diagram" measurementUnit="Pixel">

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

+    <children xmi:type="notation:DecorationNode" xmi:id="_dMHk8OnIEeC-qti3U75pWQ" type="5083"/>

+    <children xmi:type="notation:BasicCompartment" xmi:id="_dMIMAOnIEeC-qti3U75pWQ" type="7079"/>

+    <children xmi:type="notation:BasicCompartment" xmi:id="_dMIMAenIEeC-qti3U75pWQ" type="7080">

+      <children xmi:type="notation:Shape" xmi:id="_f0VkYOnIEeC-qti3U75pWQ" type="3074" fontName="Segoe UI">

+        <children xmi:type="notation:DecorationNode" xmi:id="_f0VkYunIEeC-qti3U75pWQ" type="5050"/>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_f0dgMOnIEeC-qti3U75pWQ" type="5026">

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

+          </children>

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

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

+        </children>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_f0eHQOnIEeC-qti3U75pWQ" type="5026">

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

+          </children>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f0dgM-nIEeC-qti3U75pWQ" x="156" y="-19"/>

+        </children>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_f0euUunIEeC-qti3U75pWQ" type="5026">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_f0euU-nIEeC-qti3U75pWQ" x="-164" y="20"/>

+          </children>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f0euUenIEeC-qti3U75pWQ" x="102" y="39"/>

+        </children>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_f0fVYOnIEeC-qti3U75pWQ" type="5026">

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

+          </children>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f0euVenIEeC-qti3U75pWQ" x="162" y="39"/>

+        </children>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_f0fVZOnIEeC-qti3U75pWQ" type="5026">

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

+          </children>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f0fVY-nIEeC-qti3U75pWQ" x="-19" y="12"/>

+        </children>

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f0VkYenIEeC-qti3U75pWQ" x="63" y="215"/>

+      </children>

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

+        <children xmi:type="notation:DecorationNode" xmi:id="_rd6Pk-nIEeC-qti3U75pWQ" type="5061"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_rd6PlOnIEeC-qti3U75pWQ" type="7049"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_rd6PlenIEeC-qti3U75pWQ" type="7050">

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

+            <children xmi:type="notation:DecorationNode" xmi:id="_tXvfAunIEeC-qti3U75pWQ" type="5048"/>

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

+              <children xmi:type="notation:DecorationNode" xmi:id="_tX0-kOnIEeC-qti3U75pWQ" type="5026">

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

+              </children>

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

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

+            </children>

+            <children xmi:type="notation:Shape" xmi:id="_tX0-kunIEeC-qti3U75pWQ" type="3035" fontName="Segoe UI">

+              <children xmi:type="notation:DecorationNode" xmi:id="_tX1loOnIEeC-qti3U75pWQ" type="5026">

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

+              </children>

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

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tX0-k-nIEeC-qti3U75pWQ" x="72" y="-19"/>

+            </children>

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

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tXvfAenIEeC-qti3U75pWQ" x="8" y="85"/>

+          </children>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_reCycOnIEeC-qti3U75pWQ" type="3024">

+          <children xmi:type="notation:DecorationNode" xmi:id="_reDZgOnIEeC-qti3U75pWQ" type="5021">

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

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_reCycenIEeC-qti3U75pWQ"/>

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

+          <styles xmi:type="notation:FillStyle" xmi:id="_reCyc-nIEeC-qti3U75pWQ"/>

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

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

+        </children>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_0WtcQunIEeC-qti3U75pWQ" type="5020">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_0WuDUOnIEeC-qti3U75pWQ" x="-133" y="-20"/>

+          </children>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0WtcQenIEeC-qti3U75pWQ" x="90" y="-19"/>

+        </children>

+        <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_rd6PkenIEeC-qti3U75pWQ"/>

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rd6PkunIEeC-qti3U75pWQ" x="423" y="107" width="373" height="278"/>

+      </children>

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

+        <children xmi:type="notation:DecorationNode" xmi:id="_TNpUM-nJEeC-qti3U75pWQ" type="5061"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_TNpUNOnJEeC-qti3U75pWQ" type="7049"/>

+        <children xmi:type="notation:BasicCompartment" xmi:id="_TNp7QOnJEeC-qti3U75pWQ" type="7050">

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

+            <children xmi:type="notation:DecorationNode" xmi:id="_VARvcunJEeC-qti3U75pWQ" type="5048"/>

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

+              <children xmi:type="notation:DecorationNode" xmi:id="_VATkounJEeC-qti3U75pWQ" type="5026">

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_VATko-nJEeC-qti3U75pWQ" x="-198" y="-20"/>

+              </children>

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

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VATkoenJEeC-qti3U75pWQ" x="71" y="-19"/>

+            </children>

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

+              <children xmi:type="notation:DecorationNode" xmi:id="_VAULsOnJEeC-qti3U75pWQ" type="5026">

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

+              </children>

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

+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VATkpenJEeC-qti3U75pWQ" x="147" y="-19"/>

+            </children>

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

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VARvcenJEeC-qti3U75pWQ" x="131" y="70"/>

+          </children>

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_TNx3EOnJEeC-qti3U75pWQ" type="3024">

+          <children xmi:type="notation:DecorationNode" xmi:id="_TNyeIOnJEeC-qti3U75pWQ" type="5021">

+            <layoutConstraint xmi:type="notation:Location" xmi:id="_TNyeIenJEeC-qti3U75pWQ" x="-204" y="-20"/>

+          </children>

+          <styles xmi:type="notation:DescriptionStyle" xmi:id="_TNx3EenJEeC-qti3U75pWQ"/>

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

+          <styles xmi:type="notation:FillStyle" xmi:id="_TNx3E-nJEeC-qti3U75pWQ"/>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TNx3FOnJEeC-qti3U75pWQ" x="210" y="-19"/>

+        </children>

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

+          <children xmi:type="notation:DecorationNode" xmi:id="_aGCIUOnJEeC-qti3U75pWQ" type="5020">

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

+          </children>

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aGBhQenJEeC-qti3U75pWQ" x="285" y="-19"/>

+        </children>

+        <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_TNpUMenJEeC-qti3U75pWQ"/>

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TNpUMunJEeC-qti3U75pWQ" x="807" y="104" width="403" height="283"/>

+      </children>

+    </children>

+    <children xmi:type="notation:Node" xmi:id="_dCFCsOnJEeC-qti3U75pWQ" type="3028">

+      <children xmi:type="notation:DecorationNode" xmi:id="_dCFCtenJEeC-qti3U75pWQ" type="5023">

+        <layoutConstraint xmi:type="notation:Location" xmi:id="_dCFCtunJEeC-qti3U75pWQ" x="-184" y="-20"/>

+      </children>

+      <styles xmi:type="notation:DescriptionStyle" xmi:id="_dCFCsenJEeC-qti3U75pWQ"/>

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

+      <styles xmi:type="notation:FillStyle" xmi:id="_dCFCs-nJEeC-qti3U75pWQ"/>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dCFCtOnJEeC-qti3U75pWQ" x="1201" y="-19"/>

+    </children>

+    <children xmi:type="notation:Node" xmi:id="_dvosQOnJEeC-qti3U75pWQ" type="3028">

+      <children xmi:type="notation:DecorationNode" xmi:id="_dvpTUOnJEeC-qti3U75pWQ" type="5023">

+        <layoutConstraint xmi:type="notation:Location" xmi:id="_dvpTUenJEeC-qti3U75pWQ" x="-165" y="-20"/>

+      </children>

+      <styles xmi:type="notation:DescriptionStyle" xmi:id="_dvosQenJEeC-qti3U75pWQ"/>

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

+      <styles xmi:type="notation:FillStyle" xmi:id="_dvosQ-nJEeC-qti3U75pWQ"/>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dvosROnJEeC-qti3U75pWQ" x="985" y="-19"/>

+    </children>

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

+      <children xmi:type="notation:DecorationNode" xmi:id="_spk8AunJEeC-qti3U75pWQ" type="5022">

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

+      </children>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_spk8AenJEeC-qti3U75pWQ" x="721" y="-19"/>

+    </children>

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

+      <children xmi:type="notation:DecorationNode" xmi:id="_tRdbYunJEeC-qti3U75pWQ" type="5022">

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

+      </children>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tRdbYenJEeC-qti3U75pWQ" x="481" y="-19"/>

+    </children>

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

+      <children xmi:type="notation:DecorationNode" xmi:id="_tvPjkunJEeC-qti3U75pWQ" type="5022">

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

+      </children>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tvPjkenJEeC-qti3U75pWQ" x="301" y="-19"/>

+    </children>

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

+      <children xmi:type="notation:DecorationNode" xmi:id="_uLO8AOnJEeC-qti3U75pWQ" type="5022">

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

+      </children>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uLOU8enJEeC-qti3U75pWQ" x="193" y="-19"/>

+    </children>

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

+      <children xmi:type="notation:DecorationNode" xmi:id="_unT0AunJEeC-qti3U75pWQ" type="5022">

+        <layoutConstraint xmi:type="notation:Location" xmi:id="_unT0A-nJEeC-qti3U75pWQ" x="-136" y="-20"/>

+      </children>

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

+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_unT0AenJEeC-qti3U75pWQ" x="103" y="-19"/>

+    </children>

+    <styles xmi:type="notation:HintedDiagramLinkStyle" xmi:id="_dMFIsenIEeC-qti3U75pWQ"/>

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

+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dMFIsunIEeC-qti3U75pWQ" x="47" y="117" width="1238" height="532"/>

+  </children>

+  <styles xmi:type="notation:DiagramStyle" xmi:id="_blQU0enIEeC-qti3U75pWQ"/>

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

+  <edges xmi:type="notation:Connector" xmi:id="_7VM4YOnIEeC-qti3U75pWQ" type="4003" source="_reCycOnIEeC-qti3U75pWQ" target="_tX0XgOnIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7VM4YunIEeC-qti3U75pWQ" points="[3, 10, 1, -183]$[3, 183, 1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_8UfLIOnIEeC-qti3U75pWQ" type="4001" source="_0WtcQOnIEeC-qti3U75pWQ" target="_tX0-kunIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_8UfLIunIEeC-qti3U75pWQ" points="[7, 10, -1, -183]$[7, 183, -1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_YKXs4OnJEeC-qti3U75pWQ" type="4003" source="_TNx3EOnJEeC-qti3U75pWQ" target="_VATkoOnJEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YKYT8enJEeC-qti3U75pWQ" points="[0, 10, 0, -182]$[0, 188, 0, -4]"/>

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

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_a3wgMOnJEeC-qti3U75pWQ" type="4001" source="_aGBhQOnJEeC-qti3U75pWQ" target="_VATkpOnJEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_a3wgMunJEeC-qti3U75pWQ" points="[5, 10, -107, -188]$[113, 188, 1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_f3nFYOnJEeC-qti3U75pWQ" type="4002" source="_dvosQOnJEeC-qti3U75pWQ" target="_reCycOnIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f3nFYunJEeC-qti3U75pWQ" points="[0, 10, -22, -331]$[22, 331, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_imoQYOnJEeC-qti3U75pWQ" type="4002" source="_dCFCsOnJEeC-qti3U75pWQ" target="_TNx3EOnJEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_imoQYunJEeC-qti3U75pWQ" points="[10, 7, -415, -331]$[415, 338, -10, 0]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_wFV4QOnJEeC-qti3U75pWQ" type="4001" source="_unT0AOnJEeC-qti3U75pWQ" target="_f0fVYunIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wFV4QunJEeC-qti3U75pWQ" points="[-9, 10, 400, -470]$[-412, 470, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_yKME4OnJEeC-qti3U75pWQ" type="4001" source="_uLOU8OnJEeC-qti3U75pWQ" target="_f0c5IOnIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yKME4unJEeC-qti3U75pWQ" points="[-8, 10, 332, -439]$[-340, 439, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_1kAgYOnJEeC-qti3U75pWQ" type="4001" source="_tvPjkOnJEeC-qti3U75pWQ" target="_f0euUOnIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1kAgYunJEeC-qti3U75pWQ" points="[-8, 10, 366, -497]$[-375, 517, -1, 10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_3CaYEOnJEeC-qti3U75pWQ" type="4001" source="_tRdbYOnJEeC-qti3U75pWQ" target="_f0dgMunIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3CaYEunJEeC-qti3U75pWQ" points="[-8, 10, 310, -439]$[-320, 439, -2, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_5dpEYOnJEeC-qti3U75pWQ" type="4001" source="_spk8AOnJEeC-qti3U75pWQ" target="_f0euVOnIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5dpEYunJEeC-qti3U75pWQ" points="[-6, 10, 270, -497]$[-278, 517, -2, 10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_biG7YOniEeC_8fH8kZFZGw" type="4001" source="_spk8AOnJEeC-qti3U75pWQ" target="_0WtcQOnIEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_biG7YuniEeC_8fH8kZFZGw" points="[1, 10, -53, -331]$[55, 331, 1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_dKsp0OniEeC_8fH8kZFZGw" type="4001" source="_spk8AOnJEeC-qti3U75pWQ" target="_aGBhQOnJEeC-qti3U75pWQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dKsp0uniEeC_8fH8kZFZGw" points="[10, 5, -608, -333]$[617, 328, -1, -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
index 1f38e18..a8ac11e 100644
--- a/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml
@@ -77,6 +77,12 @@
       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.extractclass.RefactoringController"

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

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

+      menulabel="Extract Class"

+      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"

diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController.java
new file mode 100644
index 0000000..edfea1c
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringController.java
@@ -0,0 +1,294 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringController.javajet,v 1.3 2011/01/21 13:08:06 tarendt Exp $

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.extractclass;

+

+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.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.Property;

+

+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 {

+					org.eclipse.uml2.uml.Class selectedEObject = 

+						(org.eclipse.uml2.uml.Class) dataManagement.

+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();

+					ArrayList<Property> attributesList = 

+							((UmlPropertyList) dataManagement.

+									getInPortByName("attributesList").getValue()).getUmlProperties();

+					ArrayList<Operation> operationsList = 

+							((UmlOperationList) dataManagement.

+									getInPortByName("operationsList").getValue()).getUmlOperations();

+					String className =

+						(String) dataManagement.getInPortByName("className").getValue();

+					String associationName =

+						(String) dataManagement.getInPortByName("associationName").getValue();

+					String roleName1 =

+						(String) dataManagement.getInPortByName("roleName1").getValue();

+					String roleName2 =

+						(String) dataManagement.getInPortByName("roleName2").getValue();

+					// begin prepare and execute comrel interpreter

+					ComrelInterpreter interpreter = new ComrelInterpreter(selectedEObject);

+					interpreter.loadComrelModel(dataManagement.getComrelFilePath());

+					setRootPortValues(interpreter, selectedEObject,

+										attributesList,

+										operationsList,

+										className,

+										associationName,

+										roleName1,

+										roleName2);

+					interpreter.execute();

+					// end prepare and execute comrel interpreter

+					stopTimeRecording();

+				} catch (IOException e) {

+					e.printStackTrace();

+				}

+			}

+			

+			private void setRootPortValues(

+					ComrelInterpreter interpreter,

+					org.eclipse.uml2.uml.Class selectedEObject, 

+					ArrayList<Property> attributesList, 

+					ArrayList<Operation> operationsList, 

+					String className, 

+					String associationName, 

+					String roleName1, 

+					String roleName2) {

+				RefactoringUnit rootRefactoringUnit = interpreter.getRootRefactoringUnit();

+				for (InputPort ip : rootRefactoringUnit.getAllInputPorts()) {

+					System.out.println(ip.getName());

+					if (ip.getName().equals("selectedEObject")) {

+						((SingleInputPort) ip).setValue(selectedEObject);

+					}

+					if (ip.getName().equals("operationsList")) {

+						((MultiInputPort) ip).getValue().addAll(operationsList);

+					}

+					if (ip.getName().equals("attributesList")) {

+						((MultiInputPort) ip).getValue().addAll(attributesList);

+					}

+					if (ip.getName().equals("className")) {

+						((SingleInputPort) ip).setValue(className);

+					}

+					if (ip.getName().equals("associationName")) {

+						((SingleInputPort) ip).setValue(associationName);

+					}

+					if (ip.getName().equals("roleName1")) {

+						((SingleInputPort) ip).setValue(roleName1);

+					}

+					if (ip.getName().equals("roleName2")) {

+						((SingleInputPort) ip).setValue(roleName2);

+					}

+				}

+			}

+		};

+	}

+

+	/**

+	 * 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();

+				Class selectedEObject = 

+						(Class) dataManagement.getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();

+					ArrayList<Property> attributesList = 

+							((UmlPropertyList) dataManagement.

+									getInPortByName("attributesList").getValue()).getUmlProperties();

+					ArrayList<Operation> operationsList = 

+							((UmlOperationList) dataManagement.

+									getInPortByName("operationsList").getValue()).getUmlOperations();

+					// test: the selected class must be owned by a package

+					String msg = "This refactoring can only be applied" +

+							" on classes which are owned by a package!";

+					if (selectedEObject.getPackage() == null) {

+						result.addFatalError(msg);

+						return result;

+					}

+					// test: each property must be an owned attribute of the selected class

+					msg = "At least one selected property is not an owned attribute of class '" 

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

+					for (Property attribute : attributesList) {

+						if (! selectedEObject.getOwnedAttributes().contains(attribute)) {

+							result.addFatalError(msg);

+							return result;

+						}

+					}

+					// test: each operation must be an owned operation of the selected class

+					msg = "At least one selected operation is not an owned operation of class '" 

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

+					for (Operation operation : operationsList) {

+						if (! selectedEObject.getOwnedOperations().contains(operation)) {

+							result.addFatalError(msg);

+							return result;

+						}

+					}

+				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();

+				// the refactoring has no additional final conditions to be checked

+				startTimeRecording();

+				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/extractclass/RefactoringDataManagement.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringDataManagement.java
new file mode 100644
index 0000000..dd7ccb9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringDataManagement.java
@@ -0,0 +1,111 @@
+ 

+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringDataManagement.javajet,v 1.2 2011/01/21 13:08:06 tarendt Exp $

+ */

+package org.eclipse.emf.refactor.refactorings.uml24.extractclass;

+

+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.eclipse.uml2.uml.Class;

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

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

+import org.osgi.framework.Bundle;

+

+/**

+ * 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 = "extractclass.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<org.eclipse.uml2.uml.Class>

+				(SELECTEDEOBJECT, org.eclipse.uml2.uml.Class.class));

+		this.inPorts.add

+			(new Port<UmlOperationList>

+				("operationsList", UmlOperationList.class));

+		this.inPorts.add

+			(new Port<UmlPropertyList>

+				("attributesList", UmlPropertyList.class));

+		this.inPorts.add

+			(new Port<String>

+				("className", String.class, "unspecified"));

+		this.inPorts.add

+			(new Port<String>

+				("associationName", String.class, "unspecified"));

+		this.inPorts.add

+			(new Port<String>

+				("roleName1", String.class, "unspecified"));

+		this.inPorts.add

+			(new Port<String>

+				("roleName2", 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<Property> properties = new ArrayList<Property>();

+		ArrayList<Operation> operations = new ArrayList<Operation>();

+		Class selectedClass = null;

+		for (EObject eObject : selection) {

+			if (eObject instanceof Property) properties.add((Property) eObject);

+			if (eObject instanceof Operation) operations.add((Operation) eObject);

+			if (eObject instanceof Class) selectedClass = (Class) eObject;

+		}		

+		getInPortByName(SELECTEDEOBJECT).setValue(selectedClass);

+		getInPortByName("attributesList").setValue(new UmlPropertyList(properties));

+		getInPortByName("operationsList").setValue(new UmlOperationList(operations));

+	}

+	

+	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;

+	}

+}

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

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringGuiHandler.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.extractclass;

+

+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.extractclass.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) {

+		int numberOfClasses = 0;

+		for(EObject o:selection){

+			if(null != o){

+				if (! 	  ((o instanceof org.eclipse.uml2.uml.Class)

+						|| (o instanceof org.eclipse.uml2.uml.Property)

+						|| (o instanceof org.eclipse.uml2.uml.Operation))) {

+					return false;

+				}

+				if (o instanceof org.eclipse.uml2.uml.Class) numberOfClasses++;

+			} 

+		}

+		return (numberOfClasses == 1);

+	}

+

+}	

+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizard.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizard.java
new file mode 100644
index 0000000..52532e6
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/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.extractclass;

+

+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/extractclass/RefactoringWizardPage.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizardPage.java
new file mode 100644
index 0000000..c389295
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/RefactoringWizardPage.java
@@ -0,0 +1,234 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RefactoringWizardPage.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $

+ */

+ package org.eclipse.emf.refactor.refactorings.uml24.extractclass;

+

+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;

+	/**

+	 * Label for each parameter.

+	 * @generated

+	 */	

+	private Label associationNameLabel;

+	

+	/**

+	 * TextField for each parameter.

+	 * @generated

+	 */

+	private Text associationNameWidget;

+	/**

+	 * Label for each parameter.

+	 * @generated

+	 */	

+	private Label roleName1Label;

+	

+	/**

+	 * TextField for each parameter.

+	 * @generated

+	 */

+	private Text roleName1Widget;

+	/**

+	 * Label for each parameter.

+	 * @generated

+	 */	

+	private Label roleName2Label;

+	

+	/**

+	 * TextField for each parameter.

+	 * @generated

+	 */

+	private Text roleName2Widget;

+

+	/**

+	 * 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");

+			}

+		}				

+		if (associationNameWidget != null) {

+			String associationName = associationNameWidget.getText();

+			if (!associationName.isEmpty()){

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("associationName").

+						setValue(associationName);

+			} else {

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("associationName").

+						setValue("unspecified");

+			}

+		}				

+		if (roleName1Widget != null) {

+			String roleName1 = roleName1Widget.getText();

+			if (!roleName1.isEmpty()){

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("roleName1").

+						setValue(roleName1);

+			} else {

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("roleName1").

+						setValue("unspecified");

+			}

+		}				

+		if (roleName2Widget != null) {

+			String roleName2 = roleName2Widget.getText();

+			if (!roleName2.isEmpty()){

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("roleName2").

+						setValue(roleName2);

+			} else {

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("roleName2").

+						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 associated 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);

+		classNameWidget.setFocus();

+			

+		

+		associationNameLabel = new Label(composite, SWT.NONE);

+		associationNameLabel.setText("Name of the new association: ");

+		associationNameLabel.setEnabled(true);

+		

+		associationNameWidget = new Text(composite, SWT.BORDER);

+		associationNameWidget.setToolTipText

+				("value of variable 'associationName'");

+		associationNameWidget.setEnabled(true);

+		associationNameWidget.setLayoutData(gd);

+		associationNameWidget.addListener(SWT.Modify, this);

+			

+		

+		roleName1Label = new Label(composite, SWT.NONE);

+		roleName1Label.setText("Name of the new association end role: ");

+		roleName1Label.setEnabled(true);

+		

+		roleName1Widget = new Text(composite, SWT.BORDER);

+		roleName1Widget.setToolTipText

+				("value of variable 'roleName1'");

+		roleName1Widget.setEnabled(true);

+		roleName1Widget.setLayoutData(gd);

+		roleName1Widget.addListener(SWT.Modify, this);

+			

+		

+		roleName2Label = new Label(composite, SWT.NONE);

+		roleName2Label.setText("Name of the opposite association end role: ");

+		roleName2Label.setEnabled(true);

+		

+		roleName2Widget = new Text(composite, SWT.BORDER);

+		roleName2Widget.setToolTipText

+				("value of variable 'roleName2'");

+		roleName2Widget.setEnabled(true);

+		roleName2Widget.setLayoutData(gd);

+		roleName2Widget.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/extractclass/UmlOperationList.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlOperationList.java
new file mode 100644
index 0000000..5717367
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/extractclass/UmlOperationList.java
@@ -0,0 +1,32 @@
+package org.eclipse.emf.refactor.refactorings.uml24.extractclass;

+

+import java.util.ArrayList;

+

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

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

+

+import comrel.interpreter.IEObjectGetter;

+

+public class UmlOperationList implements IEObjectGetter{

+	

+	public UmlOperationList(ArrayList<Operation> umlOperations) {

+		super();

+		this.umlOperations = umlOperations;

+	}

+

+	private ArrayList<Operation> umlOperations = new ArrayList<Operation>();

+	

+	public ArrayList<Operation> getUmlOperations() {

+		return umlOperations;

+	}

+

+	public void setUmlOperations(ArrayList<Operation> umlOperations) {

+		this.umlOperations = umlOperations;

+	}

+

+	@Override

+	public EObject getEObject() {

+		return umlOperations.get(0);

+	}

+

+}

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

+

+import java.util.ArrayList;

+

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

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

+

+import comrel.interpreter.IEObjectGetter;

+

+public class UmlPropertyList implements IEObjectGetter{

+	

+	public UmlPropertyList(ArrayList<Property> umlProperties) {

+		super();

+		this.umlProperties = umlProperties;

+	}

+

+	private ArrayList<Property> umlProperties = new ArrayList<Property>();

+	

+	public ArrayList<Property> getUmlProperties() {

+		return umlProperties;

+	}

+

+	public void setUmlProperties(ArrayList<Property> umlProperties) {

+		this.umlProperties = umlProperties;

+	}

+

+	@Override

+	public EObject getEObject() {

+		return umlProperties.get(0);

+	}

+

+}