refactorings REMOVE PARAMETER and INTRODUCE PARAMETER OBJECT added
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController$1.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController$1.class
new file mode 100644
index 0000000..0cc759d
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController$InternalRefactoringProcessor.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController$InternalRefactoringProcessor.class
new file mode 100644
index 0000000..daed957
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController$InternalRefactoringProcessor.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController.class
new file mode 100644
index 0000000..4be17a0
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringController.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringDataManagement.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringDataManagement.class
new file mode 100644
index 0000000..c79a9a5
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringDataManagement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringGuiHandler.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringGuiHandler.class
new file mode 100644
index 0000000..6c9d798
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringGuiHandler.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizard.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizard.class
new file mode 100644
index 0000000..b5db836
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizard.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizardPage.class b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizardPage.class
new file mode 100644
index 0000000..ee4aa70
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/bin/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizardPage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/introduceparameterobject.comrel b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/introduceparameterobject.comrel
new file mode 100644
index 0000000..255a5f0
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/comrelmodels/introduceparameterobject.comrel
@@ -0,0 +1,68 @@
+<?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="introduceparameterobject" refId="comrel.introduceparameterobject" label="Introduce Parameter Object" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

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

+    <helperUnits xsi:type="comrel:MultiFeatureUnit" name="Get Operations Having Parameters" helperUnitId="comrel.getoperationshavingparameters" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" multiFeatureHelper="//@helper.0">

+      <inputPort name="parameterList" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

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

+    </helperUnits>

+    <helperUnits xsi:type="comrel:MultiFeatureUnit" name="Get Parameters Equal To Parameters" helperUnitId="comrel.getparametersequaltoparameters" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" multiFeatureHelper="//@helper.1">

+      <inputPort name="parameterList" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

+      <outputPort name="parameters" type="org.eclipse.uml2.uml.Parameter"/>

+    </helperUnits>

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

+      <inputPorts name="selectedEObject" description="" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

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

+    </refactoringUnits>

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

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Add Parameter" unitId="org.eclipse.emf.refactor.refactorings.uml24.addparameter" label="Add Parameter" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" modelRefactoring="//@modelRefactorings.1">

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

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

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

+      </refactoringUnit>

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

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

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

+    </refactoringUnits>

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

+      <refactoringUnit xsi:type="comrel:AtomicUnit" name="Remove Parameter" unitId="org.eclipse.emf.refactor.refactorings.uml24.removeparameter" label="Remove Parameter" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML" modelRefactoring="//@modelRefactorings.2">

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

+      </refactoringUnit>

+      <multiInputPort name="selectedEObjects" type="org.eclipse.uml2.uml.Parameter"/>

+    </refactoringUnits>

+    <inputPorts xsi:type="comrel:SingleInputPort" name="paramName" type="java.lang.String"/>

+    <inputPorts xsi:type="comrel:SingleInputPort" name="className" type="java.lang.String"/>

+    <inputPorts xsi:type="comrel:SingleInputPort" name="selectedEObject" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

+  </mainRefactoringUnit>

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

+  <portMappings xsi:type="comrel:SinglePortMapping" source="//@mainRefactoringUnit/@refactoringUnits.1/@singleInputPorts.1" 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/@inputPorts.2" target="//@mainRefactoringUnit/@refactoringUnits.0/@inputPorts.0"/>

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

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

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

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

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

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

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

+  <modelRefactorings name="Create Class with Attributes from Parameter List" refId="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist" label="Create Class with Attributes from Parameter List" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPorts name="selectedEObject" description="" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

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

+  </modelRefactorings>

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

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

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

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

+  </modelRefactorings>

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

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

+  </modelRefactorings>

+  <helper xsi:type="comrel:MultiFeatureHelper" name="Get Operations Having Parameters" helperId="comrel.getoperationshavingparameters" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPort name="parameterList" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

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

+  </helper>

+  <helper xsi:type="comrel:MultiFeatureHelper" name="Get Parameters Equal To Parameters" helperId="comrel.getparametersequaltoparameters" namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML">

