initial commit
diff --git a/org.eclipse.emf.refactor.refactoring/.classpath b/org.eclipse.emf.refactor.refactoring/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.refactor.refactoring/.project b/org.eclipse.emf.refactor.refactoring/.project
new file mode 100644
index 0000000..28c75a3
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.refactor.refactoring</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.emf.refactor.refactoring/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.refactor.refactoring/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..46b85c8
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Refactoring
+Bundle-SymbolicName: org.eclipse.emf.refactor.refactoring;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-Activator: org.eclipse.emf.refactor.refactoring.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.8.0",
+ org.eclipse.emf.ecore;bundle-version="2.8.1",
+ org.eclipse.ltk.core.refactoring;bundle-version="3.6.0",
+ org.eclipse.ltk.ui.refactoring;bundle-version="3.7.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.emf.refactor.refactoring,
+ org.eclipse.emf.refactor.refactoring.core,
+ org.eclipse.emf.refactor.refactoring.interfaces,
+ org.eclipse.emf.refactor.refactoring.managers
diff --git a/org.eclipse.emf.refactor.refactoring/build.properties b/org.eclipse.emf.refactor.refactoring/build.properties
new file mode 100644
index 0000000..1b09d56
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               bin/,\
+               schema/,\
+               src/
diff --git a/org.eclipse.emf.refactor.refactoring/plugin.xml b/org.eclipse.emf.refactor.refactoring/plugin.xml
new file mode 100644
index 0000000..643461b
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/plugin.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension-point id="org.eclipse.emf.refactor.refactorings" name="Refactorings" schema="schema/refactorings.exsd"/>
+
+</plugin>
diff --git a/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd b/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd
new file mode 100644
index 0000000..a7fd1fc
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd
@@ -0,0 +1,150 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.emf.refactor.common.groupmanagement" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.emf.refactor" id="refactorings" name="org.eclipse.emf.refactor.refactorings"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="refactoring" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="refactoring">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="namespaceUri" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="menulabel" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="controller" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.refactor.common.core.IController"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="gui" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.refactor.common.core.ui.IGuiHandler"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         /*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/Activator.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/Activator.java
new file mode 100644
index 0000000..e285811
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/Activator.java
@@ -0,0 +1,52 @@
+package org.eclipse.emf.refactor.refactoring;
+
+import org.eclipse.emf.refactor.refactoring.managers.RefactoringManager;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.emf.refactor.refactoring"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+		RefactoringManager.getInstance();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/ExtensionPointTags.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/ExtensionPointTags.java
new file mode 100644
index 0000000..ddce7c9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/ExtensionPointTags.java
@@ -0,0 +1,14 @@
+package org.eclipse.emf.refactor.refactoring.core;
+
+public class ExtensionPointTags {
+
+	public static final String EXTENSION_POINT_TAG= "extension";
+	public static final String EXTENSION_POINT_NAME= "org.eclipse.emf.refactor.refactorings";
+	public static final String REFACTORING_TAG = "refactoring";
+	public static final String REFACTORING_ID_TAG = "id";
+	public static final String REFACTORING_NSURI_TAG = "namespaceUri";
+	public static final String REFACTORING_MENULABEL_TAG = "menulabel";
+	public static final String REFACTORING_CONTROLLER_TAG = "controller";
+	public static final String REFACTORING_GUI_TAG = "gui";
+		
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Port.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Port.java
new file mode 100644
index 0000000..02710fb
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Port.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.refactor.refactoring.core;
+
+/**
+ * Class used for model refactoring parameters with specific name, description,
+ * value, and type.
+ * @generated NOT
+ * @author Florian Mantz
+ */
+@SuppressWarnings("rawtypes")
+public class Port<T> implements Comparable<Port> {
+
+	/**
+	 * Name of the port.
+	 */
+	final private String name;
+	
+	/**
+	 * Description of the port.
+	 */
+	final private String description;	
+	
+	/**
+	 * Type of the port.
+	 */
+	final private Class<T> type;
+	
+	/**
+	 * Value of the port.
+	 */
+	private T value;
+	
+	/**
+	 * Default constructor.
+	 * @param name Name of the port.
+	 * @param type Type of the port.
+	 * @param description Description of the port.
+	 * @param initialValue Initial value of the port.
+	 */
+	public Port(String name, Class<T> type, String description, T initialValue) {
+		this.name = name;
+		this.type = type;
+		this.description = description;
+		this.value = initialValue;
+	}
+	
+	/**
+	 * Constructor without description.
+	 * @param name Name of the port.
+	 * @param type Type of the port.
+	 * @param initial Initial value of the port.
+	 */
+	public Port(String name, Class<T> type, T initial) {
+		this(name,type,"",initial);
+	}
+
+	/**
+	 * Contructor without description and initial value,
+	 * @param name Name of the port.
+	 * @param type Type of the port.
+	 */
+	public Port(String name, Class<T> type) {
+		this(name,type,"",null);
+	}
+	
+	/**
+	 * Gets the Name of the port.
+	 * @return Name of the port.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Gets the description of the port.
+	 * @return Description of the port.
+	 */
+	public String getDescription() {
+		return description;
+	}
+	
+	/**
+	 * Gets the value of the port.
+	 * @return Value of the port.
+	 */
+	public T getValue() {
+		return value;
+	}
+	
+	/**
+	 * Gets the type of the port.
+	 * @return Type of the port.
+	 */
+	public Class<T> getType(){
+		return type; 
+	}
+	
+	/**
+	 * Sets the value of the port.
+	 * @param value Value of the port.
+	 */
+	public void setValue(T value) {
+		this.value = value;
+	}
+	
+	/**
+	 * Connects two ports of equal types by setting the value of this to
+	 * that of the given port.
+	 * @param port Port whose value is the new value of this.
+	 */
+	public void connect(Port<T> port){
+		if(! port.getType().equals(this.getType())){
+			throw new IllegalArgumentException("Ports are not of equal type");
+		}
+		this.value = port.getValue();
+	}
+
+	/**
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		return result;
+	}
+
+	/**
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Port other = (Port) obj;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		return true;
+	}
+
+	/**
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	@Override
+	public int compareTo(Port port) {
+		return port.name.compareTo(this.name);
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java
new file mode 100644
index 0000000..af0c761
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.refactor.refactoring.core;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.emf.refactor.refactoring.interfaces.IController;
+import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;
+import org.eclipse.emf.refactor.refactoring.managers.RefactoringManager;
+
+/**
+ * Base class of a specific emf model refactoring.
+ * @generated NOT
+ * @author Florian Mantz
+ */
+public class Refactoring implements Comparable<Refactoring> {
+
+	/**
+	 * Id of the emf model refactoring.
+	 */
+	private final String id;
+	
+	/**
+	 * Name of the emf model refactoring.
+	 */
+	private final String name;
+	
+	/**
+	 * Namespace of the emf model refactoring.
+	 */
+	private final String namespaceUri;
+	
+	/**
+	 * GuiHandler object of the emf model refactoring.
+	 */
+	private final IGuiHandler gui;
+	
+	/**
+	 * Controller object of the emf model refactoring.
+	 */
+	private IController controller;
+	
+	/**
+	 * ConfigurationElement object of the emf model refactoring used
+	 * for lazy loading.
+	 */
+	private IConfigurationElement rawRefactoring;
+	
+	/**
+	 * Contructs an emf model refactoring with GuiHandler object.
+	 * @param id Id of the emf model refactoring.
+	 * @param name Name of the emf model refactoring.
+	 * @param namespaceUri Namespace of the emf model refactoring.
+	 * @param gui GuiHandler object of the emf model refactoring.
+	 */
+	private Refactoring
+		(String id, String name, String namespaceUri,IGuiHandler gui) {
+		this.id = id;
+		this.name = name;
+		this.namespaceUri = namespaceUri;
+		this.gui = gui;
+		this.gui.setParent(this);
+	}
+	
+	/**
+	 * Contructs an emf model refactoring with GuiHandler and a controller
+	 * object.
+	 * @param id Id of the emf model refactoring.
+	 * @param name Name of the emf model refactoring.
+	 * @param namespaceUri Namespace of the emf model refactoring.
+	 * @param gui GuiHandler object of the emf model refactoring.
+	 * @param controller Controller object of the emf model refactoring.
+	 */
+	public Refactoring
+		(String id, String name, String namespaceUri, 
+				IGuiHandler gui, IController controller){
+			this(id,name,namespaceUri,gui);
+			this.controller = controller;
+			this.controller.setParent(this);
+	}
+	
+	/**
+	 * Contructs an emf model refactoring with GuiHandler and a 
+	 * ConfigurationElement object.
+	 * @param id Id of the emf model refactoring.
+	 * @param name Name of the emf model refactoring.
+	 * @param namespaceUri Namespace of the emf model refactoring.
+	 * @param gui GuiHandler object of the emf model refactoring.
+	 * @param rawRefactoring ConfigurationElement object of the emf model 
+	 * refactoring. 
+	 */
+	public Refactoring
+		(String id, String name, String namespaceUri, 
+				IGuiHandler gui, IConfigurationElement rawRefactoring){
+			this(id,name,namespaceUri,gui);
+			this.rawRefactoring = rawRefactoring;
+	}
+	
+	/**
+	 * Gets the namespace of the emf model refactoring.
+	 * @return Namespace of the emf model refactoring.
+	 */
+	public String getNamespaceUri(){
+		return namespaceUri;
+	}
+	
+	/**
+	 * Gets the id of the emf model refactoring.
+	 * @return Id of the emf model refactoring.
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * Gets the name of the emf model refactoring.
+	 * @return Name of the emf model refactoring.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Gets the controller object of the emf model refactoring.
+	 * @return Controller object of the emf model refactoring.
+	 */
+	public IController getController() {
+		lazyLoadController();
+		return controller;
+	}
+	
+	private void lazyLoadController() {
+		if(null == controller){
+			try {
+				this.controller = 
+					(IController)rawRefactoring
+							.createExecutableExtension("controller");
+				this.controller.setParent(this);
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	/**
+	 * Gets the guiHandler object of the emf model refactoring.
+	 * @return GuiHandler object of the emf model refactoring.
+	 */
+	public IGuiHandler getGui() {
+		return gui;
+	}
+	
+	/**
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		return result;
+	}
+
+	/**
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Refactoring other = (Refactoring) obj;
+		if (id == null) {
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		return true;
+	}
+
+	/**
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	@Override
+	public int compareTo(Refactoring emfRefactoring) {
+		if(this.equals(emfRefactoring))return 0;
+		if(this.getName().equals(emfRefactoring.getName())){
+			return emfRefactoring.id.hashCode() - this.id.hashCode();
+		}else{
+		    return emfRefactoring.getName().compareTo(this.getName());	
+		}
+	}
+	
+	/**
+	 * Returns the emf model refactoring with the specified id.
+	 * @param id Id of the emf model refactoring to be returned.
+	 * @return Emf model refactoring with the specified id.
+	 */
+	public static Refactoring getById(String id){
+		for (Refactoring r : 
+						RefactoringManager.getInstance().getRefactorings()){
+			if(r.getId().equals(id)){
+				return r;
+			}
+		}
+		throw 
+			new IllegalArgumentException("Refactoring id does not exist!");
+	}
+
+	/**
+	 * Return a list of all registered emf model refactorings.
+	 * @return List of all registered emf model refactorings.
+	 */
+	public static List<Refactoring> getRefactorings(){
+		return new LinkedList<Refactoring>
+						(RefactoringManager.getInstance().getRefactorings());
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java
new file mode 100644
index 0000000..237b431
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java
@@ -0,0 +1,77 @@
+package org.eclipse.emf.refactor.refactoring.core;
+
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.refactor.refactoring.interfaces.IController;
+import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;
+
+public class RefactoringLoader {
+
+	/**
+	 * Loads a list of Refactoring objects out of the descriptions of
+	 * the corresponding extension point servings.
+	 * @return Created list of Refactoring objects.
+	 */
+	public static SortedSet<Refactoring> loadRefactorings() {
+		SortedSet<Refactoring> r = new TreeSet<Refactoring>();
+		IConfigurationElement[] rawRefactorings = 
+				Platform.getExtensionRegistry()
+					.getConfigurationElementsFor(ExtensionPointTags.EXTENSION_POINT_NAME);		
+		for(IConfigurationElement e : rawRefactorings){
+			try {
+				if(e.getName().equals(ExtensionPointTags.REFACTORING_TAG)){
+					Refactoring ref = createRefactoring(e);
+					if(null != ref)r.add(ref);
+				}				
+			} catch (Exception e2) {
+				e2.printStackTrace();
+			}
+		}
+		return r;
+	}
+	
+	/**
+	 * Creates an Refactoring object out of the description of
+	 * the corresponding extension point serving.
+	 * @param rawRefactoring description of the corresponding extension 
+	 * point serving. 
+	 * @return Created Refactoring object.
+	 */
+	private static Refactoring createRefactoring
+									(IConfigurationElement rawRefactoring){	
+		try {
+			final String id = rawRefactoring.getAttribute(ExtensionPointTags.REFACTORING_ID_TAG);
+			final String name = rawRefactoring.getAttribute(ExtensionPointTags.REFACTORING_MENULABEL_TAG);
+			IController controller = null;
+			IGuiHandler gui = null;
+			final String controllerClassName = 
+								rawRefactoring.getAttribute(ExtensionPointTags.REFACTORING_CONTROLLER_TAG);
+			final String guiClassName = 
+								rawRefactoring.getAttribute(ExtensionPointTags.REFACTORING_GUI_TAG);
+			final String namespaceUri = 
+								rawRefactoring.getAttribute(ExtensionPointTags.REFACTORING_NSURI_TAG);		
+			if(controllerClassName.equals(guiClassName)){				
+				controller = (IController)rawRefactoring
+								.createExecutableExtension(ExtensionPointTags.REFACTORING_CONTROLLER_TAG);
+				gui = (IGuiHandler)controller;				
+				return 
+					new Refactoring
+								(id, name, namespaceUri, gui, controller);
+				
+			} else {
+				//Only create gui, controller is lazy loaded:
+				gui = (IGuiHandler)rawRefactoring
+										.createExecutableExtension(ExtensionPointTags.REFACTORING_GUI_TAG);	
+				return 
+					new Refactoring
+								(id, name, namespaceUri, gui, rawRefactoring);			
+			}	
+		} catch (Throwable e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IController.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IController.java
new file mode 100644
index 0000000..14ae7e9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IController.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.refactor.refactoring.interfaces;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+
+/**
+ * Interface used for specifying the controller of a specific model refactoring.
+ * @generated NOT
+ * @author Thorsten Arendt
+ */
+public interface IController {
+	
+	/**
+	 * Sets the EmfRefactoring supported by the controller.
+	 * @param emfRefactoring EmfRefactoring supported by the controller.
+	 */
+	public void setParent(Refactoring refactoring);
+	
+	/**
+	 * Gets the EmfRefactoring supported by the controller.
+	 * @return EmfRefactoring supported by the controller.
+	 */
+	public Refactoring getParent();
+	
+	/**
+	 * Sets the selected EObject (invocation context of the model refactoring).
+	 * @param selection Invocation context of the model refactoring.
+	 */
+	public void setSelection(List<EObject> selection);
+
+	/**
+	 * Returns the DataManagement object of the model refactoring.
+	 * @return DataManagement object of the model refactoring.
+	 */
+	public IDataManagement getDataManagementObject();
+	
+	
+	/**
+	 * Returns the ltk RefactoringProcessor of the model refactoring.
+	 * @return Ltk RefactoringProcessor of the model refactoring.
+	 */
+	public RefactoringProcessor getLtkRefactoringProcessor();
+
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IDataManagement.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IDataManagement.java
new file mode 100644
index 0000000..4aac2c9
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IDataManagement.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.refactor.refactoring.interfaces;
+
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Port;
+
+/**
+ * Interface used for specific data concerning a model refactoring.
+ * @generated NOT
+ * @author Florian Mantz
+ */
+public interface IDataManagement {
+	
+	/**
+	 * Method for preselecting port values.
+	 * @param selection Invocation context of the model refactoring.
+	 */
+	public void preselect(List<EObject> selection);
+	
+	/**
+	 * Gets the input model refactoring port with the given name.
+	 * @param name Name of the input port to be returned.
+	 * @return Input model refactoring port with the given name.
+	 */
+	@SuppressWarnings("rawtypes")
+	public Port getInPortByName(String name);
+		
+	/**
+	 * Gets the output model refactoring port with the given name.
+	 * @param name Name of the output port to be returned.
+	 * @return Output model refactoring port with the given name.
+	 */
+	@SuppressWarnings("rawtypes")
+	public Port getOutPortByName(String name);
+
+	/**
+	 * Gets the input ports of the model refactoring.
+	 * @return Input ports of the model refactoring.
+	 */
+	@SuppressWarnings("rawtypes")
+	public Set<Port> getInPorts();
+	
+	/**
+	 * Gets the output ports of the model refactoring.
+	 * @return Output ports of the model refactoring.
+	 */
+	@SuppressWarnings("rawtypes")
+	public Set<Port> getOutPorts();
+		
+	/**
+	 * Initializes the output ports of the model refactoring.
+	 */
+	public void initOutPorts();
+
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IGuiHandler.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IGuiHandler.java
new file mode 100644
index 0000000..8807986
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/interfaces/IGuiHandler.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.refactor.refactoring.interfaces;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+
+/**
+ * Interface used for specifying gui topics of a specific model refactoring.
+ * @generated NOT
+ * @author Florian Mantz
+ */
+public interface IGuiHandler {
+	
+	/**
+	 * Sets the EmfRefactoring supported by the GuiHandler.
+	 * @param emfRefactoring EmfRefactoring supported by the GuiHandler.
+	 */
+	public void setParent(Refactoring refactoring);
+	
+	/**
+	 * Gets the EmfRefactoring supported by the GuiHandler.
+	 * @return EmfRefactoring supported by the GuiHandler.
+	 */
+	public Refactoring getParent();
+	
+	
+	/**
+	 * Specifies whether the model refactoring can be invoked from the
+	 * context menu of the given selection context.
+	 * @param selection Invocation context of the model refactoring.
+	 * @return true, if the  model refactoring can be invoked from the
+	 * context menu of the given selection context, false otherwise.
+	 */
+	public boolean showInMenu(List<EObject> selection);
+	
+	/**
+	 * Initializes the ltk RefactoringWzard of the model refactoring.
+	 * @return Ltk RefactoringWzard of the model refactoring.
+	 */
+	public RefactoringWizard show();
+
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java
new file mode 100644
index 0000000..eb133c6
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) Philipps University of Marburg. All rights reserved. 
+ * This program and the accompanying materials are made 
+ * available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Philipps University of Marburg - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.refactor.refactoring.managers;
+
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.core.RefactoringLoader;
+
+/**
+ * Main manager class of EMF Refactor wrt model refactorings.
+ * @generated NOT
+ * @author Florian Mantz
+ */
+public final class RefactoringManager {
+	
+	/**
+	 * Singleton instance. 
+	 */
+	private static RefactoringManager instance;
+		
+	/**
+	 * Set of all registered emf model refactorings. 
+	 */
+	private final SortedSet<Refactoring> refactorings = 
+									new TreeSet<Refactoring>();
+	
+	/**
+	 * Private constructor.
+	 */
+	private RefactoringManager() {	
+		this.refactorings.addAll(RefactoringLoader.loadRefactorings());
+		System.out.println("RefactoringManager initialized!");
+	}
+	
+	/**
+	 * Returns the singleton instance.
+	 * @return
+	 */
+	public static RefactoringManager getInstance() {
+		if(null == instance ) {
+			instance = new RefactoringManager();
+		}
+		return instance;
+	}
+	
+	/**
+	 * Gets a set of all registered emf model refactorings. 
+	 * @return Set of all registered emf model refactorings. 
+	 */
+	public SortedSet<Refactoring> getRefactorings() {
+		return refactorings;
+	}
+	
+}