+    <inputPort name="parameterList" type="org.eclipse.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList"/>

+    <outputPort name="parameters" type="org.eclipse.uml2.uml.Parameter"/>

+  </helper>

+</comrel:CompositeRefactoring>

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

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

+    <children xmi:type="notation:DecorationNode" xmi:id="_51jLQ-oPEeC6s9hVlgOvdQ" type="5083"/>

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

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

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

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

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

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

+          </children>

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

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

+        </children>

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

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

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

+          </children>

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

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

+          <styles xmi:type="notation:FillStyle" xmi:id="_fGR21-oQEeC6s9hVlgOvdQ"/>

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

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

+        </children>

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fGIs4eoQEeC6s9hVlgOvdQ" x="344" y="94"/>

+      </children>

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

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

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

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

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

+          </children>

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

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

+        </children>

+        <children xmi:type="notation:Node" xmi:id="_jN6al-oQEeC6s9hVlgOvdQ" type="3015">

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

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

+          </children>

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

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

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

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

+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jN6am-oQEeC6s9hVlgOvdQ" x="216" y="39"/>

+        </children>

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jN6akeoQEeC6s9hVlgOvdQ" x="914" y="94"/>

+      </children>

+    </children>

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

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

+        <children xmi:type="notation:DecorationNode" xmi:id="__Fok0uoPEeC6s9hVlgOvdQ" type="5050"/>

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

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

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

+          </children>

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

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

+        </children>

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

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

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

+          </children>

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

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

+        </children>

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Fok0eoPEeC6s9hVlgOvdQ" x="20" y="182"/>

+      </children>

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

+        <children xmi:type="notation:DecorationNode" xmi:id="_DwOrs-oQEeC6s9hVlgOvdQ" type="5061"/>

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

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

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

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

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

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

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

+              </children>

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

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

+            </children>

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

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

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

+              </children>

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

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

+            </children>

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

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

+                <layoutConstraint xmi:type="notation:Location" xmi:id="_E7p9C-oQEeC6s9hVlgOvdQ" x="-198" y="-20"/>

+              </children>

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

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

+            </children>

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

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E7gzEeoQEeC6s9hVlgOvdQ" x="176" y="73"/>

+          </children>

+        </children>

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

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

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

+          </children>

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

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

+          <styles xmi:type="notation:FillStyle" xmi:id="_DwX1o-oQEeC6s9hVlgOvdQ"/>

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

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

+        </children>

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

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

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

+          </children>

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

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

+        </children>

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

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

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

+          </children>

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

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

+        </children>

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

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwOrsuoQEeC6s9hVlgOvdQ" x="476" y="83" width="553" height="238"/>

+      </children>

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

+        <children xmi:type="notation:DecorationNode" xmi:id="_Xt6iI-oQEeC6s9hVlgOvdQ" type="5061"/>

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

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

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

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

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

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

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

+              </children>

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

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

+            </children>

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

+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoCJ4eoQEeC6s9hVlgOvdQ" x="26" y="44"/>

+          </children>

+        </children>

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

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

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

+          </children>

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

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

+          <styles xmi:type="notation:FillStyle" xmi:id="_XuETI-oQEeC6s9hVlgOvdQ"/>

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

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

+        </children>

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

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

+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xt6iIuoQEeC6s9hVlgOvdQ" x="1052" y="85" width="325" height="236"/>

+      </children>

+    </children>

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

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

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

+      </children>

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

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

+    </children>

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

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

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

+      </children>

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

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

+    </children>

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

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

+        <layoutConstraint xmi:type="notation:Location" xmi:id="_8pRQE-oPEeC6s9hVlgOvdQ" x="-248" y="-20"/>

+      </children>

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

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

+    </children>

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

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

+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_51jLQuoPEeC6s9hVlgOvdQ" x="42" y="96" width="1411" height="691"/>

+  </children>

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

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

+  <edges xmi:type="notation:Connector" xmi:id="_SrE6YOoQEeC6s9hVlgOvdQ" type="4003" source="_DwX1oOoQEeC6s9hVlgOvdQ" target="_E7p9COoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SrE6YuoQEeC6s9hVlgOvdQ" points="[10, -8, -56, -185]$[66, -8, 0, -185]$[66, 167, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_T-Y8YOoQEeC6s9hVlgOvdQ" type="4001" source="_P8QjsOoQEeC6s9hVlgOvdQ" target="_E7p9AOoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T-Y8YuoQEeC6s9hVlgOvdQ" points="[8, 10, 0, -281]$[8, 288, 0, -3]"/>

+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_T-Y8Y-oQEeC6s9hVlgOvdQ" id="(0.5,0.15)"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_VO3s0OoQEeC6s9hVlgOvdQ" type="4001" source="_PNjDkOoQEeC6s9hVlgOvdQ" target="_E7p9BOoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VO3s0uoQEeC6s9hVlgOvdQ" points="[-10, 0, 44, -177]$[-54, 0, 0, -177]$[-54, 167, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_cMUAEOoQEeC6s9hVlgOvdQ" type="4003" source="_XuETIOoQEeC6s9hVlgOvdQ" target="_aoCJ4-oQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cMUAEuoQEeC6s9hVlgOvdQ" points="[-2, 10, 43, -246]$[-45, 246, 0, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_nyQIcOoQEeC6s9hVlgOvdQ" type="4001" source="_8pRQEOoPEeC6s9hVlgOvdQ" target="__Fok0-oPEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nyQIcuoQEeC6s9hVlgOvdQ" points="[-4, 10, 186, -478]$[-192, 478, -2, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_pk0SQOoQEeC6s9hVlgOvdQ" type="4001" source="_8pRQEOoPEeC6s9hVlgOvdQ" target="_fGR20OoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pk0SQuoQEeC6s9hVlgOvdQ" points="[10, 7, -186, -143]$[193, 140, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_q1TCsOoQEeC6s9hVlgOvdQ" type="4001" source="_8pRQEOoPEeC6s9hVlgOvdQ" target="_jN6ak-oQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_q1TCsuoQEeC6s9hVlgOvdQ" points="[10, 1, -916, -155]$[923, 146, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_s_9jcOoQEeC6s9hVlgOvdQ" type="4002" source="_fGR21OoQEeC6s9hVlgOvdQ" target="_DwX1oOoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s_9jcuoQEeC6s9hVlgOvdQ" points="[0, 10, -13, -161]$[13, 171, 0, 0]"/>

+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s_9jc-oQEeC6s9hVlgOvdQ" id="(0.55,0.0)"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_txgVIOoQEeC6s9hVlgOvdQ" type="4002" source="_jN6al-oQEeC6s9hVlgOvdQ" target="_XuETIOoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_txgVIuoQEeC6s9hVlgOvdQ" points="[-1, 10, 16, -167]$[-16, 167, 1, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_w8cAEOoQEeC6s9hVlgOvdQ" type="4001" source="_8GJ78OoPEeC6s9hVlgOvdQ" target="__Fok1-oPEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_w8cAEuoQEeC6s9hVlgOvdQ" points="[-10, 6, 150, -482]$[-238, 165, -78, -323]$[-163, 478, -3, -10]"/>

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_yMeroOoQEeC6s9hVlgOvdQ" type="4001" source="_8GJ78OoPEeC6s9hVlgOvdQ" target="_P8QjsOoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yMerouoQEeC6s9hVlgOvdQ" points="[10, 6, -230, -383]$[224, 135, -16, -254]$[239, 379, -1, -10]"/>

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

+  </edges>

+  <edges xmi:type="notation:Connector" xmi:id="_zewL0OoQEeC6s9hVlgOvdQ" type="4001" source="_7jpEwOoPEeC6s9hVlgOvdQ" target="_PNjDkOoQEeC6s9hVlgOvdQ">

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

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

+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zewL0uoQEeC6s9hVlgOvdQ" points="[-4, 10, 2, -379]$[-4, 379, 2, -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 14d5244..1f38e18 100644
--- a/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/plugin.xml
@@ -82,5 +82,12 @@
       id="org.eclipse.emf.refactor.refactorings.uml24.extractsuperclass"

       menulabel="Extract Superclass"

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

+   <refactoring 

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

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

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

+      menulabel="Introduce Parameter Object" 

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

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

+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.compositional.UmlUtils;

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

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

+

+import comrel.InputPort;

+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.Parameter> selectedEObjects = 

+							((UmlParameterList) dataManagement.

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

+																		getUmlParameters();

+					String className =

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

+					String paramName =

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

+					// begin prepare and execute comrel interpreter

+					ComrelInterpreter interpreter = new ComrelInterpreter(selectedEObjects.get(0));

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

+					setRootPortValues(interpreter, selectedEObjects,

+										className,

+										paramName);

+					interpreter.execute();

+					// end prepare and execute comrel interpreter

+					stopTimeRecording();

+				} catch (IOException e) {

+					e.printStackTrace();

+				}

+			}

+			

+			private void setRootPortValues(

+					ComrelInterpreter interpreter,

+					ArrayList<Parameter> selectedEObjects, 

+					String className,

+					String parameterName) {

+				RefactoringUnit rootRefactoringUnit = interpreter.getRootRefactoringUnit();

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

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

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

+						((SingleInputPort) ip).setValue(new UmlParameterList(selectedEObjects));

+						System.out.println("single value set");

+					}

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

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

+						System.out.println("single value set");

+					}

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

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

+						System.out.println("single value set");

+					}

+				}

+			}

+		};

+	}

+

+	/**

+	 * 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.Parameter> selectedEObjects = 

+						((UmlParameterList) dataManagement.

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

+																	getUmlParameters();

+					// test: the selected parameters must be owned by one single operation

+					String msg = "The selected parameters do not belong to one operation!";

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

+					for (Parameter param : selectedEObjects) {

+						Operation op = param.getOperation();

+						if (! operations.contains(op)) operations.add(op);

+					}

+					if (operations.size() > 1) {

+						result.addFatalError(msg);

+						return result;

+					}

+					// test: each selected parameter must be an input parameter

+					msg = "This refactoring can only be applied on input parameters!";

+					for (Parameter param : selectedEObjects) {

+						if (! UmlUtils.isInputParameter(param)) {

+							result.addFatalError(msg);

+							return result;

+						}

+					}

+					// test: the owning operation must be owned by a class

+					msg = "This refactoring can only be applied on parameters whose " +

+							"owning operation is owned by a class!";

+					Operation owningOperation = operations.get(0);

+					if (owningOperation.getClass_() == null) {

+						result.addFatalError(msg);

+						return result;

+					}

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

+					msg = "This refactoring can only be applied on parameters whose " +

+							"owning class is owned by a package!";

+					Class owningClass = owningOperation.getClass_();

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

+						result.addFatalError(msg);

+					}

+				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.Parameter> selectedEObjects = 

+						((UmlParameterList) dataManagement.

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

+																	getUmlParameters();

+				String className =

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

+				String parameterName =

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

+				// test: there must be no class in the model named as specified in 'className'

+				String msg = "There is already a class in the model named '" + className + "'!";

+				ArrayList<Class> allClasses = 

+						UmlUtils.getAllClasses(selectedEObjects.get(0).getModel());

+				for (Class cls : allClasses) {

+					if ((cls.getName() != null) && (cls.getName().equals(className))) {

+						result.addFatalError(msg); 

+						break;

+					}

+				}

+				// test: no selected parameter must be named as specified in 'parameterName'

+				msg = "One selected parameter is already named '" + parameterName + "'!";

+				for (Parameter param : selectedEObjects) {

+					if ((param.getName() != null) && (param.getName().equals(parameterName))) {

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

+/**

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

+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.emf.refactor.refactorings.uml24.createclasswithattributesfromparameterlist.UmlParameterList;

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

+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 = "introduceparameterobject.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<UmlParameterList>

+				(SELECTEDEOBJECT, UmlParameterList.class));

+		this.inPorts.add

+			(new Port<String>

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

+		this.inPorts.add

+			(new Port<String>

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

+	}

+	

+	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/introduceparameterobject/RefactoringGuiHandler.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringGuiHandler.java
new file mode 100644
index 0000000..fee5afd
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/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.introduceparameterobject;

+

+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.introduceparameterobject.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/introduceparameterobject/RefactoringWizard.java b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/RefactoringWizard.java
new file mode 100644
index 0000000..363eefd
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24.compositional/src/org/eclipse/emf/refactor/refactorings/uml24/introduceparameterobject/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.introduceparameterobject;

+

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

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

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

+	

+	/**

+	 * TextField for each parameter.

+	 * @generated

+	 */

+	private Text paramNameWidget;

+

+	/**

+	 * 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 (paramNameWidget != null) {

+			String paramName = paramNameWidget.getText();

+			if (!paramName.isEmpty()){

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("paramName").

+						setValue(paramName);

+			} else {

+				((RefactoringDataManagement) 

+						this.controller.getDataManagementObject()).

+						getInPortByName("paramName").

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

+			

+		

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

+		paramNameLabel.setText("Name of the new parameter: ");

+		paramNameLabel.setEnabled(true);

+		

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

+		paramNameWidget.setToolTipText

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

+		paramNameWidget.setEnabled(true);

+		paramNameWidget.setLayoutData(gd);

+		paramNameWidget.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/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController$1.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController$1.class
new file mode 100644
index 0000000..2cea53b
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController$InternalRefactoringProcessor.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController$InternalRefactoringProcessor.class
new file mode 100644
index 0000000..0ab7c40
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController$InternalRefactoringProcessor.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController.class
new file mode 100644
index 0000000..d5b9276
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringDataManagement.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringDataManagement.class
new file mode 100644
index 0000000..ca772aa
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringDataManagement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringGuiHandler.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringGuiHandler.class
new file mode 100644
index 0000000..1f5df38
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringGuiHandler.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringTest$1.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringTest$1.class
new file mode 100644
index 0000000..74485af
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringTest$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringTest.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringTest.class
new file mode 100644
index 0000000..1518f08
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringTest.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizard.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizard.class
new file mode 100644
index 0000000..85bd135
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizard.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizardPage.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizardPage.class
new file mode 100644
index 0000000..33dbc2e
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizardPage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml b/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml
index d13a332..44e0970 100644
--- a/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml
+++ b/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml
@@ -56,6 +56,12 @@
       menulabel="Remove Empty Superclass" 

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

 <refactoring 

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

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

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

+      menulabel="Remove Parameter" 

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

+<refactoring 

       controller="org.eclipse.emf.refactor.refactorings.uml24.renameclass.RefactoringController" 

       gui="org.eclipse.emf.refactor.refactorings.uml24.renameclass.RefactoringGuiHandler" 

       id="org.eclipse.emf.refactor.refactorings.uml24.renameclass" 

diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController.java
new file mode 100644
index 0000000..37e43d7
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringController.java
@@ -0,0 +1,258 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

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

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

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

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

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

+

+

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

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

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

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

+				// execute: remove selected parameter from operation

+				Operation owningOperation = selectedEObject.getOperation();

+				owningOperation.getOwnedParameters().remove(selectedEObject);

+			}

+		};

+	}

+

+	/**

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

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

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

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

+				// test: the selected parameter must be an input parameter

+				String msg = "This refactoring can only be applied on input parameters!";

+				if ((selectedEObject.getDirection().getValue() == ParameterDirectionKind.RETURN)

+						|| (selectedEObject.getDirection().getValue() == ParameterDirectionKind.OUT)) {

+					result.addFatalError(msg);		

+					return result;

+				}										

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

+				msg = "This refactoring can only be applied on parameters" +

+								" whose operation is owned by a class!";

+				if (selectedEObject.getOperation().getClass_() == null) {

+					result.addFatalError(msg);

+					return result;

+				}

+				// test: the owning class must not own an operation with the name

+				// of the contextual operation and a similar parameter list after

+				// removing the selected parameter

+				msg = "The owning class already owns an operation named '" +

+						selectedEObject.getOperation().getName() + "' having the same signature " +

+						"(type and parameter list) after removing the selected parameter!";

+				Class cl = selectedEObject.getOperation().getClass_();

+				if (classOwnsOperation(cl, selectedEObject)) result.addFatalError(msg);

+				// test: the owning class must not own an operation with the name

+				// of the contextual operation and a similar parameter list after

+				// removing the selected parameter

+				msg = "The owning class already inherits an operation named '" +

+						selectedEObject.getOperation().getName() + "' having the same signature " +

+						"(type and parameter list) after removing the selected parameter!";

+				if (classInheritsOperation(cl, selectedEObject)) result.addFatalError(msg);

+				return result;

+		}

+		

+		private boolean classInheritsOperation(Class cl, Parameter param) {

+			Operation owningOperation = param.getOperation();

+			// remove new parameter and mark position

+			int pos = owningOperation.getOwnedParameters().indexOf(param);

+			owningOperation.getOwnedParameters().remove(param);

+			// test

+			for (NamedElement namedElement : cl.getInheritedMembers()) {

+				if (namedElement instanceof Operation) {

+					Operation inheritedOperation = (Operation) namedElement;

+					if (inheritedOperation.getName().equals(owningOperation.getName()) 

+							&& UmlUtils.haveSameTypes(inheritedOperation, owningOperation)

+							 && UmlUtils.haveSameSignatures(inheritedOperation, owningOperation)) {

+						// re-add parameter and return

+						owningOperation.getOwnedParameters().add(pos, param);

+						return true;

+					}

+				}

+			}

+			// re-add parameter and return

+			owningOperation.getOwnedParameters().add(pos, param);

+			return false;

+		}

+

+		private boolean classOwnsOperation(Class cl, Parameter param) {

+			Operation owningOperation = param.getOperation();

+			// remove new parameter and mark position

+			int pos = owningOperation.getOwnedParameters().indexOf(param);

+			owningOperation.getOwnedParameters().remove(param);

+			// test

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

+				 if (op != owningOperation) {

+					 if (op.getName().equals(owningOperation.getName()) 

+							 && UmlUtils.haveSameTypes(op, owningOperation)

+							 && UmlUtils.haveSameSignatures(op, owningOperation)) {

+						// re-add parameter and return

+						owningOperation.getOwnedParameters().add(pos, param);

+						return true;

+					 }

+				 }

+			}

+			// re-add parameter and return

+			owningOperation.getOwnedParameters().add(pos, param);

+			return false;

+		}

+

+		/**

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

+				// no final checks

+				return result;

+		}

+		

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringDataManagement.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringDataManagement.java
new file mode 100644
index 0000000..7d91a7c
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringDataManagement.java
@@ -0,0 +1,54 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

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

+

+/**

+ * 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<org.eclipse.uml2.uml.Parameter>

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

+	}

+	

+	/**

+	 * @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((org.eclipse.uml2.uml.Parameter) selection.get(0));

+	}

+

+}

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

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

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

+		for(EObject o:selection){

+			if(null != o){

+				if (o instanceof org.eclipse.uml2.uml.Parameter) {

+					return true;

+				}

+			} 

+		}

+		return false;

+	}

+

+}	

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

+

+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.removeparameter",

+			"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.removeparameter";

+			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/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizard.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/RefactoringWizard.java
new file mode 100644
index 0000000..0386796
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeparameter/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.removeparameter;

+

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

+ * <copyright>

+ * </copyright>

+ *

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

+ */

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

+

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

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Event;

+import org.eclipse.swt.widgets.Listener;

+

+/**

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

+	

+

+	/**

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

+	 */

+	@Override

+	public void handleEvent(Event event) {		

+		getWizard().getContainer().updateButtons();

+	}

+	

+	/**

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

+		composite.setLayout(gl);

+		

+		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