Merge commit 'refs/changes/18/36218/1' of ssh://git.eclipse.org:29418/rmf/org.eclipse.rmf into develop

Conflicts:
	org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/presentation/Reqif10Editor.java
diff --git a/org.eclipse.rmf.ext.prostep/.classpath b/org.eclipse.rmf.ext.prostep/.classpath
new file mode 100644
index 0000000..3bc2475
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.rmf.ext.prostep/.gitignore b/org.eclipse.rmf.ext.prostep/.gitignore
new file mode 100644
index 0000000..70db735
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/.gitignore
@@ -0,0 +1,3 @@
+bin
+target
+work
\ No newline at end of file
diff --git a/org.eclipse.rmf.ext.prostep/.project b/org.eclipse.rmf.ext.prostep/.project
new file mode 100644
index 0000000..5fae4da
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.rmf.ext.prostep</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.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.rmf.ext.prostep/META-INF/MANIFEST.MF b/org.eclipse.rmf.ext.prostep/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c767bf1
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.rmf.ext.prostep;singleton:=true
+Bundle-Version: 0.11.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.rmf.ext.prostep,
+ org.eclipse.rmf.ext.prostep.impl,
+ org.eclipse.rmf.ext.prostep.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.rmf.ext.prostep/about.html b/org.eclipse.rmf.ext.prostep/about.html
new file mode 100644
index 0000000..c258ef5
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.rmf.ext.prostep/about.properties b/org.eclipse.rmf.ext.prostep/about.properties
new file mode 100644
index 0000000..9df1c58
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/about.properties
@@ -0,0 +1,21 @@
+###############################################################################

+# Copyright (c) 2014 itemis AG and others.

+# 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:

+#     Mark Broerkens (itemis AG) - initial API and implementation

+###############################################################################

+featureName=RMF - Requirements Modeling Framework

+

+featureText=RMF - Requirements Modeling Framework\n\

+Version: {featureVersion}\n\

+Build id: {0}\n\

+\n\

+(c) Copyright Eclipse contributors and others. 2011, 2014.  All rights reserved.\n\

+\n\

+The Requirements Modeling Framework is an EMF-based implementation of the OMG ReqIf standard\n\

+Visit http://www.eclipse.org/rmf/

+    
\ No newline at end of file
diff --git a/org.eclipse.rmf.ext.prostep/build.properties b/org.eclipse.rmf.ext.prostep/build.properties
new file mode 100644
index 0000000..bff842c
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/build.properties
@@ -0,0 +1,22 @@
+# Copyright (c) 2014 itemis AG and others.
+# 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:
+#     Mark Broerkens - initial API and implementation
+# 
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               about.properties,\
+               epl-v10.html,\
+               notice.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.rmf.ext.prostep/epl-v10.html b/org.eclipse.rmf.ext.prostep/epl-v10.html
new file mode 100644
index 0000000..3998fce
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.rmf.ext.prostep/model/prostep.ecore b/org.eclipse.rmf.ext.prostep/model/prostep.ecore
new file mode 100644
index 0000000..cc6e6b9
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/model/prostep.ecore
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="prostep" nsURI="http://www.prostep.org/reqif" nsPrefix="reqif-common">
+  <eClassifiers xsi:type="ecore:EClass" name="ExchangeConversation">
+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+      <details key="kind" value="elementOnly"/>
+      <details key="name" value="EXCHANGE-CONVERSATION"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+        <details key="kind" value="element"/>
+        <details key="name" value="IDENTIFIER"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.rmf.ext.prostep/model/prostep.genmodel b/org.eclipse.rmf.ext.prostep/model/prostep.genmodel
new file mode 100644
index 0000000..d6c04c7
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/model/prostep.genmodel
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2014 itemis AG and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;&#xA;Contributors:&#xA;    Mark Broerkens - initial API and implementation&#xA;"
+    modelDirectory="/org.eclipse.rmf.ext.prostep/src" editDirectory="" editorDirectory=""
+    modelPluginID="org.eclipse.rmf.ext.prostep" modelName="Prostep" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    testsDirectory="" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+    copyrightFields="false" language="" operationReflection="true" importOrganizing="true">
+  <foreignModel>prostep.ecore</foreignModel>
+  <genPackages prefix="Prostep" basePackage="org.eclipse.rmf.ext" resource="XML" disposableProviderFactory="true"
+      ecorePackage="prostep.ecore#/">
+    <genClasses ecoreClass="prostep.ecore#//ExchangeConversation">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute prostep.ecore#//ExchangeConversation/identifier"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.rmf.ext.prostep/notice.html b/org.eclipse.rmf.ext.prostep/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.rmf.ext.prostep/plugin.properties b/org.eclipse.rmf.ext.prostep/plugin.properties
new file mode 100644
index 0000000..7aa4147
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/plugin.properties
@@ -0,0 +1,12 @@
+# Copyright (c) 2014 itemis AG and others.
+# 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:
+#     Mark Broerkens - initial API and implementation
+# 
+
+pluginName = RMF Core Tool Extension Prostep Model (Incubation)
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.rmf.ext.prostep/plugin.xml b/org.eclipse.rmf.ext.prostep/plugin.xml
new file mode 100644
index 0000000..b064b2e
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/plugin.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2014 itemis AG and others.
+ 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:
+     Mark Broerkens - initial API and implementation
+ 
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated prostep -->
+      <package
+            uri="http://www.prostep.org/reqif"
+            class="org.eclipse.rmf.ext.prostep.ProstepPackage"
+            genModel="model/prostep.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.extension_parser">
+      <!-- @generated prostep -->
+      <parser
+            type="prostep"
+            class="org.eclipse.rmf.ext.prostep.util.ProstepResourceFactoryImpl"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.rmf.ext.prostep/pom.xml b/org.eclipse.rmf.ext.prostep/pom.xml
new file mode 100644
index 0000000..bb9f7cc
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ <copyright>
+Copyright (c) 2012 itemis AG.
+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:
+    Mark Broerkens - initial API and implementation
+ </copyright>
+
+-->
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.rmf</groupId>
+		<artifactId>org.eclipse.rmf.releng</artifactId>
+		<version>0.11.0-SNAPSHOT</version>
+		<relativePath>../org.eclipse.rmf.releng/pom.xml</relativePath>
+	</parent>
+	<artifactId>org.eclipse.rmf.ext.prostep</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<groupId>org.eclipse.rmf.plugins</groupId>
+	<properties>
+    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  	</properties>
+</project>
\ No newline at end of file
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ExchangeConversation.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ExchangeConversation.java
new file mode 100644
index 0000000..eb74bbc
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ExchangeConversation.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Exchange Conversation</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.rmf.ext.prostep.ExchangeConversation#getIdentifier <em>Identifier</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.rmf.ext.prostep.ProstepPackage#getExchangeConversation()
+ * @model extendedMetaData="kind='elementOnly' name='EXCHANGE-CONVERSATION'"
+ * @generated
+ */
+public interface ExchangeConversation extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Identifier</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Identifier</em>' attribute.
+	 * @see #setIdentifier(String)
+	 * @see org.eclipse.rmf.ext.prostep.ProstepPackage#getExchangeConversation_Identifier()
+	 * @model extendedMetaData="kind='element' name='IDENTIFIER'"
+	 * @generated
+	 */
+	String getIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.rmf.ext.prostep.ExchangeConversation#getIdentifier <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Identifier</em>' attribute.
+	 * @see #getIdentifier()
+	 * @generated
+	 */
+	void setIdentifier(String value);
+
+} // ExchangeConversation
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ProstepFactory.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ProstepFactory.java
new file mode 100644
index 0000000..e07aaa0
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ProstepFactory.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.rmf.ext.prostep.ProstepPackage
+ * @generated
+ */
+public interface ProstepFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ProstepFactory eINSTANCE = org.eclipse.rmf.ext.prostep.impl.ProstepFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Exchange Conversation</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Exchange Conversation</em>'.
+	 * @generated
+	 */
+	ExchangeConversation createExchangeConversation();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ProstepPackage getProstepPackage();
+
+} //ProstepFactory
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ProstepPackage.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ProstepPackage.java
new file mode 100644
index 0000000..0d50fce
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/ProstepPackage.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.rmf.ext.prostep.ProstepFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ProstepPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "prostep";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://www.prostep.org/reqif";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "reqif-common";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ProstepPackage eINSTANCE = org.eclipse.rmf.ext.prostep.impl.ProstepPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.rmf.ext.prostep.impl.ExchangeConversationImpl <em>Exchange Conversation</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.rmf.ext.prostep.impl.ExchangeConversationImpl
+	 * @see org.eclipse.rmf.ext.prostep.impl.ProstepPackageImpl#getExchangeConversation()
+	 * @generated
+	 */
+	int EXCHANGE_CONVERSATION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXCHANGE_CONVERSATION__IDENTIFIER = 0;
+
+	/**
+	 * The number of structural features of the '<em>Exchange Conversation</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXCHANGE_CONVERSATION_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Exchange Conversation</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXCHANGE_CONVERSATION_OPERATION_COUNT = 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.rmf.ext.prostep.ExchangeConversation <em>Exchange Conversation</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Exchange Conversation</em>'.
+	 * @see org.eclipse.rmf.ext.prostep.ExchangeConversation
+	 * @generated
+	 */
+	EClass getExchangeConversation();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.rmf.ext.prostep.ExchangeConversation#getIdentifier <em>Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Identifier</em>'.
+	 * @see org.eclipse.rmf.ext.prostep.ExchangeConversation#getIdentifier()
+	 * @see #getExchangeConversation()
+	 * @generated
+	 */
+	EAttribute getExchangeConversation_Identifier();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ProstepFactory getProstepFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.rmf.ext.prostep.impl.ExchangeConversationImpl <em>Exchange Conversation</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.rmf.ext.prostep.impl.ExchangeConversationImpl
+		 * @see org.eclipse.rmf.ext.prostep.impl.ProstepPackageImpl#getExchangeConversation()
+		 * @generated
+		 */
+		EClass EXCHANGE_CONVERSATION = eINSTANCE.getExchangeConversation();
+
+		/**
+		 * The meta object literal for the '<em><b>Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXCHANGE_CONVERSATION__IDENTIFIER = eINSTANCE.getExchangeConversation_Identifier();
+
+	}
+
+} //ProstepPackage
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ExchangeConversationImpl.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ExchangeConversationImpl.java
new file mode 100644
index 0000000..5911611
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ExchangeConversationImpl.java
@@ -0,0 +1,172 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.rmf.ext.prostep.ExchangeConversation;
+import org.eclipse.rmf.ext.prostep.ProstepPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Exchange Conversation</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.rmf.ext.prostep.impl.ExchangeConversationImpl#getIdentifier <em>Identifier</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ExchangeConversationImpl extends MinimalEObjectImpl.Container implements ExchangeConversation {
+	/**
+	 * The default value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String identifier = IDENTIFIER_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExchangeConversationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ProstepPackage.Literals.EXCHANGE_CONVERSATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getIdentifier() {
+		return identifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIdentifier(String newIdentifier) {
+		String oldIdentifier = identifier;
+		identifier = newIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ProstepPackage.EXCHANGE_CONVERSATION__IDENTIFIER, oldIdentifier, identifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ProstepPackage.EXCHANGE_CONVERSATION__IDENTIFIER:
+				return getIdentifier();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ProstepPackage.EXCHANGE_CONVERSATION__IDENTIFIER:
+				setIdentifier((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ProstepPackage.EXCHANGE_CONVERSATION__IDENTIFIER:
+				setIdentifier(IDENTIFIER_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ProstepPackage.EXCHANGE_CONVERSATION__IDENTIFIER:
+				return IDENTIFIER_EDEFAULT == null ? identifier != null : !IDENTIFIER_EDEFAULT.equals(identifier);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (identifier: ");
+		result.append(identifier);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ExchangeConversationImpl
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ProstepFactoryImpl.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ProstepFactoryImpl.java
new file mode 100644
index 0000000..ddd1736
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ProstepFactoryImpl.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.rmf.ext.prostep.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ProstepFactoryImpl extends EFactoryImpl implements ProstepFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ProstepFactory init() {
+		try {
+			ProstepFactory theProstepFactory = (ProstepFactory)EPackage.Registry.INSTANCE.getEFactory(ProstepPackage.eNS_URI);
+			if (theProstepFactory != null) {
+				return theProstepFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ProstepFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ProstepPackage.EXCHANGE_CONVERSATION: return createExchangeConversation();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExchangeConversation createExchangeConversation() {
+		ExchangeConversationImpl exchangeConversation = new ExchangeConversationImpl();
+		return exchangeConversation;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepPackage getProstepPackage() {
+		return (ProstepPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ProstepPackage getPackage() {
+		return ProstepPackage.eINSTANCE;
+	}
+
+} //ProstepFactoryImpl
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ProstepPackageImpl.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ProstepPackageImpl.java
new file mode 100644
index 0000000..0b5b1ba
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/impl/ProstepPackageImpl.java
@@ -0,0 +1,214 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.rmf.ext.prostep.ExchangeConversation;
+import org.eclipse.rmf.ext.prostep.ProstepFactory;
+import org.eclipse.rmf.ext.prostep.ProstepPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ProstepPackageImpl extends EPackageImpl implements ProstepPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass exchangeConversationEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.rmf.ext.prostep.ProstepPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ProstepPackageImpl() {
+		super(eNS_URI, ProstepFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ProstepPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ProstepPackage init() {
+		if (isInited) return (ProstepPackage)EPackage.Registry.INSTANCE.getEPackage(ProstepPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ProstepPackageImpl theProstepPackage = (ProstepPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ProstepPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ProstepPackageImpl());
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theProstepPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theProstepPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theProstepPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ProstepPackage.eNS_URI, theProstepPackage);
+		return theProstepPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExchangeConversation() {
+		return exchangeConversationEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExchangeConversation_Identifier() {
+		return (EAttribute)exchangeConversationEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepFactory getProstepFactory() {
+		return (ProstepFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		exchangeConversationEClass = createEClass(EXCHANGE_CONVERSATION);
+		createEAttribute(exchangeConversationEClass, EXCHANGE_CONVERSATION__IDENTIFIER);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(exchangeConversationEClass, ExchangeConversation.class, "ExchangeConversation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getExchangeConversation_Identifier(), ecorePackage.getEString(), "identifier", null, 0, 1, ExchangeConversation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+
+		// Create annotations
+		// http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+		createExtendedMetaDataAnnotations();
+	}
+
+	/**
+	 * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createExtendedMetaDataAnnotations() {
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";	
+		addAnnotation
+		  (exchangeConversationEClass, 
+		   source, 
+		   new String[] {
+			 "kind", "elementOnly",
+			 "name", "EXCHANGE-CONVERSATION"
+		   });	
+		addAnnotation
+		  (getExchangeConversation_Identifier(), 
+		   source, 
+		   new String[] {
+			 "kind", "element",
+			 "name", "IDENTIFIER"
+		   });
+	}
+
+} //ProstepPackageImpl
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepAdapterFactory.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepAdapterFactory.java
new file mode 100644
index 0000000..eeb7c63
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepAdapterFactory.java
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.rmf.ext.prostep.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.rmf.ext.prostep.ProstepPackage
+ * @generated
+ */
+public class ProstepAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ProstepPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ProstepPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProstepSwitch<Adapter> modelSwitch =
+		new ProstepSwitch<Adapter>() {
+			@Override
+			public Adapter caseExchangeConversation(ExchangeConversation object) {
+				return createExchangeConversationAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.rmf.ext.prostep.ExchangeConversation <em>Exchange Conversation</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.rmf.ext.prostep.ExchangeConversation
+	 * @generated
+	 */
+	public Adapter createExchangeConversationAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ProstepAdapterFactory
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepResourceFactoryImpl.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepResourceFactoryImpl.java
new file mode 100644
index 0000000..1c03a0a
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepResourceFactoryImpl.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.util;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource Factory</b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.rmf.ext.prostep.util.ProstepResourceImpl
+ * @generated
+ */
+public class ProstepResourceFactoryImpl extends ResourceFactoryImpl {
+	/**
+	 * Creates an instance of the resource factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepResourceFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * Creates an instance of the resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Resource createResource(URI uri) {
+		XMLResource result = new ProstepResourceImpl(uri);
+		result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
+		result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
+
+		result.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
+
+		result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
+		result.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
+
+		result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);
+		return result;
+	}
+
+} //ProstepResourceFactoryImpl
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepResourceImpl.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepResourceImpl.java
new file mode 100644
index 0000000..9eee499
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepResourceImpl.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.util;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource </b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.rmf.ext.prostep.util.ProstepResourceFactoryImpl
+ * @generated
+ */
+public class ProstepResourceImpl extends XMLResourceImpl {
+	/**
+	 * Creates an instance of the resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param uri the URI of the new resource.
+	 * @generated
+	 */
+	public ProstepResourceImpl(URI uri) {
+		super(uri);
+	}
+
+} //ProstepResourceImpl
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepSwitch.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepSwitch.java
new file mode 100644
index 0000000..41961ee
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepSwitch.java
@@ -0,0 +1,119 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.rmf.ext.prostep.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.rmf.ext.prostep.ProstepPackage
+ * @generated
+ */
+public class ProstepSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ProstepPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ProstepPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @parameter ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ProstepPackage.EXCHANGE_CONVERSATION: {
+				ExchangeConversation exchangeConversation = (ExchangeConversation)theEObject;
+				T result = caseExchangeConversation(exchangeConversation);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Exchange Conversation</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Exchange Conversation</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseExchangeConversation(ExchangeConversation object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //ProstepSwitch
diff --git a/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepXMLProcessor.java b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepXMLProcessor.java
new file mode 100644
index 0000000..e432912
--- /dev/null
+++ b/org.eclipse.rmf.ext.prostep/src/org/eclipse/rmf/ext/prostep/util/ProstepXMLProcessor.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2014 itemis AG and others.
+ * 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:
+ *     Mark Broerkens - initial API and implementation
+ * 
+ */
+package org.eclipse.rmf.ext.prostep.util;
+
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.xmi.util.XMLProcessor;
+
+import org.eclipse.rmf.ext.prostep.ProstepPackage;
+
+/**
+ * This class contains helper methods to serialize and deserialize XML documents
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ProstepXMLProcessor extends XMLProcessor {
+
+	/**
+	 * Public constructor to instantiate the helper.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProstepXMLProcessor() {
+		super((EPackage.Registry.INSTANCE));
+		ProstepPackage.eINSTANCE.eClass();
+	}
+	
+	/**
+	 * Register for "*" and "xml" file extensions the ProstepResourceFactoryImpl factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Map<String, Resource.Factory> getRegistrations() {
+		if (registrations == null) {
+			super.getRegistrations();
+			registrations.put(XML_EXTENSION, new ProstepResourceFactoryImpl());
+			registrations.put(STAR_EXTENSION, new ProstepResourceFactoryImpl());
+		}
+		return registrations;
+	}
+
+} //ProstepXMLProcessor
diff --git a/org.eclipse.rmf.releng.target/INDIGO_3_7_2.target b/org.eclipse.rmf.releng.target/INDIGO_3_7_2.target
deleted file mode 100644
index e6c686a..0000000
--- a/org.eclipse.rmf.releng.target/INDIGO_3_7_2.target
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target includeMode="feature" name="INDIGO_3_7_2" sequenceNumber="69">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>
-<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.5.0.v20110502-1600-67O-96SGR55YJeZPedcQnghI6uFA"/>
-<unit id="org.eclipse.xsd.sdk.feature.group" version="2.7.1.v20120130-0943"/>
-<unit id="org.eclipse.equinox.sdk.feature.group" version="3.7.1.R37x_v20110907-7M7W8i8eNV4WsRkue-4Vq4J6pCyW"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.7.2.v20120130-0943"/>
-<repository location="http://download.eclipse.org/releases/indigo"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.apache.poi" version="3.9.0.v201303080712"/>
-<unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
-<unit id="com.google.guava" version="10.0.1.v201203051515"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20130827064939/repository/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.compare.sdk.feature.group" version="1.3.3.v20130213-0806"/>
-<repository location="http://download.eclipse.org/modeling/emf/compare/updates/releases/1.3/R20130213-0806/"/>
-</location>
-</locations>
-</target>
diff --git a/org.eclipse.rmf.releng.target/JUNO_4_2_2.target b/org.eclipse.rmf.releng.target/JUNO_4_2_2.target
deleted file mode 100644
index 9463abf..0000000
--- a/org.eclipse.rmf.releng.target/JUNO_4_2_2.target
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="JUNO_4_2_2" sequenceNumber="14">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.apache.poi" version="3.9.0.v201303080712"/>
-<unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
-<unit id="com.google.guava" version="10.0.1.v201203051515"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20130827064939/repository/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.6.0.v20120328-0001-67T-96SGR75UNqZNTdeQnghI6uFA"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.8.3.v20130125-0826"/>
-<unit id="org.eclipse.xsd.sdk.feature.group" version="2.8.2.v20130125-0826"/>
-<unit id="org.eclipse.emf.compare.sdk.feature.group" version="1.3.3.v20130213-0806"/>
-<unit id="org.eclipse.jdt.feature.group" version="3.8.2.v20130116-090414-8-8nFu3FNOfwKLRuqgXKIy9z0I83"/>
-<unit id="org.eclipse.equinox.sdk.feature.group" version="3.8.0.v20121212-203907-7M7fA78g4_y-gDvtH0ZcFvhMPDZJ"/>
-<repository location="http://download.eclipse.org/releases/juno"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.compare.sdk.feature.group" version="1.3.3.v20130213-0806"/>
-<repository location="http://download.eclipse.org/modeling/emf/compare/updates/releases/1.3/R20130213-0806/"/>
-</location>
-</locations>
-</target>
diff --git a/org.eclipse.rmf.releng.target/KEPLER_4_3_0.target b/org.eclipse.rmf.releng.target/KEPLER_4_3_0.target
deleted file mode 100644
index 37134fb..0000000
--- a/org.eclipse.rmf.releng.target/KEPLER_4_3_0.target
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="KEPLER_4_3_0" sequenceNumber="16">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.xsd.sdk.feature.group" version="2.9.1.v20130902-0605"/>
-<unit id="org.eclipse.equinox.sdk.feature.group" version="3.9.0.v20130828-0031"/>
-<unit id="org.eclipse.jdt.feature.group" version="3.9.1.v20130911-1000"/>
-<unit id="org.eclipse.emf.compare.source.feature.group" version="2.1.1.201309031318"/>
-<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.7.0.201306111341"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.9.1.v20130902-0605"/>
-<repository location="http://download.eclipse.org/releases/kepler/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.apache.poi" version="3.9.0.v201303080712"/>
-<unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
-<unit id="com.google.guava" version="10.0.1.v201203051515"/>
-<unit id="org.junit" version="4.7.0.v4_7_0_v20130308-0411"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20130827064939/repository/"/>
-</location>
-</locations>
-</target>
diff --git a/org.eclipse.rmf.releng.target/indigo/indigo.target b/org.eclipse.rmf.releng.target/indigo/indigo.target
deleted file mode 100644
index dc0b113..0000000
--- a/org.eclipse.rmf.releng.target/indigo/indigo.target
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target includeMode="feature" name="INDIGO_3_7_2" sequenceNumber="68">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.agilemore.agilegrid.feature.feature.group" version="1.3.3"/>
-<repository location="http://agilegrid.sourceforge.net/agilegrid/updatesite-rmf/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>
-<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.5.0.v20110502-1600-67O-96SGR55YJeZPedcQnghI6uFA"/>
-<unit id="org.eclipse.xsd.sdk.feature.group" version="2.7.1.v20120130-0943"/>
-<unit id="org.eclipse.equinox.sdk.feature.group" version="3.7.1.R37x_v20110907-7M7W8i8eNV4WsRkue-4Vq4J6pCyW"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.7.2.v20120130-0943"/>
-<repository location="http://download.eclipse.org/releases/indigo"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.apache.poi" version="3.9.0.v201303080712"/>
-<unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
-<unit id="com.google.guava" version="10.0.1.v201203051515"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20130827064939/repository/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.compare.sdk.feature.group" version="1.3.3.v20130213-0806"/>
-<repository location="http://download.eclipse.org/modeling/emf/compare/updates/releases/1.3/R20130213-0806/"/>
-</location>
-</locations>
-</target>
diff --git a/org.eclipse.rmf.releng.target/juno/juno.target b/org.eclipse.rmf.releng.target/juno/juno.target
index 9f4297a..e0490fd 100644
--- a/org.eclipse.rmf.releng.target/juno/juno.target
+++ b/org.eclipse.rmf.releng.target/juno/juno.target
@@ -1,28 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="JUNO_4_2_2" sequenceNumber="13">
+<?pde version="3.8"?><target name="JUNO_4_2_2" sequenceNumber="14">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.6.0.v20120328-0001-67T-96SGR75UNqZNTdeQnghI6uFA"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.8.3.v20130125-0826"/>
-<unit id="org.eclipse.xsd.sdk.feature.group" version="2.8.2.v20130125-0826"/>
-<unit id="org.eclipse.emf.compare.sdk.feature.group" version="1.3.3.v20130213-0806"/>
-<unit id="org.eclipse.jdt.feature.group" version="3.8.2.v20130116-090414-8-8nFu3FNOfwKLRuqgXKIy9z0I83"/>
-<unit id="org.eclipse.equinox.sdk.feature.group" version="3.8.0.v20121212-203907-7M7fA78g4_y-gDvtH0ZcFvhMPDZJ"/>
-<repository location="http://download.eclipse.org/releases/juno"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
 <unit id="org.apache.poi" version="3.9.0.v201303080712"/>
 <unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
 <unit id="com.google.guava" version="10.0.1.v201203051515"/>
 <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20130827064939/repository/"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.agilemore.agilegrid.feature.feature.group" version="1.3.3"/>
-<repository location="http://agilegrid.sourceforge.net/agilegrid/updatesite-rmf/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.compare.sdk.feature.group" version="1.3.3.v20130213-0806"/>
-<repository location="http://download.eclipse.org/modeling/emf/compare/updates/releases/1.3/R20130213-0806/"/>
+<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.6.0.v20120328-0001-67T-96SGR75UNqZNTdeQnghI6uFA"/>
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.8.3.v20130125-0826"/>
+<unit id="org.eclipse.xsd.sdk.feature.group" version="2.8.2.v20130125-0826"/>
+<unit id="org.eclipse.jdt.feature.group" version="3.8.2.v20130116-090414-8-8nFu3FNOfwKLRuqgXKIy9z0I83"/>
+<unit id="org.eclipse.equinox.sdk.feature.group" version="3.8.0.v20121212-203907-7M7fA78g4_y-gDvtH0ZcFvhMPDZJ"/>
+<repository location="http://download.eclipse.org/releases/juno"/>
 </location>
 </locations>
 </target>
diff --git a/org.eclipse.rmf.releng.target/kepler/kepler.target b/org.eclipse.rmf.releng.target/kepler/kepler.target
index 77a43b3..b0bb2c1 100644
--- a/org.eclipse.rmf.releng.target/kepler/kepler.target
+++ b/org.eclipse.rmf.releng.target/kepler/kepler.target
@@ -2,10 +2,6 @@
 <?pde version="3.8"?><target name="KEPLER_4_3_0" sequenceNumber="15">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.agilemore.agilegrid.feature.feature.group" version="1.3.3"/>
-<repository location="http://agilegrid.sourceforge.net/agilegrid/updatesite-rmf/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
 <unit id="org.apache.poi" version="3.9.0.v201303080712"/>
 <unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
 <unit id="com.google.guava" version="10.0.1.v201203051515"/>
@@ -16,7 +12,6 @@
 <unit id="org.eclipse.xsd.sdk.feature.group" version="2.9.1.v20130902-0605"/>
 <unit id="org.eclipse.equinox.sdk.feature.group" version="3.9.0.v20130828-0031"/>
 <unit id="org.eclipse.jdt.feature.group" version="3.9.1.v20130911-1000"/>
-<unit id="org.eclipse.emf.compare.source.feature.group" version="2.1.1.201309031318"/>
 <unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.7.0.201306111341"/>
 <unit id="org.eclipse.emf.sdk.feature.group" version="2.9.1.v20130902-0605"/>
 <repository location="http://download.eclipse.org/releases/kepler/"/>
diff --git a/org.eclipse.rmf.releng.target/luna/luna.target b/org.eclipse.rmf.releng.target/luna/luna.target
new file mode 100644
index 0000000..126cfc6
--- /dev/null
+++ b/org.eclipse.rmf.releng.target/luna/luna.target
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="LUNA" sequenceNumber="22">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.sdk.ide" version="4.4.1.M20140925-0400"/>
+<unit id="org.eclipse.equinox.executable.feature.group" version="3.6.100.v20140819-1617"/>
+<repository location="http://download.eclipse.org/eclipse/updates/4.4"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.10.1.v20140901-1055"/>
+<unit id="org.eclipse.xsd.sdk.feature.group" version="2.10.0.v20140901-1055"/>
+<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.8.0.201405281429"/>
+<repository location="http://download.eclipse.org/releases/luna"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="com.google.guava" version="15.0.0.v201403281430"/>
+<unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
+<unit id="org.apache.poi" version="3.9.0.v201405241750"/>
+<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository"/>
+</location>
+</locations>
+</target>
diff --git a/org.eclipse.rmf.releng.target/indigo/pom.xml b/org.eclipse.rmf.releng.target/luna/pom.xml
similarity index 94%
rename from org.eclipse.rmf.releng.target/indigo/pom.xml
rename to org.eclipse.rmf.releng.target/luna/pom.xml
index c6a3f70..6fd4e26 100644
--- a/org.eclipse.rmf.releng.target/indigo/pom.xml
+++ b/org.eclipse.rmf.releng.target/luna/pom.xml
@@ -9,7 +9,7 @@
 		<relativePath>../../org.eclipse.rmf.releng/pom.xml</relativePath>

 	</parent>

 	<groupId>org.eclipse.rmf.releng.target</groupId>

-	<artifactId>indigo</artifactId>

+	<artifactId>luna</artifactId>

 	<version>0.11.0-SNAPSHOT</version>

 	<packaging>eclipse-target-definition</packaging>

 </project>

diff --git a/org.eclipse.rmf.releng.target/mars/mars.target b/org.eclipse.rmf.releng.target/mars/mars.target
new file mode 100644
index 0000000..5abed5b
--- /dev/null
+++ b/org.eclipse.rmf.releng.target/mars/mars.target
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="MARS" sequenceNumber="22">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.sdk.ide" version="4.5.0.I20140918-0330"/>
+<unit id="org.eclipse.equinox.executable.feature.group" version="3.6.100.v20140918-0709"/>
+<repository location="http://download.eclipse.org/eclipse/updates/4.5milestones"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.11.0.v20140929-0830"/>
+<unit id="org.eclipse.emf.validation.sdk.feature.group" version="1.9.0.201409241438"/>
+<unit id="org.eclipse.xsd.sdk.feature.group" version="2.10.0.v20140929-0830"/>
+<repository location="http://download.eclipse.org/releases/staging"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="com.google.guava" version="15.0.0.v201403281430"/>
+<unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
+<unit id="org.apache.poi" version="3.9.0.v201405241750"/>
+<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository"/>
+</location>
+</locations>
+</target>
diff --git a/org.eclipse.rmf.releng.target/indigo/pom.xml b/org.eclipse.rmf.releng.target/mars/pom.xml
similarity index 94%
copy from org.eclipse.rmf.releng.target/indigo/pom.xml
copy to org.eclipse.rmf.releng.target/mars/pom.xml
index c6a3f70..2ced809 100644
--- a/org.eclipse.rmf.releng.target/indigo/pom.xml
+++ b/org.eclipse.rmf.releng.target/mars/pom.xml
@@ -9,7 +9,7 @@
 		<relativePath>../../org.eclipse.rmf.releng/pom.xml</relativePath>

 	</parent>

 	<groupId>org.eclipse.rmf.releng.target</groupId>

-	<artifactId>indigo</artifactId>

+	<artifactId>mars</artifactId>

 	<version>0.11.0-SNAPSHOT</version>

 	<packaging>eclipse-target-definition</packaging>

 </project>

diff --git a/org.eclipse.rmf.releng/launcher/INDIGO_3_7_2.launch b/org.eclipse.rmf.releng/launcher/LUNA.launch
similarity index 88%
rename from org.eclipse.rmf.releng/launcher/INDIGO_3_7_2.launch
rename to org.eclipse.rmf.releng/launcher/LUNA.launch
index 13032bc..e4fe2ef 100644
--- a/org.eclipse.rmf.releng/launcher/INDIGO_3_7_2.launch
+++ b/org.eclipse.rmf.releng/launcher/LUNA.launch
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
 <booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
-<stringAttribute key="M2_GOALS" value="clean verify -X"/>
+<stringAttribute key="M2_GOALS" value="clean verify"/>
 <booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
 <booleanAttribute key="M2_OFFLINE" value="false"/>
-<stringAttribute key="M2_PROFILES" value="platform-indigo"/>
+<stringAttribute key="M2_PROFILES" value="platform-kepler"/>
 <listAttribute key="M2_PROPERTIES"/>
 <stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
 <booleanAttribute key="M2_SKIP_TESTS" value="false"/>
diff --git a/org.eclipse.rmf.releng/launcher/INDIGO_3_7_2.launch b/org.eclipse.rmf.releng/launcher/MARS.launch
similarity index 88%
copy from org.eclipse.rmf.releng/launcher/INDIGO_3_7_2.launch
copy to org.eclipse.rmf.releng/launcher/MARS.launch
index 13032bc..430e7c7 100644
--- a/org.eclipse.rmf.releng/launcher/INDIGO_3_7_2.launch
+++ b/org.eclipse.rmf.releng/launcher/MARS.launch
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
 <booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
-<stringAttribute key="M2_GOALS" value="clean verify -X"/>
+<stringAttribute key="M2_GOALS" value="clean verify"/>
 <booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
 <booleanAttribute key="M2_OFFLINE" value="false"/>
-<stringAttribute key="M2_PROFILES" value="platform-indigo"/>
+<stringAttribute key="M2_PROFILES" value="platform-mars"/>
 <listAttribute key="M2_PROPERTIES"/>
 <stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
 <booleanAttribute key="M2_SKIP_TESTS" value="false"/>
diff --git a/org.eclipse.rmf.releng/pom.xml b/org.eclipse.rmf.releng/pom.xml
index 2e6f5a5..e6e6b89 100644
--- a/org.eclipse.rmf.releng/pom.xml
+++ b/org.eclipse.rmf.releng/pom.xml
@@ -68,6 +68,8 @@
 		<module>../org.eclipse.rmf.reqif10.constraints</module>

 		<module>../org.eclipse.rmf.reqif10.serialization</module>

 		<module>../org.eclipse.rmf.serialization</module>

+		<module>../org.eclipse.rmf.ext.prostep</module>

+		

 		<module>../org.eclipse.rmf.reqif10.feature</module>

 		<module>../org.eclipse.rmf.reqif10.thirdparty.feature</module>

 		<module>../org.eclipse.rmf.reqif10.sdk.feature</module>

@@ -75,6 +77,7 @@
 		<module>../org.eclipse.rmf.tests.reqif10.serialization</module>

 		<module>../org.eclipse.rmf.tests.reqif10.common</module>

 		<module>../org.eclipse.rmf.tests.reqif10.constraints</module>

+		<module>../org.eclipse.rmf.tests.ext.prostep</module>

 		<module>../org.eclipse.rmf.tests.reqif10.feature</module>

 

 		<!-- ReqIF UI ProR -->

@@ -89,6 +92,7 @@
 		<module>../org.eclipse.rmf.reqif10.search.edit</module>

 		<module>../org.eclipse.rmf.reqif10.search.ui</module>

 		<module>../org.eclipse.rmf.reqif10.pror.genhtml</module>

+		<module>../org.eclipse.rmf.reqif10.csv.importer</module>

 		<module>../org.eclipse.rmf.reqif10.pror.feature</module>

 		<module>../org.eclipse.rmf.reqif10.pror.sdk.feature</module>

 

@@ -243,7 +247,6 @@
 						</artifact>

 					</target>

 					<environments>

-<!--

 						<environment>

 							<os>win32</os>

 							<ws>win32</ws>

@@ -264,7 +267,6 @@
 							<ws>gtk</ws>

 							<arch>x86</arch>

 						</environment>

--->

 						<environment>

 							<os>linux</os>

 							<ws>gtk</ws>

@@ -354,9 +356,9 @@
 	</build>

 	<profiles>

 	    <profile>

-			<id>platform-indigo</id>

+			<id>platform-mars</id>

 			<properties>

-				<platform.version.name>indigo</platform.version.name>

+				<platform.version.name>mars</platform.version.name>

 			</properties>

 		</profile>

 		<profile>

diff --git a/org.eclipse.rmf.reqif10.csv.importer/.classpath b/org.eclipse.rmf.reqif10.csv.importer/.classpath
new file mode 100644
index 0000000..d43b31b
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="lib" path="lib/opencsv-1.8.jar"/>
+	<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.rmf.reqif10.csv.importer/.gitignore b/org.eclipse.rmf.reqif10.csv.importer/.gitignore
new file mode 100644
index 0000000..e0e1cc4
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target
diff --git a/org.eclipse.rmf.reqif10.csv.importer/.project b/org.eclipse.rmf.reqif10.csv.importer/.project
new file mode 100644
index 0000000..9afedae
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.rmf.reqif10.csv.importer</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.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.rmf.reqif10.csv.importer/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.rmf.reqif10.csv.importer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/.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.rmf.reqif10.csv.importer/META-INF/MANIFEST.MF b/org.eclipse.rmf.reqif10.csv.importer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0c2d847
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.rmf.reqif10.csv.importer;singleton:=true

+Bundle-Version: 0.11.0.qualifier

+Bundle-ClassPath: .,

+ lib/opencsv-1.8.jar

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: JavaSE-1.6

+Export-Package: org.eclipse.rmf.reqif10.csv.importer.mapping,

+ org.eclipse.rmf.reqif10.csv.importer.mapping.impl,

+ org.eclipse.rmf.reqif10.csv.importer.mapping.util

+Require-Bundle: org.eclipse.emf.edit;visibility:=reexport,

+ org.eclipse.jface.databinding,

+ org.eclipse.emf.databinding.edit,

+ org.eclipse.core.databinding.property,

+ org.eclipse.rmf.reqif10.pror.editor;bundle-version="0.11.0",

+ org.eclipse.rmf.reqif10.xhtml.edit;bundle-version="0.11.0",

+ org.eclipse.rmf.serialization;bundle-version="0.11.0"

+Bundle-ActivationPolicy: lazy

+Bundle-Activator: org.eclipse.rmf.reqif10.csv.importer.CSVImporterPlugin$Implementation

diff --git a/org.eclipse.rmf.reqif10.csv.importer/build.properties b/org.eclipse.rmf.reqif10.csv.importer/build.properties
new file mode 100644
index 0000000..cc3bf16
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/build.properties
@@ -0,0 +1,13 @@
+#

+

+bin.includes = .,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties,\

+               lib/,\

+               icons/,\

+               epl-v10.html,\

+               notice.html

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.rmf.reqif10.csv.importer/epl-v10.html b/org.eclipse.rmf.reqif10.csv.importer/epl-v10.html
new file mode 100644
index 0000000..3998fce
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/Horizontal_Orientation.gif b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/Horizontal_Orientation.gif
new file mode 100644
index 0000000..f4c14a4
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/Horizontal_Orientation.gif
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/MappingItem.png b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/MappingItem.png
new file mode 100644
index 0000000..aa79bc1
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/MappingItem.png
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/MappingLibrary.png b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/MappingLibrary.png
new file mode 100644
index 0000000..ee0f99a
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/MappingLibrary.png
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/ReqIf.png b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/ReqIf.png
new file mode 100644
index 0000000..f77086c
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/ReqIf.png
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/Vertical_Orientation.gif b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/Vertical_Orientation.gif
new file mode 100644
index 0000000..f685839
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/Vertical_Orientation.gif
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/excel.png b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/excel.png
new file mode 100644
index 0000000..4b167df
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/icons/full/obj16/excel.png
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/lib/opencsv-1.8.jar b/org.eclipse.rmf.reqif10.csv.importer/lib/opencsv-1.8.jar
new file mode 100644
index 0000000..cc8200b
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/lib/opencsv-1.8.jar
Binary files differ
diff --git a/org.eclipse.rmf.reqif10.csv.importer/model/mapping.ecore b/org.eclipse.rmf.reqif10.csv.importer/model/mapping.ecore
new file mode 100644
index 0000000..da145c2
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/model/mapping.ecore
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="mapping" nsURI="mapping" nsPrefix="mapping">

+  <eClassifiers xsi:type="ecore:EClass" name="MappingItem">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attributeName" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral=""/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dataType" lowerBound="1"

+        eType="#//DataType"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnId" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral=""/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MappingLibrary">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="items" upperBound="-1"

+        eType="#//MappingItem" containment="true"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="DataType">

+    <eLiterals name="String"/>

+    <eLiterals name="Boolean" value="1"/>

+    <eLiterals name="Integer" value="2"/>

+    <eLiterals name="Real" value="3"/>

+    <eLiterals name="Date" value="4"/>

+    <eLiterals name="Enumeration" value="5"/>

+    <eLiterals name="XHTML" value="6"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.rmf.reqif10.csv.importer/model/mapping.genmodel b/org.eclipse.rmf.reqif10.csv.importer/model/mapping.genmodel
new file mode 100644
index 0000000..99da384
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/model/mapping.genmodel
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.rmf.reqif10.csv.importer/src" creationIcons="false"

+    modelPluginID="org.eclipse.rmf.reqif10.csv.importer" modelName="Mapping" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"

+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" copyrightFields="false"

+    operationReflection="true" importOrganizing="true">

+  <foreignModel>mapping.ecore</foreignModel>

+  <genPackages prefix="Mapping" basePackage="org.eclipse.rmf.reqif10.csv.importer"

+      disposableProviderFactory="true" ecorePackage="mapping.ecore#/">

+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="mapping.ecore#//DataType">

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/String"/>

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/Boolean"/>

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/Integer"/>

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/Real"/>

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/Date"/>

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/Enumeration"/>

+      <genEnumLiterals ecoreEnumLiteral="mapping.ecore#//DataType/XHTML"/>

+    </genEnums>

+    <genClasses image="false" ecoreClass="mapping.ecore#//MappingItem">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute mapping.ecore#//MappingItem/attributeName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute mapping.ecore#//MappingItem/dataType"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute mapping.ecore#//MappingItem/columnId"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="mapping.ecore#//MappingLibrary">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference mapping.ecore#//MappingLibrary/items"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.rmf.reqif10.csv.importer/notice.html b/org.eclipse.rmf.reqif10.csv.importer/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.rmf.reqif10.csv.importer/plugin.properties b/org.eclipse.rmf.reqif10.csv.importer/plugin.properties
new file mode 100644
index 0000000..fee64f2
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/plugin.properties
@@ -0,0 +1,27 @@
+pluginName = CSV Importer

+providerName = Eclipse Requirements Modeling Framework

+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.

+_UI_CreateChild_text = {0}

+_UI_CreateChild_text2 = {1} {0}

+_UI_CreateChild_text3 = {1}

+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature

+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.

+_UI_DataType_Boolean_literal = Boolean

+_UI_DataType_Date_literal = Date

+_UI_DataType_Enumeration_literal = Enumeration

+_UI_DataType_Integer_literal = Integer

+_UI_DataType_Real_literal = Real

+_UI_DataType_String_literal = String

+_UI_DataType_XHTML_literal = XHTML

+_UI_MappingItem_attributeName_feature = Attribute Name

+_UI_MappingItem_columnId_feature = Column Id

+_UI_MappingItem_dataType_feature = Data Type

+_UI_MappingItem_type = Item

+_UI_MappingLibrary_items_feature = Items

+_UI_MappingLibrary_type = Library

+_UI_PropertyDescriptor_description = The {0} of the {1}

+_UI_Unknown_datatype= Value

+_UI_Unknown_feature = Unspecified

+_UI_Unknown_type = Object

+_UI_HorizontalOrientation_label = Horizontal orientation

+_UI_VerticalOrientation_label = Vertical orientation
\ No newline at end of file
diff --git a/org.eclipse.rmf.reqif10.csv.importer/plugin.xml b/org.eclipse.rmf.reqif10.csv.importer/plugin.xml
new file mode 100644
index 0000000..a1b369d
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/plugin.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+-->

+

+<plugin>

+

+   <extension point="org.eclipse.emf.ecore.generated_package">

+      <!-- @generated mapping -->

+      <package

+            uri="mapping"

+            class="org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage"

+            genModel="model/mapping.genmodel"/>

+   </extension>

+

+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">

+      <!-- @generated mapping -->

+      <factory

+            uri="mapping"

+            class="org.eclipse.rmf.reqif10.csv.importer.mapping.provider.MappingItemProviderAdapterFactory"

+            supportedTypes=

+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider

+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider

+               org.eclipse.emf.edit.provider.ITreeItemContentProvider

+               org.eclipse.emf.edit.provider.IItemLabelProvider

+               org.eclipse.emf.edit.provider.IItemPropertySource"/>

+   </extension>

+

+   <extension

+         point="org.eclipse.ui.importWizards">

+      <wizard

+            category="org.eclipse.rmf.pror.import.category"

+            class="org.eclipse.rmf.reqif10.csv.importer.ui.wizards.CSVImportWziard"

+            icon="icons/full/obj16/excel.png"

+            id="org.eclipse.rmf.reqif10.csv.importer.ui.wizard"

+            name="CSV">

+      </wizard>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.rmf.reqif10.csv.importer/pom.xml b/org.eclipse.rmf.reqif10.csv.importer/pom.xml
new file mode 100644
index 0000000..4b347c8
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ <copyright>
+Copyright (c) 2014 Formal Mind GmbH.
+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:
+    Michael Jastram - initial API and implementation
+ </copyright>
+
+-->
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.rmf</groupId>
+		<artifactId>org.eclipse.rmf.releng</artifactId>
+		<version>0.11.0-SNAPSHOT</version>
+		<relativePath>../org.eclipse.rmf.releng/pom.xml</relativePath>
+	</parent>
+	<artifactId>org.eclipse.rmf.reqif10.csv.importer</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<groupId>org.eclipse.rmf.plugins</groupId>
+	<properties>
+    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  	</properties>
+</project>
\ No newline at end of file
diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/CSVImporterPlugin.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/CSVImporterPlugin.java
new file mode 100644
index 0000000..c34f3bf
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/CSVImporterPlugin.java
@@ -0,0 +1,75 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer;

+

+import org.eclipse.emf.common.EMFPlugin;

+import org.eclipse.emf.common.ui.EclipseUIPlugin;

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

+

+/**

+ * This is the central singleton for the plugin.

+ */

+public final class CSVImporterPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 */

+	public static final CSVImporterPlugin INSTANCE = new CSVImporterPlugin();

+

+	/**

+	 * Keep track of the singleton.

+	 */

+	private static Implementation plugin;

+

+	/**

+	 * Create the instance.

+	 */

+	public CSVImporterPlugin() {

+		super(new ResourceLocator[] {});

+	}

+

+	/**

+	 * Returns the singleton instance of the Eclipse plugin.

+	 * 

+	 * @return the singleton instance.

+	 */

+	@Override

+	public ResourceLocator getPluginResourceLocator() {

+		return plugin;

+	}

+

+	/**

+	 * Returns the singleton instance of the Eclipse plugin.

+	 * 

+	 * @return the singleton instance.

+	 */

+	public static Implementation getPlugin() {

+		return plugin;

+	}

+

+	/**

+	 * The actual implementation of the Eclipse <b>Plugin</b>.

+	 * 

+	 */

+	public static class Implementation extends EclipseUIPlugin {

+		/**

+		 * Creates an instance.

+		 */

+		public Implementation() {

+			super();

+

+			// Remember the static instance.

+			//

+			plugin = this;

+		}

+	}

+

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/DataType.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/DataType.java
new file mode 100644
index 0000000..105925a
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/DataType.java
@@ -0,0 +1,352 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping;

+

+import java.util.Arrays;

+import java.util.Collections;

+import java.util.List;

+

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

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the literals of the enumeration '<em><b>Data Type</b></em>',

+ * and utility methods for working with them.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getDataType()

+ * @model

+ * @generated

+ */

+public enum DataType implements Enumerator {

+	/**

+	 * The '<em><b>String</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #STRING_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	STRING(0, "String", "String"),

+

+	/**

+	 * The '<em><b>Boolean</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #BOOLEAN_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	BOOLEAN(1, "Boolean", "Boolean"),

+

+	/**

+	 * The '<em><b>Integer</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #INTEGER_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	INTEGER(2, "Integer", "Integer"),

+

+	/**

+	 * The '<em><b>Real</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #REAL_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	REAL(3, "Real", "Real"),

+

+	/**

+	 * The '<em><b>Date</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #DATE_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	DATE(4, "Date", "Date"),

+

+	/**

+	 * The '<em><b>Enumeration</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #ENUMERATION_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	ENUMERATION(5, "Enumeration", "Enumeration"),

+

+	/**

+	 * The '<em><b>XHTML</b></em>' literal object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #XHTML_VALUE

+	 * @generated

+	 * @ordered

+	 */

+	XHTML(6, "XHTML", "XHTML");

+

+	/**

+	 * The '<em><b>String</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>String</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #STRING

+	 * @model name="String"

+	 * @generated

+	 * @ordered

+	 */

+	public static final int STRING_VALUE = 0;

+

+	/**

+	 * The '<em><b>Boolean</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>Boolean</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #BOOLEAN

+	 * @model name="Boolean"

+	 * @generated

+	 * @ordered

+	 */

+	public static final int BOOLEAN_VALUE = 1;

+

+	/**

+	 * The '<em><b>Integer</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>Integer</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #INTEGER

+	 * @model name="Integer"

+	 * @generated

+	 * @ordered

+	 */

+	public static final int INTEGER_VALUE = 2;

+

+	/**

+	 * The '<em><b>Real</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>Real</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #REAL

+	 * @model name="Real"

+	 * @generated

+	 * @ordered

+	 */

+	public static final int REAL_VALUE = 3;

+

+	/**

+	 * The '<em><b>Date</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>Date</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #DATE

+	 * @model name="Date"

+	 * @generated

+	 * @ordered

+	 */

+	public static final int DATE_VALUE = 4;

+

+	/**

+	 * The '<em><b>Enumeration</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>Enumeration</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #ENUMERATION

+	 * @model name="Enumeration"

+	 * @generated

+	 * @ordered

+	 */

+	public static final int ENUMERATION_VALUE = 5;

+

+	/**

+	 * The '<em><b>XHTML</b></em>' literal value.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of '<em><b>XHTML</b></em>' literal object isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @see #XHTML

+	 * @model

+	 * @generated

+	 * @ordered

+	 */

+	public static final int XHTML_VALUE = 6;

+

+	/**

+	 * An array of all the '<em><b>Data Type</b></em>' enumerators.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static final DataType[] VALUES_ARRAY =

+		new DataType[] {

+			STRING,

+			BOOLEAN,

+			INTEGER,

+			REAL,

+			DATE,

+			ENUMERATION,

+			XHTML,

+		};

+

+	/**

+	 * A public read-only list of all the '<em><b>Data Type</b></em>' enumerators.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<DataType> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));

+

+	/**

+	 * Returns the '<em><b>Data Type</b></em>' literal with the specified literal value.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static DataType get(String literal) {

+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {

+			DataType result = VALUES_ARRAY[i];

+			if (result.toString().equals(literal)) {

+				return result;

+			}

+		}

+		return null;

+	}

+

+	/**

+	 * Returns the '<em><b>Data Type</b></em>' literal with the specified name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static DataType getByName(String name) {

+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {

+			DataType result = VALUES_ARRAY[i];

+			if (result.getName().equals(name)) {

+				return result;

+			}

+		}

+		return null;

+	}

+

+	/**

+	 * Returns the '<em><b>Data Type</b></em>' literal with the specified integer value.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static DataType get(int value) {

+		switch (value) {

+			case STRING_VALUE: return STRING;

+			case BOOLEAN_VALUE: return BOOLEAN;

+			case INTEGER_VALUE: return INTEGER;

+			case REAL_VALUE: return REAL;

+			case DATE_VALUE: return DATE;

+			case ENUMERATION_VALUE: return ENUMERATION;

+			case XHTML_VALUE: return XHTML;

+		}

+		return null;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private final int value;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private final String name;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private final String literal;

+

+	/**

+	 * Only this class can construct instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private DataType(int value, String name, String literal) {

+		this.value = value;

+		this.name = name;

+		this.literal = literal;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public int getValue() {

+	  return value;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getName() {

+	  return name;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getLiteral() {

+	  return literal;

+	}

+

+	/**

+	 * Returns the literal value of the enumerator, which is its string representation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		return literal;

+	}

+	

+} //DataType

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingFactory.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingFactory.java
new file mode 100644
index 0000000..95506de
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingFactory.java
@@ -0,0 +1,60 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping;

+

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

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage

+ * @generated

+ */

+public interface MappingFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	MappingFactory eINSTANCE = org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Item</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Item</em>'.

+	 * @generated

+	 */

+	MappingItem createMappingItem();

+

+	/**

+	 * Returns a new object of class '<em>Library</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Library</em>'.

+	 * @generated

+	 */

+	MappingLibrary createMappingLibrary();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	MappingPackage getMappingPackage();

+

+} //MappingFactory

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingItem.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingItem.java
new file mode 100644
index 0000000..4600478
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingItem.java
@@ -0,0 +1,118 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping;

+

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

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Item</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getAttributeName <em>Attribute Name</em>}</li>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getDataType <em>Data Type</em>}</li>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getColumnId <em>Column Id</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getMappingItem()

+ * @model

+ * @generated

+ */

+public interface MappingItem extends EObject {

+	/**

+	 * Returns the value of the '<em><b>Attribute Name</b></em>' attribute.

+	 * The default value is <code>""</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Attribute Name</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Attribute Name</em>' attribute.

+	 * @see #setAttributeName(String)

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getMappingItem_AttributeName()

+	 * @model default="" required="true"

+	 * @generated

+	 */

+	String getAttributeName();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getAttributeName <em>Attribute Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Attribute Name</em>' attribute.

+	 * @see #getAttributeName()

+	 * @generated

+	 */

+	void setAttributeName(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Data Type</b></em>' attribute.

+	 * The literals are from the enumeration {@link org.eclipse.rmf.reqif10.csv.importer.mapping.DataType}.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Data Type</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Data Type</em>' attribute.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.DataType

+	 * @see #setDataType(DataType)

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getMappingItem_DataType()

+	 * @model required="true"

+	 * @generated

+	 */

+	DataType getDataType();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getDataType <em>Data Type</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Data Type</em>' attribute.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.DataType

+	 * @see #getDataType()

+	 * @generated

+	 */

+	void setDataType(DataType value);

+

+	/**

+	 * Returns the value of the '<em><b>Column Id</b></em>' attribute.

+	 * The default value is <code>""</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Column Id</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Column Id</em>' attribute.

+	 * @see #setColumnId(String)

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getMappingItem_ColumnId()

+	 * @model default="" required="true"

+	 * @generated

+	 */

+	String getColumnId();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getColumnId <em>Column Id</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Column Id</em>' attribute.

+	 * @see #getColumnId()

+	 * @generated

+	 */

+	void setColumnId(String value);

+

+} // MappingItem

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingLibrary.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingLibrary.java
new file mode 100644
index 0000000..c197e59
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingLibrary.java
@@ -0,0 +1,51 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping;

+

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

+

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

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Library</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary#getItems <em>Items</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getMappingLibrary()

+ * @model

+ * @generated

+ */

+public interface MappingLibrary extends EObject {

+	/**

+	 * Returns the value of the '<em><b>Items</b></em>' containment reference list.

+	 * The list contents are of type {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem}.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Items</em>' containment reference list isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Items</em>' containment reference list.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#getMappingLibrary_Items()

+	 * @model containment="true"

+	 * @generated

+	 */

+	EList<MappingItem> getItems();

+

+} // MappingLibrary

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingPackage.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingPackage.java
new file mode 100644
index 0000000..82dc3f8
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/MappingPackage.java
@@ -0,0 +1,333 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping;

+

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

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

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

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

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

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each operation of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface MappingPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "mapping";

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "mapping";

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "mapping";

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	MappingPackage eINSTANCE = org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl <em>Item</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl#getMappingItem()

+	 * @generated

+	 */

+	int MAPPING_ITEM = 0;

+

+	/**

+	 * The feature id for the '<em><b>Attribute Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_ITEM__ATTRIBUTE_NAME = 0;

+

+	/**

+	 * The feature id for the '<em><b>Data Type</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_ITEM__DATA_TYPE = 1;

+

+	/**

+	 * The feature id for the '<em><b>Column Id</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_ITEM__COLUMN_ID = 2;

+

+	/**

+	 * The number of structural features of the '<em>Item</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_ITEM_FEATURE_COUNT = 3;

+

+	/**

+	 * The number of operations of the '<em>Item</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_ITEM_OPERATION_COUNT = 0;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingLibraryImpl <em>Library</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingLibraryImpl

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl#getMappingLibrary()

+	 * @generated

+	 */

+	int MAPPING_LIBRARY = 1;

+

+	/**

+	 * The feature id for the '<em><b>Items</b></em>' containment reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_LIBRARY__ITEMS = 0;

+

+	/**

+	 * The number of structural features of the '<em>Library</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_LIBRARY_FEATURE_COUNT = 1;

+

+	/**

+	 * The number of operations of the '<em>Library</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MAPPING_LIBRARY_OPERATION_COUNT = 0;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.DataType <em>Data Type</em>}' enum.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.DataType

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl#getDataType()

+	 * @generated

+	 */

+	int DATA_TYPE = 2;

+

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem <em>Item</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Item</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem

+	 * @generated

+	 */

+	EClass getMappingItem();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getAttributeName <em>Attribute Name</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Attribute Name</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getAttributeName()

+	 * @see #getMappingItem()

+	 * @generated

+	 */

+	EAttribute getMappingItem_AttributeName();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getDataType <em>Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Data Type</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getDataType()

+	 * @see #getMappingItem()

+	 * @generated

+	 */

+	EAttribute getMappingItem_DataType();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getColumnId <em>Column Id</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Column Id</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem#getColumnId()

+	 * @see #getMappingItem()

+	 * @generated

+	 */

+	EAttribute getMappingItem_ColumnId();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary <em>Library</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Library</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary

+	 * @generated

+	 */

+	EClass getMappingLibrary();

+

+	/**

+	 * Returns the meta object for the containment reference list '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary#getItems <em>Items</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the containment reference list '<em>Items</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary#getItems()

+	 * @see #getMappingLibrary()

+	 * @generated

+	 */

+	EReference getMappingLibrary_Items();

+

+	/**

+	 * Returns the meta object for enum '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.DataType <em>Data Type</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for enum '<em>Data Type</em>'.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.DataType

+	 * @generated

+	 */

+	EEnum getDataType();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	MappingFactory getMappingFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each operation of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl <em>Item</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl

+		 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl#getMappingItem()

+		 * @generated

+		 */

+		EClass MAPPING_ITEM = eINSTANCE.getMappingItem();

+

+		/**

+		 * The meta object literal for the '<em><b>Attribute Name</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MAPPING_ITEM__ATTRIBUTE_NAME = eINSTANCE.getMappingItem_AttributeName();

+

+		/**

+		 * The meta object literal for the '<em><b>Data Type</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MAPPING_ITEM__DATA_TYPE = eINSTANCE.getMappingItem_DataType();

+

+		/**

+		 * The meta object literal for the '<em><b>Column Id</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MAPPING_ITEM__COLUMN_ID = eINSTANCE.getMappingItem_ColumnId();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingLibraryImpl <em>Library</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingLibraryImpl

+		 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl#getMappingLibrary()

+		 * @generated

+		 */

+		EClass MAPPING_LIBRARY = eINSTANCE.getMappingLibrary();

+

+		/**

+		 * The meta object literal for the '<em><b>Items</b></em>' containment reference list feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference MAPPING_LIBRARY__ITEMS = eINSTANCE.getMappingLibrary_Items();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.DataType <em>Data Type</em>}' enum.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.DataType

+		 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingPackageImpl#getDataType()

+		 * @generated

+		 */

+		EEnum DATA_TYPE = eINSTANCE.getDataType();

+

+	}

+

+} //MappingPackage

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingFactoryImpl.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingFactoryImpl.java
new file mode 100644
index 0000000..0738cd8
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingFactoryImpl.java
@@ -0,0 +1,166 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.impl;

+

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

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

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

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

+

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class MappingFactoryImpl extends EFactoryImpl implements MappingFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static MappingFactory init() {

+		try {

+			MappingFactory theMappingFactory = (MappingFactory)EPackage.Registry.INSTANCE.getEFactory(MappingPackage.eNS_URI);

+			if (theMappingFactory != null) {

+				return theMappingFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new MappingFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case MappingPackage.MAPPING_ITEM: return createMappingItem();

+			case MappingPackage.MAPPING_LIBRARY: return createMappingLibrary();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object createFromString(EDataType eDataType, String initialValue) {

+		switch (eDataType.getClassifierID()) {

+			case MappingPackage.DATA_TYPE:

+				return createDataTypeFromString(eDataType, initialValue);

+			default:

+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String convertToString(EDataType eDataType, Object instanceValue) {

+		switch (eDataType.getClassifierID()) {

+			case MappingPackage.DATA_TYPE:

+				return convertDataTypeToString(eDataType, instanceValue);

+			default:

+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingItem createMappingItem() {

+		MappingItemImpl mappingItem = new MappingItemImpl();

+		return mappingItem;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingLibrary createMappingLibrary() {

+		MappingLibraryImpl mappingLibrary = new MappingLibraryImpl();

+		return mappingLibrary;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public DataType createDataTypeFromString(EDataType eDataType, String initialValue) {

+		DataType result = DataType.get(initialValue);

+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");

+		return result;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String convertDataTypeToString(EDataType eDataType, Object instanceValue) {

+		return instanceValue == null ? null : instanceValue.toString();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingPackage getMappingPackage() {

+		return (MappingPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static MappingPackage getPackage() {

+		return MappingPackage.eINSTANCE;

+	}

+

+} //MappingFactoryImpl

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingItemImpl.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingItemImpl.java
new file mode 100644
index 0000000..0579d04
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingItemImpl.java
@@ -0,0 +1,281 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.impl;

+

+import org.eclipse.emf.common.notify.Notification;

+

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

+

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.DataType;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Item</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl#getAttributeName <em>Attribute Name</em>}</li>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl#getDataType <em>Data Type</em>}</li>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingItemImpl#getColumnId <em>Column Id</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class MappingItemImpl extends MinimalEObjectImpl.Container implements MappingItem {

+	/**

+	 * The default value of the '{@link #getAttributeName() <em>Attribute Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getAttributeName()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String ATTRIBUTE_NAME_EDEFAULT = "";

+

+	/**

+	 * The cached value of the '{@link #getAttributeName() <em>Attribute Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getAttributeName()

+	 * @generated

+	 * @ordered

+	 */

+	protected String attributeName = ATTRIBUTE_NAME_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getDataType() <em>Data Type</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDataType()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final DataType DATA_TYPE_EDEFAULT = DataType.STRING;

+

+	/**

+	 * The cached value of the '{@link #getDataType() <em>Data Type</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDataType()

+	 * @generated

+	 * @ordered

+	 */

+	protected DataType dataType = DATA_TYPE_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getColumnId() <em>Column Id</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getColumnId()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String COLUMN_ID_EDEFAULT = "";

+

+	/**

+	 * The cached value of the '{@link #getColumnId() <em>Column Id</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getColumnId()

+	 * @generated

+	 * @ordered

+	 */

+	protected String columnId = COLUMN_ID_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MappingItemImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return MappingPackage.Literals.MAPPING_ITEM;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getAttributeName() {

+		return attributeName;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setAttributeName(String newAttributeName) {

+		String oldAttributeName = attributeName;

+		attributeName = newAttributeName;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, MappingPackage.MAPPING_ITEM__ATTRIBUTE_NAME, oldAttributeName, attributeName));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public DataType getDataType() {

+		return dataType;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDataType(DataType newDataType) {

+		DataType oldDataType = dataType;

+		dataType = newDataType == null ? DATA_TYPE_EDEFAULT : newDataType;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, MappingPackage.MAPPING_ITEM__DATA_TYPE, oldDataType, dataType));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getColumnId() {

+		return columnId;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setColumnId(String newColumnId) {

+		String oldColumnId = columnId;

+		columnId = newColumnId;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, MappingPackage.MAPPING_ITEM__COLUMN_ID, oldColumnId, columnId));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_ITEM__ATTRIBUTE_NAME:

+				return getAttributeName();

+			case MappingPackage.MAPPING_ITEM__DATA_TYPE:

+				return getDataType();

+			case MappingPackage.MAPPING_ITEM__COLUMN_ID:

+				return getColumnId();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_ITEM__ATTRIBUTE_NAME:

+				setAttributeName((String)newValue);

+				return;

+			case MappingPackage.MAPPING_ITEM__DATA_TYPE:

+				setDataType((DataType)newValue);

+				return;

+			case MappingPackage.MAPPING_ITEM__COLUMN_ID:

+				setColumnId((String)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_ITEM__ATTRIBUTE_NAME:

+				setAttributeName(ATTRIBUTE_NAME_EDEFAULT);

+				return;

+			case MappingPackage.MAPPING_ITEM__DATA_TYPE:

+				setDataType(DATA_TYPE_EDEFAULT);

+				return;

+			case MappingPackage.MAPPING_ITEM__COLUMN_ID:

+				setColumnId(COLUMN_ID_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_ITEM__ATTRIBUTE_NAME:

+				return ATTRIBUTE_NAME_EDEFAULT == null ? attributeName != null : !ATTRIBUTE_NAME_EDEFAULT.equals(attributeName);

+			case MappingPackage.MAPPING_ITEM__DATA_TYPE:

+				return dataType != DATA_TYPE_EDEFAULT;

+			case MappingPackage.MAPPING_ITEM__COLUMN_ID:

+				return COLUMN_ID_EDEFAULT == null ? columnId != null : !COLUMN_ID_EDEFAULT.equals(columnId);

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (attributeName: ");

+		result.append(attributeName);

+		result.append(", dataType: ");

+		result.append(dataType);

+		result.append(", columnId: ");

+		result.append(columnId);

+		result.append(')');

+		return result.toString();

+	}

+

+} //MappingItemImpl

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingLibraryImpl.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingLibraryImpl.java
new file mode 100644
index 0000000..fe3f5cc
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingLibraryImpl.java
@@ -0,0 +1,161 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.impl;

+

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.NotificationChain;

+

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

+

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

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

+

+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;

+

+import org.eclipse.emf.ecore.util.EObjectContainmentEList;

+import org.eclipse.emf.ecore.util.InternalEList;

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Library</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.rmf.reqif10.csv.importer.mapping.impl.MappingLibraryImpl#getItems <em>Items</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class MappingLibraryImpl extends MinimalEObjectImpl.Container implements MappingLibrary {

+	/**

+	 * The cached value of the '{@link #getItems() <em>Items</em>}' containment reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getItems()

+	 * @generated

+	 * @ordered

+	 */

+	protected EList<MappingItem> items;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MappingLibraryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return MappingPackage.Literals.MAPPING_LIBRARY;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EList<MappingItem> getItems() {

+		if (items == null) {

+			items = new EObjectContainmentEList<MappingItem>(MappingItem.class, this, MappingPackage.MAPPING_LIBRARY__ITEMS);

+		}

+		return items;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_LIBRARY__ITEMS:

+				return ((InternalEList<?>)getItems()).basicRemove(otherEnd, msgs);

+		}

+		return super.eInverseRemove(otherEnd, featureID, msgs);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_LIBRARY__ITEMS:

+				return getItems();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_LIBRARY__ITEMS:

+				getItems().clear();

+				getItems().addAll((Collection<? extends MappingItem>)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_LIBRARY__ITEMS:

+				getItems().clear();

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case MappingPackage.MAPPING_LIBRARY__ITEMS:

+				return items != null && !items.isEmpty();

+		}

+		return super.eIsSet(featureID);

+	}

+

+} //MappingLibraryImpl

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingPackageImpl.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingPackageImpl.java
new file mode 100644
index 0000000..d995c34
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/impl/MappingPackageImpl.java
@@ -0,0 +1,272 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.impl;

+

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

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

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

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

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

+

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.DataType;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingFactory;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class MappingPackageImpl extends EPackageImpl implements MappingPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass mappingItemEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass mappingLibraryEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EEnum dataTypeEEnum = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private MappingPackageImpl() {

+		super(eNS_URI, MappingFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.

+	 * 

+	 * <p>This method is used to initialize {@link MappingPackage#eINSTANCE} when that field is accessed.

+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static MappingPackage init() {

+		if (isInited) return (MappingPackage)EPackage.Registry.INSTANCE.getEPackage(MappingPackage.eNS_URI);

+

+		// Obtain or create and register package

+		MappingPackageImpl theMappingPackage = (MappingPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof MappingPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new MappingPackageImpl());

+

+		isInited = true;

+

+		// Create package meta-data objects

+		theMappingPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theMappingPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theMappingPackage.freeze();

+

+  

+		// Update the registry and return the package

+		EPackage.Registry.INSTANCE.put(MappingPackage.eNS_URI, theMappingPackage);

+		return theMappingPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getMappingItem() {

+		return mappingItemEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getMappingItem_AttributeName() {

+		return (EAttribute)mappingItemEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getMappingItem_DataType() {

+		return (EAttribute)mappingItemEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getMappingItem_ColumnId() {

+		return (EAttribute)mappingItemEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getMappingLibrary() {

+		return mappingLibraryEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getMappingLibrary_Items() {

+		return (EReference)mappingLibraryEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EEnum getDataType() {

+		return dataTypeEEnum;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingFactory getMappingFactory() {

+		return (MappingFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		mappingItemEClass = createEClass(MAPPING_ITEM);

+		createEAttribute(mappingItemEClass, MAPPING_ITEM__ATTRIBUTE_NAME);

+		createEAttribute(mappingItemEClass, MAPPING_ITEM__DATA_TYPE);

+		createEAttribute(mappingItemEClass, MAPPING_ITEM__COLUMN_ID);

+

+		mappingLibraryEClass = createEClass(MAPPING_LIBRARY);

+		createEReference(mappingLibraryEClass, MAPPING_LIBRARY__ITEMS);

+

+		// Create enums

+		dataTypeEEnum = createEEnum(DATA_TYPE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+

+		// Initialize classes, features, and operations; add parameters

+		initEClass(mappingItemEClass, MappingItem.class, "MappingItem", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getMappingItem_AttributeName(), ecorePackage.getEString(), "attributeName", "", 1, 1, MappingItem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getMappingItem_DataType(), this.getDataType(), "dataType", null, 1, 1, MappingItem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getMappingItem_ColumnId(), ecorePackage.getEString(), "columnId", "", 1, 1, MappingItem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		initEClass(mappingLibraryEClass, MappingLibrary.class, "MappingLibrary", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEReference(getMappingLibrary_Items(), this.getMappingItem(), null, "items", null, 0, -1, MappingLibrary.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		// Initialize enums and add enum literals

+		initEEnum(dataTypeEEnum, DataType.class, "DataType");

+		addEEnumLiteral(dataTypeEEnum, DataType.STRING);

+		addEEnumLiteral(dataTypeEEnum, DataType.BOOLEAN);

+		addEEnumLiteral(dataTypeEEnum, DataType.INTEGER);

+		addEEnumLiteral(dataTypeEEnum, DataType.REAL);

+		addEEnumLiteral(dataTypeEEnum, DataType.DATE);

+		addEEnumLiteral(dataTypeEEnum, DataType.ENUMERATION);

+		addEEnumLiteral(dataTypeEEnum, DataType.XHTML);

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //MappingPackageImpl

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingItemItemProvider.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingItemItemProvider.java
new file mode 100644
index 0000000..194d4c0
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingItemItemProvider.java
@@ -0,0 +1,212 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.provider;

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

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

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ItemProviderAdapter;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+import org.eclipse.rmf.reqif10.csv.importer.CSVImporterPlugin;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage;

+

+/**

+ * This is the item provider adapter for a

+ * {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem} object. <!--

+ * begin-user-doc --> <!-- end-user-doc -->

+ * 

+ * @generated

+ */

+public class MappingItemItemProvider extends ItemProviderAdapter implements

+		IEditingDomainItemProvider, IStructuredItemContentProvider,

+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	public MappingItemItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addAttributeNamePropertyDescriptor(object);

+			addDataTypePropertyDescriptor(object);

+			addColumnIdPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Attribute Name feature. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	protected void addAttributeNamePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add(createItemPropertyDescriptor(

+				((ComposeableAdapterFactory) adapterFactory)

+						.getRootAdapterFactory(),

+				getResourceLocator(),

+				getString("_UI_MappingItem_attributeName_feature"),

+				getString("_UI_PropertyDescriptor_description",

+						"_UI_MappingItem_attributeName_feature",

+						"_UI_MappingItem_type"),

+				MappingPackage.Literals.MAPPING_ITEM__ATTRIBUTE_NAME, true,

+				false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null,

+				null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Data Type feature. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	protected void addDataTypePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add(createItemPropertyDescriptor(

+				((ComposeableAdapterFactory) adapterFactory)

+						.getRootAdapterFactory(),

+				getResourceLocator(),

+				getString("_UI_MappingItem_dataType_feature"),

+				getString("_UI_PropertyDescriptor_description",

+						"_UI_MappingItem_dataType_feature",

+						"_UI_MappingItem_type"),

+				MappingPackage.Literals.MAPPING_ITEM__DATA_TYPE, true, false,

+				false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Column Id feature. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	protected void addColumnIdPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add(createItemPropertyDescriptor(

+				((ComposeableAdapterFactory) adapterFactory)

+						.getRootAdapterFactory(),

+				getResourceLocator(),

+				getString("_UI_MappingItem_columnId_feature"),

+				getString("_UI_PropertyDescriptor_description",

+						"_UI_MappingItem_columnId_feature",

+						"_UI_MappingItem_type"),

+				MappingPackage.Literals.MAPPING_ITEM__COLUMN_ID, true, false,

+				false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));

+	}

+

+	/**

+	 * This returns MappingItem.png. <!-- begin-user-doc --> <!-- end-user-doc

+	 * -->

+	 * 

+	 * @generated NOT

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object,

+				getResourceLocator().getImage("full/obj16/MappingItem.png"));

+	}

+

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	protected boolean shouldComposeCreationImage() {

+		return true;

+	}

+

+	/**

+	 * This returns the label text for the adapted class. <!-- begin-user-doc

+	 * --> <!-- end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	@Override

+	public String getText(Object object) {

+		MappingItem mappingItem = (MappingItem) object;

+		return mappingItem.getColumnId() + " -> "

+				+ mappingItem.getAttributeName();

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to

+	 * update any cached children and by creating a viewer notification, which

+	 * it passes to {@link #fireNotifyChanged}. <!-- begin-user-doc --> <!--

+	 * end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(MappingItem.class)) {

+		case MappingPackage.MAPPING_ITEM__ATTRIBUTE_NAME:

+		case MappingPackage.MAPPING_ITEM__DATA_TYPE:

+		case MappingPackage.MAPPING_ITEM__COLUMN_ID:

+			fireNotifyChanged(new ViewerNotification(notification,

+					notification.getNotifier(), false, true));

+			return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s

+	 * describing the children that can be created under this object. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(

+			Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return CSVImporterPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingItemProviderAdapterFactory.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingItemProviderAdapterFactory.java
new file mode 100644
index 0000000..89577d6
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingItemProviderAdapterFactory.java
@@ -0,0 +1,232 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.provider;

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.util.MappingAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class MappingItemProviderAdapterFactory extends MappingAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MappingItemItemProvider mappingItemItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createMappingItemAdapter() {

+		if (mappingItemItemProvider == null) {

+			mappingItemItemProvider = new MappingItemItemProvider(this);

+		}

+

+		return mappingItemItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MappingLibraryItemProvider mappingLibraryItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createMappingLibraryAdapter() {

+		if (mappingLibraryItemProvider == null) {

+			mappingLibraryItemProvider = new MappingLibraryItemProvider(this);

+		}

+

+		return mappingLibraryItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (mappingItemItemProvider != null) mappingItemItemProvider.dispose();

+		if (mappingLibraryItemProvider != null) mappingLibraryItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingLibraryItemProvider.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingLibraryItemProvider.java
new file mode 100644
index 0000000..d399dca
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/provider/MappingLibraryItemProvider.java
@@ -0,0 +1,213 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.provider;

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

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

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

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemProviderAdapter;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+import org.eclipse.rmf.reqif10.csv.importer.CSVImporterPlugin;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingFactory;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage;

+

+/**

+ * This is the item provider adapter for a

+ * {@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary} object.

+ * <!-- begin-user-doc --> <!-- end-user-doc -->

+ * 

+ * @generated

+ */

+public class MappingLibraryItemProvider extends ItemProviderAdapter implements

+		IEditingDomainItemProvider, IStructuredItemContentProvider,

+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	public MappingLibraryItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This specifies how to implement {@link #getChildren} and is used to

+	 * deduce an appropriate feature for an

+	 * {@link org.eclipse.emf.edit.command.AddCommand},

+	 * {@link org.eclipse.emf.edit.command.RemoveCommand} or

+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in

+	 * {@link #createCommand}. <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	public Collection<? extends EStructuralFeature> getChildrenFeatures(

+			Object object) {

+		if (childrenFeatures == null) {

+			super.getChildrenFeatures(object);

+			childrenFeatures

+					.add(MappingPackage.Literals.MAPPING_LIBRARY__ITEMS);

+		}

+		return childrenFeatures;

+	}

+

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	protected EStructuralFeature getChildFeature(Object object, Object child) {

+		// Check the type of the specified child object and return the proper

+		// feature to use for

+		// adding (see {@link AddCommand}) it as a child.

+

+		return super.getChildFeature(object, child);

+	}

+

+	/**

+	 * This returns MappingLibrary.png. <!-- begin-user-doc --> <!--

+	 * end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object,

+				getResourceLocator().getImage("full/obj16/MappingLibrary.png"));

+	}

+

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	protected boolean shouldComposeCreationImage() {

+		return true;

+	}

+

+	/**

+	 * This returns the label text for the adapted class. <!-- begin-user-doc

+	 * --> <!-- end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		return getString("_UI_MappingLibrary_type");

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to

+	 * update any cached children and by creating a viewer notification, which

+	 * it passes to {@link #fireNotifyChanged}. <!-- begin-user-doc --> <!--

+	 * end-user-doc -->

+	 * 

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(MappingLibrary.class)) {

+		case MappingPackage.MAPPING_LIBRARY__ITEMS:

+			fireNotifyChanged(new ViewerNotification(notification,

+					notification.getNotifier(), true, false));

+			return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s

+	 * describing the children that can be created under this object. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	@Override

+	protected void collectNewChildDescriptors(

+			Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+

+		String[] mappingAttributes = new String[] { "Description", "Long Name",

+				"Desc" };

+		for (String attributeName : mappingAttributes) {

+			MappingItem mappingItem = MappingFactory.eINSTANCE

+					.createMappingItem();

+			mappingItem.setAttributeName(attributeName);

+			newChildDescriptors

+					.add(createChildParameter(

+							MappingPackage.Literals.MAPPING_LIBRARY__ITEMS,

+							mappingItem));

+

+		}

+		newChildDescriptors.add(createChildParameter(

+				MappingPackage.Literals.MAPPING_LIBRARY__ITEMS,

+				MappingFactory.eINSTANCE.createMappingItem()));

+	}

+

+	@Override

+	public String getCreateChildText(Object owner, Object feature,

+			Object child, Collection<?> selection) {

+		if (child instanceof MappingItem) {

+			String label = "Custom";

+			MappingItem mappingItem = (MappingItem) child;

+			if (false == mappingItem.getAttributeName().isEmpty()) {

+				label = mappingItem.getAttributeName();

+			}

+			return label + " Mapping";

+		}

+		return super.getCreateChildText(owner, feature, child, selection);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources. <!--

+	 * begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return CSVImporterPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/util/MappingAdapterFactory.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/util/MappingAdapterFactory.java
new file mode 100644
index 0000000..531391b
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/util/MappingAdapterFactory.java
@@ -0,0 +1,147 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.util;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

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

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage

+ * @generated

+ */

+public class MappingAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static MappingPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = MappingPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MappingSwitch<Adapter> modelSwitch =

+		new MappingSwitch<Adapter>() {

+			@Override

+			public Adapter caseMappingItem(MappingItem object) {

+				return createMappingItemAdapter();

+			}

+			@Override

+			public Adapter caseMappingLibrary(MappingLibrary object) {

+				return createMappingLibraryAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem <em>Item</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem

+	 * @generated

+	 */

+	public Adapter createMappingItemAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary <em>Library</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary

+	 * @generated

+	 */

+	public Adapter createMappingLibraryAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //MappingAdapterFactory

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/util/MappingSwitch.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/util/MappingSwitch.java
new file mode 100644
index 0000000..836c2b7
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/mapping/util/MappingSwitch.java
@@ -0,0 +1,140 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.mapping.util;

+

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

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

+

+import org.eclipse.emf.ecore.util.Switch;

+

+import org.eclipse.rmf.reqif10.csv.importer.mapping.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage

+ * @generated

+ */

+public class MappingSwitch<T> extends Switch<T> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static MappingPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public MappingSwitch() {

+		if (modelPackage == null) {

+			modelPackage = MappingPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Checks whether this is a switch for the given package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @parameter ePackage the package in question.

+	 * @return whether this is a switch for the given package.

+	 * @generated

+	 */

+	@Override

+	protected boolean isSwitchFor(EPackage ePackage) {

+		return ePackage == modelPackage;

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	@Override

+	protected T doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case MappingPackage.MAPPING_ITEM: {

+				MappingItem mappingItem = (MappingItem)theEObject;

+				T result = caseMappingItem(mappingItem);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case MappingPackage.MAPPING_LIBRARY: {

+				MappingLibrary mappingLibrary = (MappingLibrary)theEObject;

+				T result = caseMappingLibrary(mappingLibrary);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Item</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Item</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T caseMappingItem(MappingItem object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Library</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Library</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T caseMappingLibrary(MappingLibrary object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	@Override

+	public T defaultCase(EObject object) {

+		return null;

+	}

+

+} //MappingSwitch

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/CSVImportWziard.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/CSVImportWziard.java
new file mode 100644
index 0000000..63b71db
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/CSVImportWziard.java
@@ -0,0 +1,161 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.ui.wizards;

+

+import java.io.IOException;

+import java.lang.reflect.InvocationTargetException;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.runtime.IProgressMonitor;

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

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.operation.IRunnableWithProgress;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.wizard.IWizardPage;

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.rmf.reqif10.csv.importer.CSVImporterPlugin;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;

+import org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages.CSVImportWizardPage;

+import org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages.CSVMappingWizardPage;

+import org.eclipse.rmf.reqif10.csv.importer.utils.Importer;

+import org.eclipse.rmf.reqif10.csv.importer.utils.Utils;

+import org.eclipse.rmf.reqif10.pror.editor.presentation.Reqif10Editor;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorReference;

+import org.eclipse.ui.IImportWizard;

+import org.eclipse.ui.IWorkbench;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.PlatformUI;

+

+public class CSVImportWziard extends Wizard implements IImportWizard {

+

+	private CSVImportWizardPage importWizardPage;

+	private CSVMappingWizardPage mappingWizardPage;

+

+	public CSVImportWziard() {

+		setWindowTitle("CSV Import Wizard");

+		setNeedsProgressMonitor(true);

+	}

+

+	@Override

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		importWizardPage = new CSVImportWizardPage();

+		mappingWizardPage = new CSVMappingWizardPage();

+	}

+

+	@Override

+	public IWizardPage getNextPage(IWizardPage page) {

+		if (page == importWizardPage) {

+			IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {

+

+				@Override

+				public void run(IProgressMonitor monitor)

+						throws InvocationTargetException, InterruptedException {

+					try {

+						final List<String> columnIDS = Utils.getColumnIds(

+								importWizardPage.getSelectedFilePath(),

+								importWizardPage.getSeparator(),

+								importWizardPage.isContainsHeader());

+						getShell().getDisplay().asyncExec(new Runnable() {

+

+							@Override

+							public void run() {

+								mappingWizardPage

+										.setColumnMappingInput(columnIDS);

+							}

+						});

+					} catch (IOException e) {

+						CSVImporterPlugin.INSTANCE.log(e);

+					}

+				}

+			};

+			run(runnableWithProgress);

+		}

+		return super.getNextPage(page);

+	}

+

+	@Override

+	public void addPages() {

+		super.addPages();

+		addPage(importWizardPage);

+		addPage(mappingWizardPage);

+	}

+

+	protected void run(IRunnableWithProgress runnableWithProgress) {

+		try {

+			getContainer().run(true, false, runnableWithProgress);

+		} catch (InvocationTargetException e) {

+			CSVImporterPlugin.INSTANCE.log(e);

+		} catch (InterruptedException e) {

+			CSVImporterPlugin.INSTANCE.log(e);

+		}

+	}

+

+	public static EditingDomain getEditingDomain(URI uri) {

+		return getEditorsURIMap().get(uri);

+	}

+

+	public static Map<URI, EditingDomain> getEditorsURIMap() {

+		Map<URI, EditingDomain> uriMap = new HashMap<URI, EditingDomain>();

+

+		IEditorReference[] editorReferences = PlatformUI.getWorkbench()

+				.getActiveWorkbenchWindow().getActivePage()

+				.getEditorReferences();

+		for (IEditorReference editorReference : editorReferences) {

+			IEditorPart editorPart = editorReference.getEditor(false);

+			if (editorPart instanceof Reqif10Editor) {

+				try {

+					uriMap.put(EditUIUtil.getURI(editorReference

+							.getEditorInput()),

+							((IEditingDomainProvider) editorPart)

+									.getEditingDomain());

+				} catch (PartInitException e) {

+					e.printStackTrace();

+				}

+			}

+		}

+		return uriMap;

+	}

+

+	@Override

+	public boolean performFinish() {

+		boolean valid = true;

+		final IFile selectedDestinationFile = importWizardPage

+				.getSelectedDestinationFile();

+		final String selectedFilePath = importWizardPage.getSelectedFilePath();

+		final MappingLibrary mappingLibrary = mappingWizardPage

+				.getMappingLibrary();

+		final char separator = importWizardPage.getSeparator();

+		final boolean containsHeader = importWizardPage.isContainsHeader();

+		final URI uri = URI.createPlatformResourceURI(selectedDestinationFile

+				.getFullPath().toOSString(), true);

+		final EditingDomain editingDomain = getEditingDomain(uri);

+		try {

+			Importer.importReq(editingDomain, selectedDestinationFile,

+					selectedFilePath, mappingLibrary, separator, containsHeader);

+		} catch (Exception e) {

+			CSVImporterPlugin.getPlugin().log(e);

+			valid = false;

+			MessageDialog.openError(getShell(), "Import Failed: "

+					+ e.getClass().getSimpleName(), "Something went wrong: "

+					+ e.getMessage());

+		}

+

+		return valid;

+	}

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/CSVImportWizardPage.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/CSVImportWizardPage.java
new file mode 100644
index 0000000..6ed8d79
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/CSVImportWizardPage.java
@@ -0,0 +1,477 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages;

+

+import java.io.File;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.jface.viewers.ArrayContentProvider;

+import org.eclipse.jface.viewers.ComboViewer;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.LabelProvider;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+import org.eclipse.jface.viewers.ViewerFilter;

+import org.eclipse.jface.wizard.WizardPage;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.ModifyEvent;

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.SelectionAdapter;

+import org.eclipse.swt.events.SelectionEvent;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

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

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

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

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

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

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

+import org.eclipse.ui.model.BaseWorkbenchContentProvider;

+import org.eclipse.ui.model.WorkbenchLabelProvider;

+

+/**

+ * 

+ * @author Hussein MHANNA

+ * 

+ */

+public class CSVImportWizardPage extends WizardPage {

+

+	/**

+	 * The reqif file extension

+	 */

+	private static final String REQIF_EXTENSION = "reqif";

+	/**

+	 * The reqif file extension

+	 */

+	private static final String CSV_EXTENSION = "csv";

+

+	/**

+     * 

+     */

+	private static final String[] CSV_SEPARATOR_ARRAY = new String[] { ",",

+			";", ":", ".", "\t", "|", "^" };

+

+	/**

+	 * The selected path to the file

+	 */

+	private String selectedFilePath = "";

+

+	/**

+	 * The csv separator

+	 */

+	private String separator = CSV_SEPARATOR_ARRAY[0];

+

+	/**

+	 * Indicate if the csv contains a header

+	 */

+	private boolean containsHeader;

+

+	/**

+	 * The selected path to the file

+	 */

+	private IFile selectedDestinationFile;

+

+	/**

+	 * The constructor

+	 */

+	public CSVImportWizardPage() {

+		super("Import requirements from CSV");

+		setTitle("Import requirements from CSV");

+		setDescription("Requirements CSV File Import Wizard");

+	}

+

+	/**

+	 * {@inheritDoc}

+	 */

+	@Override

+	public void createControl(final Composite parent) {

+		final Composite mainComposite = new Composite(parent, SWT.NONE);

+		mainComposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL,

+				true, true));

+		final GridLayout gridLayout = new GridLayout();

+		mainComposite.setLayout(gridLayout);

+

+		createFileSelectionGroup(mainComposite);

+

+		createConfigurationGroup(mainComposite);

+

+		createReqIFFileSelectionComposite(mainComposite);

+		validatePage();

+		setControl(mainComposite);

+	}

+

+	/**

+	 * Create the file selection group.

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 */

+	protected Group createFileSelectionGroup(final Composite parent) {

+		final Group group = createGroup(parent, "File Selection");

+		createLabel(group, "File :");

+		final Text text = createText(group);

+

+		text.addModifyListener(new ModifyListener() {

+

+			@Override

+			public void modifyText(ModifyEvent e) {

+				selectedFilePath = text.getText();

+				validatePage();

+			}

+		});

+

+		final Button button = createButton(group, "Browse");

+		button.addSelectionListener(new SelectionAdapter() {

+

+			@Override

+			public void widgetSelected(final SelectionEvent e) {

+				final String filePath = browseForFile();

+				if ((filePath != null) && !filePath.isEmpty()) {

+					text.setText(filePath);

+				}

+			}

+		});

+		return group;

+	}

+

+	/**

+	 * Create the configuration group.

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 */

+	protected Group createConfigurationGroup(final Composite parent) {

+		final Group group = createGroup(parent, "Configuration");

+		createLabel(group, "Separator character");

+		ComboViewer comboViewer = new ComboViewer(group);

+		comboViewer.setContentProvider(new ArrayContentProvider());

+		comboViewer.setLabelProvider(new LabelProvider());

+		comboViewer.setInput(CSV_SEPARATOR_ARRAY);

+		comboViewer.setSelection(new StructuredSelection(separator));

+		comboViewer

+				.addSelectionChangedListener(new ISelectionChangedListener() {

+

+					@Override

+					public void selectionChanged(SelectionChangedEvent event) {

+						separator = ((IStructuredSelection) event

+								.getSelection()).getFirstElement().toString();

+					}

+				});

+		comboViewer.getCombo().setLayoutData(

+				new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));

+		final Button headerButton = new Button(group, SWT.CHECK);

+		headerButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false,

+				3, 1));

+		headerButton.setText("The csv file contains a header");

+		headerButton.addSelectionListener(new SelectionAdapter() {

+

+			@Override

+			public void widgetSelected(SelectionEvent e) {

+				super.widgetSelected(e);

+				containsHeader = headerButton.getSelection();

+			}

+		});

+		return group;

+	}

+

+	/**

+	 * Create the file destination selection group.

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 */

+	protected Group createFileDestinationSelectionGroup(final Composite parent) {

+		final Group group = createGroup(parent, "ReqIF File destination");

+		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

+		createReqIFFileSelectionComposite(group);

+		return group;

+	}

+

+	/**

+	 * Create a {@link Group}

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 * @param groupText

+	 *            : The group text

+	 * @return The created {@link Group}

+	 */

+	private Group createGroup(final Composite parent, String groupText) {

+		Group group = new Group(parent, SWT.NONE);

+		group.setText(groupText);

+		group.setLayout(new GridLayout(3, false));

+		group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));

+		return group;

+

+	}

+

+	/**

+	 * Create a {@link Label}

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 * @param labelText

+	 *            : The label text

+	 * @return The created {@link Label}

+	 */

+	protected Label createLabel(final Composite parent, String labelText) {

+		final Label label = new Label(parent, SWT.NONE);

+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false,

+				1, 1));

+		label.setText(labelText);

+		return label;

+	}

+

+	/**

+	 * Create a {@link Text}

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 * @return The created {@link Text}

+	 */

+	protected Text createText(final Composite parent) {

+		Text text = new Text(parent, SWT.BORDER);

+		text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

+		return text;

+	}

+

+	/**

+	 * Create a button with the text "Browse..."

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 * @param buttonText

+	 *            : The button text

+	 * @return The created button

+	 */

+	protected Button createButton(final Composite parent, String buttonText) {

+		final Button button = new Button(parent, SWT.NONE);

+		button.setText(buttonText);

+		return button;

+	}

+

+	/**

+	 * Create the file selection composite

+	 * 

+	 * @param parent

+	 *            : The parent composite

+	 */

+	protected void createReqIFFileSelectionComposite(Composite parent) {

+		Group group = createGroup(parent, "Destination ReqIF File");

+		group.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true,

+				true));

+		TreeViewer treeViewer = new TreeViewer(group);

+		treeViewer.getTree().setLayoutData(

+				new GridData(GridData.FILL, GridData.FILL, true, true));

+		treeViewer.setContentProvider(new BaseWorkbenchContentProvider());

+		treeViewer.setLabelProvider(new WorkbenchLabelProvider());

+		ViewerFilter reqifFilter = new ViewerFilter() {

+

+			@Override

+			public boolean select(Viewer viewer, Object parentElement,

+					Object element) {

+				if (element instanceof IFile) {

+					return isReqIFFile((IFile) element);

+				}

+				return true;

+			}

+		};

+		treeViewer.setFilters(new ViewerFilter[] { reqifFilter });

+		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {

+

+			@Override

+			public void selectionChanged(SelectionChangedEvent event) {

+				IFile file = null;

+				IStructuredSelection selection = (IStructuredSelection) event

+						.getSelection();

+				if (false == selection.isEmpty()) {

+					Object object = selection.getFirstElement();

+					if (object instanceof IFile && isReqIFFile((IFile) object)) {

+						file = (IFile) object;

+					}

+				}

+				selectedDestinationFile = file;

+				validatePage();

+			}

+		});

+		treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());

+	}

+

+	/**

+	 * Return whether a file is an reqif file

+	 * 

+	 * @param file

+	 *            : The file

+	 * @return <code>true</code> if the file extsntion is

+	 *         {@link #REQIF_EXTENSION} and <code>false</code> otherwise

+	 */

+	protected boolean isReqIFFile(IFile file) {

+		return file.getFileExtension().equals(REQIF_EXTENSION);

+	}

+

+	/**

+	 * Browse for a file

+	 * 

+	 * @return The selected path if any and an empty

+	 */

+	protected String browseForFile() {

+		final FileDialog dialog = createFileDialog();

+		final String path = dialog.open();

+		return path == null ? "" : path;

+	}

+

+	/**

+	 * Create and return {@link FileDialog}

+	 * 

+	 * @return The created {@link FileDialog}

+	 */

+	protected FileDialog createFileDialog() {

+		final FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);

+		dialog.setFilterExtensions(new String[] { "*." + CSV_EXTENSION });

+		return dialog;

+	}

+

+	/**

+	 * Update the status of the page, if it is complete or not.

+	 */

+	protected boolean validatePage() {

+

+		boolean valid = true;

+

+		if (selectedFilePath.isEmpty()) {

+			setFieldEmptyErrorMessage();

+			valid = false;

+		} else if (false == checkFileExtension(selectedFilePath)) {

+			setExtensionErrorMessage();

+			valid = false;

+		} else if (false == isFileExist(selectedFilePath)) {

+			setNoFileErrorMessage(selectedFilePath);

+			valid = false;

+		} else if (selectedDestinationFile == null) {

+			setSelectedReqIFDestinationFileEmptyErrorMessage();

+			valid = false;

+		}

+		if (valid) {

+			setPageComplete(true);

+			setMessage(null);

+			setErrorMessage(null);

+		}

+

+		return valid;

+	}

+

+	/**

+	 * Check if the extension file is compatible.

+	 * 

+	 * @param path

+	 *            : The path

+	 * @return <code>true</code> if the file extension is compatible and

+	 *         <code>false</code> otherwise

+	 */

+	protected boolean checkFileExtension(final String path) {

+		return path.endsWith("."+CSV_EXTENSION);

+	}

+

+	/**

+	 * Check if the given file path is valid.

+	 * 

+	 * @param filePath

+	 *            : The path

+	 * @return <code>true</code> if the path is valid (exist on the disk) and

+	 *         <code>false</code> otherwise

+	 */

+	protected boolean isFileExist(final String filePath) {

+		return new File(filePath).exists();

+	}

+

+	/**

+	 * Set the error message indicating that the text field is empty

+	 */

+	protected void setFieldEmptyErrorMessage() {

+		setMessage(null);

+		setErrorMessage(" Please select a csv file to import");

+		setPageComplete(false);

+	}

+

+	/**

+	 * Set the error message indicating that the file must end with .csv

+	 */

+	protected void setExtensionErrorMessage() {

+		setMessage(null);

+		setErrorMessage("The file name must end with .csv");

+		setPageComplete(false);

+	}

+

+	/**

+	 * Set the error message indicating that the file doesn't exist

+	 * 

+	 * @param fileName

+	 *            : The file name

+	 */

+	protected void setNoFileErrorMessage(final String fileName) {

+		setMessage(null);

+		setErrorMessage("The file " + fileName + "doesn't exists");

+		setPageComplete(false);

+	}

+

+	/**

+	 * Set the error message indicating that not selected reqif destination file

+	 * selected

+	 */

+	protected void setSelectedReqIFDestinationFileEmptyErrorMessage() {

+		setMessage(null);

+		setErrorMessage(" Please select the destination ReqIF file (*.reqif)");

+		setPageComplete(false);

+	}

+

+	/**

+	 * Get the selected file path.

+	 * 

+	 * @return the selected file path

+	 */

+	public String getSelectedFilePath() {

+		return selectedFilePath;

+	}

+

+	/**

+	 * Return the separator

+	 * 

+	 * @return The separator

+	 */

+	public char getSeparator() {

+		return separator.charAt(0);

+	}

+

+	/**

+	 * Return the selected destination file

+	 * 

+	 * @return The selected destination file

+	 */

+

+	public IFile getSelectedDestinationFile() {

+		return selectedDestinationFile;

+	}

+

+	/**

+	 * Return whether the csv file contains a header

+	 * 

+	 * @return <code>true</code> if the csv file contains a header and

+	 *         <code>false</code> otherwise

+	 */

+	public boolean isContainsHeader() {

+		return containsHeader;

+	}

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/CSVMappingWizardPage.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/CSVMappingWizardPage.java
new file mode 100644
index 0000000..ee4d2ed
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/CSVMappingWizardPage.java
@@ -0,0 +1,176 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages;

+

+import java.util.EventObject;

+import java.util.List;

+

+import org.eclipse.emf.common.command.CommandStackListener;

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

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.wizard.WizardPage;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingFactory;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.custom.SashForm;

+import org.eclipse.swt.layout.FillLayout;

+import org.eclipse.swt.layout.GridData;

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

+

+/**

+ * 

+ * @author Etienne MHANNA

+ *

+ */

+public class CSVMappingWizardPage extends WizardPage {

+

+	private LeftMappingPart leftMappingPart;

+	private RightMappingPart rightMappingPart;

+	private MappingLibrary mappingLibrary;

+

+	/**

+	 * Create the wizard.

+	 */

+	public CSVMappingWizardPage() {

+		super("Mapping Wizard Page");

+		setTitle("Mapping Wizard Page");

+		setDescription("Mapping Wizard Page");

+	}

+

+	/**

+	 * Create contents of the wizard.

+	 * 

+	 * @param parent

+	 */

+	@Override

+	public void createControl(Composite parent) {

+		Composite composite = new Composite(parent, SWT.NONE);

+		composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL,

+				true, true));

+		composite.setLayout(new FillLayout());

+

+		SashForm sashForm = new SashForm(composite, SWT.NONE);

+		mappingLibrary = MappingFactory.eINSTANCE.createMappingLibrary();

+		leftMappingPart = new LeftMappingPart(sashForm, mappingLibrary);

+		Composite rightMappingPartContainer = new Composite(sashForm, SWT.NONE);

+		rightMappingPartContainer.setLayout(new FillLayout());

+		rightMappingPart = new RightMappingPart(rightMappingPartContainer,

+				leftMappingPart.getEditingDomain());

+		rightMappingPart.setVisible(false);

+		leftMappingPart

+				.addSelectionChangedListener(new ISelectionChangedListener() {

+

+					@Override

+					public void selectionChanged(SelectionChangedEvent event) {

+						boolean visible = false;

+						IStructuredSelection selection = (IStructuredSelection) event

+								.getSelection();

+						if (selection.getFirstElement() instanceof MappingItem) {

+							rightMappingPart.selectionChanged(event

+									.getSelection());

+							visible = true;

+						}

+						rightMappingPart.setVisible(visible);

+					}

+				});

+		leftMappingPart.getEditingDomain().getCommandStack()

+				.addCommandStackListener(new CommandStackListener() {

+

+					@Override

+					public void commandStackChanged(EventObject event) {

+						validatePage();

+					}

+				});

+		sashForm.setWeights(new int[] { 45, 55 });

+		validatePage();

+		setControl(composite);

+	}

+

+	/**

+	 * Update the status of the page, if it is complete or not.

+	 */

+	protected boolean validatePage() {

+		setPageComplete(false);

+		boolean valid = true;

+		EList<MappingItem> items = mappingLibrary.getItems();

+		if (items.isEmpty()) {

+			setErrorMessage("At least one mapping item must be exist");

+			valid = false;

+		}

+		for (MappingItem mappingItem : items) {

+			String errorMessage = "";

+			if (mappingItem.getColumnId().isEmpty()) {

+				errorMessage = "A mapping item have an empty column id";

+			} else if (containsDuplicateColumnId(mappingItem.getColumnId(),

+					items)) {

+				errorMessage = "Several mapping item have a column id as "

+						+ mappingItem.getColumnId();

+			} else if (mappingItem.getAttributeName().isEmpty()) {

+				errorMessage = "A mapping item have an empty attribute name";

+			} else if (containsDuplicateAttributeName(

+					mappingItem.getAttributeName(), items)) {

+				errorMessage = "Several mapping item have a attribute name as "

+						+ mappingItem.getAttributeName();

+			}

+			if (false == errorMessage.isEmpty()) {

+				setErrorMessage(errorMessage);

+				valid = false;

+			}

+		}

+		if (valid) {

+			setPageComplete(true);

+			setMessage(null);

+			setErrorMessage(null);

+		}

+

+		return valid;

+	}

+

+	private boolean containsDuplicateColumnId(String columnId,

+			EList<MappingItem> items) {

+		int count = 0;

+		for (MappingItem item : items) {

+			if (columnId.equals(item.getColumnId())) {

+				if (count == 1) {

+					return true;

+				}

+				count++;

+			}

+		}

+		return false;

+	}

+

+	private boolean containsDuplicateAttributeName(String name,

+			EList<MappingItem> items) {

+		int count = 0;

+		for (MappingItem item : items) {

+			if (name.equals(item.getAttributeName())) {

+				if (count == 1) {

+					return true;

+				}

+				count++;

+			}

+		}

+		return false;

+	}

+

+	public void setColumnMappingInput(List<String> columnIDS) {

+		rightMappingPart.setColumnMappingInput(columnIDS);

+	}

+

+	public MappingLibrary getMappingLibrary() {

+		return mappingLibrary;

+	}

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/LeftMappingPart.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/LeftMappingPart.java
new file mode 100644
index 0000000..7acd191
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/LeftMappingPart.java
@@ -0,0 +1,526 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages;

+

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.EventObject;

+import java.util.List;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+import org.eclipse.emf.common.notify.AdapterFactory;

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

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

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+import org.eclipse.emf.edit.ui.action.CopyAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CutAction;

+import org.eclipse.emf.edit.ui.action.DeleteAction;

+import org.eclipse.emf.edit.ui.action.PasteAction;

+import org.eclipse.emf.edit.ui.action.RedoAction;

+import org.eclipse.emf.edit.ui.action.StaticSelectionCommandAction;

+import org.eclipse.emf.edit.ui.action.UndoAction;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.rmf.reqif10.csv.importer.CSVImporterPlugin;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.provider.MappingItemProviderAdapterFactory;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.DisposeEvent;

+import org.eclipse.swt.events.DisposeListener;

+import org.eclipse.swt.layout.FillLayout;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

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

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

+import org.eclipse.ui.ISharedImages;

+import org.eclipse.ui.PlatformUI;

+

+public class LeftMappingPart extends Composite {

+	/**

+	 * The tree viewer

+	 */

+	private TreeViewer treeViewer;

+

+	/**

+	 * The temporary resource

+	 */

+	private Resource resource;

+

+	/**

+	 * The adapter factory

+	 */

+	private ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * The editing domain

+	 */

+	private EditingDomain editingDomain;

+

+	private EObject input;

+

+	public LeftMappingPart(Composite parent, EObject input) {

+		super(parent, SWT.NONE);

+		setLayout(new FillLayout());

+		this.input = input;

+		createControls();

+	}

+

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	private void createControls() {

+

+		createAdapterFactory();

+		createEditingDomain();

+		resource = editingDomain.getResourceSet().createResource(

+				URI.createURI("TEMP"));

+		resource.getContents().add(input);

+

+		Composite composite = new Composite(this, SWT.NONE);

+		composite.setLayout(new GridLayout(1, false));

+

+		createTreeViewer(composite);

+		treeViewer.setInput(resource);

+		treeViewer.expandAll();

+

+		new TreeViewerActionProvider(treeViewer);

+

+	}

+

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		treeViewer.addSelectionChangedListener(listener);

+	}

+

+	public void removeSelectionChangedListener(

+			ISelectionChangedListener listener) {

+		treeViewer.removeSelectionChangedListener(listener);

+	}

+

+	/**

+	 * Create the {@link AdapterFactory}

+	 * 

+	 */

+	private void createAdapterFactory() {

+		adapterFactory = new ComposedAdapterFactory();

+		adapterFactory

+				.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory

+				.addAdapterFactory(new MappingItemProviderAdapterFactory());

+	}

+

+	/**

+	 * Create the {@link EditingDomain}

+	 */

+	private void createEditingDomain() {

+		CommandStack commandStack = new BasicCommandStack();

+		commandStack.addCommandStackListener(new CommandStackListener() {

+

+			@Override

+			public void commandStackChanged(EventObject event) {

+				handleCommandStackChanged(((CommandStack) event.getSource())

+						.getMostRecentCommand());

+			}

+		});

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory,

+				commandStack);

+	}

+

+	/**

+	 * Called when the command stack is changed

+	 * 

+	 * @param mostRecentCommand

+	 *            : The most recent command

+	 */

+	protected void handleCommandStackChanged(final Command mostRecentCommand) {

+		// Try to select the affected objects.

+		//

+		if (mostRecentCommand != null) {

+			setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+		}

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * 

+	 * @param selections

+	 *            : The selection elements

+	 * 

+	 */

+	protected void setSelectionToViewer(final Collection<?> selections) {

+		if ((selections != null) && !selections.isEmpty()) {

+			final Object[] selectionsArray = selections.toArray();

+			final Runnable runnable = new Runnable() {

+

+				@Override

+				public void run() {

+					// Select the objects if the input of the viewer is not

+					// null, otherwise select them when the

+					// input will be set.

+					if (treeViewer != null) {

+						treeViewer.setSelection(new StructuredSelection(

+								selectionsArray), true);

+					}

+				}

+			};

+			if (false == isDisposed()) {

+				getDisplay().asyncExec(runnable);

+			}

+		}

+	}

+

+	private void createTreeViewer(Composite parent) {

+		treeViewer = new TreeViewer(parent);

+		treeViewer.getTree().setLayoutData(

+				new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

+		treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(

+				adapterFactory));

+		treeViewer.setContentProvider(new AdapterFactoryContentProvider(

+				adapterFactory));

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * 

+	 * @param key

+	 *            the key of the string.

+	 * @return a string resource associated with the key.

+	 */

+	protected static String getString(final String key) {

+		return CSVImporterPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * Called to dispose the widgets

+	 */

+	@Override

+	public void dispose() {

+		// saveInput();

+		try {

+			resource.delete(null);

+		} catch (IOException e) {

+			e.printStackTrace();

+		}

+		adapterFactory.dispose();

+	}

+

+	/**

+	 * An extended {@link IMenuListener} that manage undo, redo, cut, copy and

+	 * paste action.

+	 * 

+	 * @author Hussein MHANNA

+	 * 

+	 */

+	protected class TreeViewerActionProvider implements IMenuListener {

+

+		/**

+		 * This will contain one

+		 * {@link org.eclipse.emf.edit.ui.action.CreateChildAction}

+		 * corresponding to each descriptor generated for the current selection

+		 * by the item provider.

+		 */

+		protected Collection<StaticSelectionCommandAction> createChildActions;

+

+		/**

+		 * This is the action used to implement delete.

+		 */

+		private DeleteAction deleteAction;

+

+		/**

+		 * This is the action used to implement undo.

+		 */

+		private UndoAction undoAction;

+

+		/**

+		 * This is the action used to implement redo.

+		 */

+		private RedoAction redoAction;

+

+		/**

+		 * This is the action used to implement cut.

+		 */

+		private CutAction cutAction;

+

+		/**

+		 * This is the action used to implement copy.

+		 */

+		private CopyAction copyAction;

+

+		/**

+		 * This is the action used to implement paste.

+		 */

+		private PasteAction pasteAction;

+

+		/**

+		 * The tree viewer

+		 */

+		private final TreeViewer viewer;

+

+		/**

+		 * The selection changed listener

+		 */

+		private final ISelectionChangedListener selectionChangedListener;

+

+		/**

+		 * The constructor

+		 * 

+		 * @param viewer

+		 *            : The viewer on wich the actions will be added

+		 */

+		public TreeViewerActionProvider(final TreeViewer viewer) {

+			this.viewer = viewer;

+			initializeActions();

+			selectionChangedListener = new ISelectionChangedListener() {

+

+				@Override

+				public void selectionChanged(final SelectionChangedEvent event) {

+					TreeViewerActionProvider.this

+							.selectionChanged((IStructuredSelection) event

+									.getSelection());

+				}

+			};

+			this.viewer.addSelectionChangedListener(selectionChangedListener);

+			this.viewer.getTree().addDisposeListener(new DisposeListener() {

+

+				@Override

+				public void widgetDisposed(final DisposeEvent e) {

+					TreeViewerActionProvider.this.viewer

+							.removeSelectionChangedListener(selectionChangedListener);

+				}

+			});

+			final MenuManager manager = new MenuManager();

+			final Menu menu = manager.createContextMenu(viewer.getControl());

+			manager.addMenuListener(this);

+			manager.setRemoveAllWhenShown(true);

+			viewer.getControl().setMenu(menu);

+		}

+

+		/**

+		 * Initialize the actions

+		 */

+		private void initializeActions() {

+			final ISharedImages sharedImages = PlatformUI.getWorkbench()

+					.getSharedImages();

+

+			deleteAction = createDeleteAction();

+			deleteAction.setImageDescriptor(sharedImages

+					.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));

+

+			undoAction = createUndoAction();

+			undoAction.setImageDescriptor(sharedImages

+					.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO));

+

+			redoAction = createRedoAction();

+			redoAction.setImageDescriptor(sharedImages

+					.getImageDescriptor(ISharedImages.IMG_TOOL_REDO));

+

+			cutAction = createCutAction();

+			cutAction.setImageDescriptor(sharedImages

+					.getImageDescriptor(ISharedImages.IMG_TOOL_CUT));

+

+			copyAction = createCopyAction();

+			copyAction.setImageDescriptor(sharedImages

+					.getImageDescriptor(ISharedImages.IMG_TOOL_COPY));

+

+			pasteAction = createPasteAction();

+			pasteAction.setImageDescriptor(sharedImages

+					.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));

+

+		}

+

+		/**

+		 * Create a delete action.

+		 * 

+		 * @return the action used to implement delete.

+		 * 

+		 * @see #deleteAction

+		 */

+		protected DeleteAction createDeleteAction() {

+			return new DeleteAction(editingDomain, true);

+		}

+

+		/**

+		 * Create an undo action.

+		 * 

+		 * @return the action used to implement undo.

+		 * 

+		 * @see #undoAction

+		 */

+		protected UndoAction createUndoAction() {

+			return new UndoAction(editingDomain);

+		}

+

+		/**

+		 * Create a redo action.

+		 * 

+		 * @return the action used to implement redo.

+		 * 

+		 * @see #redoAction

+		 */

+		protected RedoAction createRedoAction() {

+			return new RedoAction(editingDomain);

+		}

+

+		/**

+		 * Create a cut action.

+		 * 

+		 * @return the action used to implement cut.

+		 * 

+		 * @see #cutAction

+		 */

+		protected CutAction createCutAction() {

+			return new CutAction(editingDomain);

+		}

+

+		/**

+		 * Create a copy action.

+		 * 

+		 * @return the action used to implement copy.

+		 * 

+		 * @see #copyAction

+		 */

+		protected CopyAction createCopyAction() {

+			return new CopyAction(editingDomain);

+		}

+

+		/**

+		 * Create a paste action.

+		 * 

+		 * @return the action used to implement paste.

+		 * 

+		 * @see #pasteAction

+		 */

+		protected PasteAction createPasteAction() {

+			return new PasteAction(editingDomain);

+		}

+

+		/**

+		 * This implements {@link org.eclipse.jface.action.IMenuListener} to

+		 * help fill the context menus with contributions from the Edit menu.

+		 * 

+		 * @param menuManager

+		 *            The menu manager.

+		 */

+		@Override

+		public void menuAboutToShow(final IMenuManager menuManager) {

+			MenuManager submenuManager = null;

+

+			submenuManager = new MenuManager("New");

+			populateManager(submenuManager, createChildActions, null);

+			menuManager.add(submenuManager);

+

+			menuManager.add(new Separator());

+			menuManager.add(new ActionContributionItem(undoAction));

+			menuManager.add(new ActionContributionItem(redoAction));

+			menuManager.add(new Separator());

+			menuManager.add(new ActionContributionItem(cutAction));

+			menuManager.add(new ActionContributionItem(copyAction));

+			menuManager.add(new ActionContributionItem(pasteAction));

+			menuManager.add(new Separator());

+			menuManager.add(new ActionContributionItem(deleteAction));

+		}

+

+		/**

+		 * Called when the selection is changed in the tree viewer.

+		 * 

+		 * @param selection

+		 *            The selection of {@link SelectionChangedEvent}.

+		 */

+		private void selectionChanged(final IStructuredSelection selection) {

+			deleteAction.selectionChanged(selection);

+			undoAction.update();

+			redoAction.update();

+			cutAction.selectionChanged(selection);

+			copyAction.selectionChanged(selection);

+			pasteAction.selectionChanged(selection);

+			// Query the new selection for appropriate new child/descriptors

+			//

+			Collection<?> newChildDescriptors = null;

+

+			if (selection.size() == 1) {

+				final Object object = selection.getFirstElement();

+

+				newChildDescriptors = editingDomain.getNewChildDescriptors(

+						object, null);

+			}

+

+			// Generate actions for selection; populate and redraw the menus.

+			//

+			createChildActions = generateCreateChildActions(

+					newChildDescriptors, selection);

+

+		}

+

+		protected Collection<StaticSelectionCommandAction> generateCreateChildActions(

+				final Collection<?> descriptors, final ISelection selection) {

+			final Collection<StaticSelectionCommandAction> actions = new ArrayList<StaticSelectionCommandAction>();

+			if (descriptors != null) {

+				for (final Object descriptor : descriptors) {

+					actions.add(createCreateChildAction(selection, descriptor));

+				}

+			}

+			return actions;

+		}

+

+		protected CreateChildAction createCreateChildAction(

+				final ISelection selection, final Object descriptor) {

+			return new CreateChildAction(editingDomain, selection, descriptor);

+		}

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with

+	 * {@link org.eclipse.jface.action.ActionContributionItem}s based on the

+	 * {@link org.eclipse.jface.action.IAction}s contained in the

+	 * <code>actions</code> collection, by inserting them before the specified

+	 * contribution item <code>contributionID</code>. If <code>ID</code> is

+	 * <code>null</code>, they are simply added.

+	 */

+	protected void populateManager(final IContributionManager manager,

+			final Collection<? extends IAction> actions,

+			final String contributionID) {

+		if (actions != null) {

+			for (final IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				} else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+

+	public void setColumnMappingInput(List<String> columnMappingInput) {

+	}

+

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/RightMappingPart.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/RightMappingPart.java
new file mode 100644
index 0000000..e30aaf6
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/ui/wizards/pages/RightMappingPart.java
@@ -0,0 +1,201 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages;

+

+import static org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage.Literals.MAPPING_ITEM__ATTRIBUTE_NAME;

+import static org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage.Literals.MAPPING_ITEM__COLUMN_ID;

+import static org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage.Literals.MAPPING_ITEM__DATA_TYPE;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.databinding.Binding;

+import org.eclipse.core.databinding.DataBindingContext;

+import org.eclipse.core.databinding.observable.Realm;

+import org.eclipse.core.databinding.observable.value.IObservableValue;

+import org.eclipse.core.databinding.observable.value.WritableValue;

+import org.eclipse.emf.databinding.edit.EMFEditObservables;

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

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.jface.databinding.fieldassist.ControlDecorationSupport;

+import org.eclipse.jface.databinding.swt.WidgetProperties;

+import org.eclipse.jface.databinding.viewers.ViewersObservables;

+import org.eclipse.jface.viewers.ArrayContentProvider;

+import org.eclipse.jface.viewers.ComboViewer;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.LabelProvider;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.DataType;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.layout.FillLayout;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

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

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

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

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

+

+public class RightMappingPart extends Composite {

+

+	/**

+	 * The input object

+	 */

+	private Object input;

+

+	/**

+	 * The column mapping combo viewer

+	 */

+	private ComboViewer columnMappingComboViewer;

+

+	/**

+	 * The attribute name text widget

+	 */

+	private Text attributeNameTextWidget;

+

+	/**

+	 * The data type combo viewer

+	 */

+	private ComboViewer dataTypeComboViewer;

+

+	/**

+	 * The writable value

+	 */

+	private WritableValue writableValue = new WritableValue();

+

+	/**

+	 * The editing domain

+	 */

+	private EditingDomain editingDomain;

+

+	/**

+	 * The data binding context

+	 */

+	private DataBindingContext bindingContext;

+

+	private List<String> columnMappingInput = new ArrayList<String>();

+

+	public RightMappingPart(Composite parent, EditingDomain editingDomain) {

+		super(parent, SWT.NONE);

+		this.editingDomain = editingDomain;

+		setLayout(new FillLayout());

+		createControls();

+	}

+

+	/**

+	 * {@inheritDoc} Update the selection and call {@link #update(Object)}

+	 */

+	public void selectionChanged(final ISelection selection) {

+		final IStructuredSelection structuredSelection = (IStructuredSelection) selection;

+		if (structuredSelection.size() == 1) {

+			input = structuredSelection.getFirstElement();

+		}

+		writableValue.setValue(input);

+	}

+

+	protected void initDataBindings() {

+		bindingContext = new DataBindingContext();

+		Binding columnMappingComboViewerBinding = bindComboViewer(

+				columnMappingComboViewer, MAPPING_ITEM__COLUMN_ID);

+		ControlDecorationSupport.create(columnMappingComboViewerBinding,

+				SWT.TOP | SWT.LEFT);

+

+		Binding attributeNameTextWidgetBinding = bindTextWidget(

+				attributeNameTextWidget, MAPPING_ITEM__ATTRIBUTE_NAME);

+		ControlDecorationSupport.create(attributeNameTextWidgetBinding, SWT.TOP

+				| SWT.LEFT);

+		Binding dataTypeComboViewerBinding = bindComboViewer(

+				dataTypeComboViewer, MAPPING_ITEM__DATA_TYPE);

+		ControlDecorationSupport.create(dataTypeComboViewerBinding, SWT.TOP

+				| SWT.LEFT);

+	}

+

+	private Binding bindTextWidget(Text textWidget, EStructuralFeature feature) {

+		IObservableValue target = WidgetProperties.text(SWT.Modify).observe(

+				textWidget);

+		IObservableValue model = EMFEditObservables.observeDetailValue(

+				Realm.getDefault(), editingDomain, writableValue, feature);

+		return bindingContext.bindValue(target, model, null, null);

+	}

+

+	private Binding bindComboViewer(ComboViewer comboViewer,

+			EStructuralFeature feature) {

+		//

+		IObservableValue target = ViewersObservables

+				.observeSingleSelection(comboViewer);

+		IObservableValue model = EMFEditObservables.observeDetailValue(

+				Realm.getDefault(), editingDomain, writableValue, feature);

+		return bindingContext.bindValue(target, model, null, null);

+	}

+

+	private void createControls() {

+		Composite composite = new Composite(this, SWT.NONE);

+		composite.setLayout(new GridLayout(2, false));

+

+		createColumnMappingComboViewer(composite);

+

+		createAttributeNameTextWidget(composite);

+

+		createDataTypeComboViewer(composite);

+

+		initDataBindings();

+	}

+

+	private void createColumnMappingComboViewer(Composite composite) {

+		columnMappingComboViewer = createComboViewer("Column Mapping : ",

+				composite, columnMappingInput);

+	}

+

+	protected void setColumnMappingInput(List<String> columnMappingInput) {

+		this.columnMappingInput.clear();

+		this.columnMappingInput.add("");

+		this.columnMappingInput.addAll(columnMappingInput);

+		if (columnMappingComboViewer != null) {

+			columnMappingComboViewer.refresh();

+		}

+	}

+

+	private void createAttributeNameTextWidget(Composite composite) {

+		attributeNameTextWidget = createText("Attribute name", composite);

+	}

+

+	private void createDataTypeComboViewer(Composite composite) {

+		dataTypeComboViewer = createComboViewer("Data Type : ", composite,

+				DataType.values());

+	}

+

+	private Label createLabel(Composite parent, String labelText) {

+		Label label = new Label(parent, SWT.NONE);

+		label.setText(labelText);

+		return label;

+	}

+

+	private Text createText(String labelText, Composite composite) {

+		createLabel(composite, labelText);

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

+		text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

+		return text;

+	}

+

+	private ComboViewer createComboViewer(String labelText, Composite parent,

+			Object input) {

+		createLabel(parent, labelText);

+		ComboViewer comboViewer = new ComboViewer(parent, SWT.READ_ONLY);

+		Combo combo = comboViewer.getCombo();

+		combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1,

+				1));

+		comboViewer.setLabelProvider(new LabelProvider());

+		comboViewer.setContentProvider(new ArrayContentProvider());

+		comboViewer.setInput(input);

+		return comboViewer;

+	}

+

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/utils/Importer.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/utils/Importer.java
new file mode 100644
index 0000000..52531fd
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/utils/Importer.java
@@ -0,0 +1,465 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.utils;

+

+import java.io.File;

+import java.io.FileReader;

+import java.io.IOException;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CompoundCommand;

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

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

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

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

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.emf.edit.command.AddCommand;

+import org.eclipse.emf.edit.command.CommandParameter;

+import org.eclipse.emf.edit.command.CreateChildCommand;

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.rmf.reqif10.AttributeDefinition;

+import org.eclipse.rmf.reqif10.AttributeDefinitionBoolean;

+import org.eclipse.rmf.reqif10.AttributeDefinitionDate;

+import org.eclipse.rmf.reqif10.AttributeDefinitionEnumeration;

+import org.eclipse.rmf.reqif10.AttributeDefinitionInteger;

+import org.eclipse.rmf.reqif10.AttributeDefinitionReal;

+import org.eclipse.rmf.reqif10.AttributeDefinitionString;

+import org.eclipse.rmf.reqif10.AttributeDefinitionXHTML;

+import org.eclipse.rmf.reqif10.AttributeValue;

+import org.eclipse.rmf.reqif10.AttributeValueEnumeration;

+import org.eclipse.rmf.reqif10.AttributeValueXHTML;

+import org.eclipse.rmf.reqif10.DatatypeDefinition;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionBoolean;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionDate;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionEnumeration;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionInteger;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionReal;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionString;

+import org.eclipse.rmf.reqif10.DatatypeDefinitionXHTML;

+import org.eclipse.rmf.reqif10.EnumValue;

+import org.eclipse.rmf.reqif10.ReqIF;

+import org.eclipse.rmf.reqif10.ReqIF10Factory;

+import org.eclipse.rmf.reqif10.ReqIF10Package;

+import org.eclipse.rmf.reqif10.SpecHierarchy;

+import org.eclipse.rmf.reqif10.SpecObject;

+import org.eclipse.rmf.reqif10.SpecObjectType;

+import org.eclipse.rmf.reqif10.SpecType;

+import org.eclipse.rmf.reqif10.Specification;

+import org.eclipse.rmf.reqif10.common.util.ReqIF10Util;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.DataType;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingItem;

+import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;

+

+import au.com.bytecode.opencsv.CSVReader;

+

+public class Importer {

+

+	private static final ReqIF10Factory FACTORY = ReqIF10Factory.eINSTANCE;

+	private EditingDomain editingDomain;

+	private String path;

+	private MappingLibrary library;

+	private ReqIF reqIf;

+	private char separator;

+	private boolean header;

+	private CompoundCommand compoundCommand;

+	private Map<String, AttributeDefinition> attributeDefinitionMap;

+

+	public Importer(EditingDomain editingDomain, String path,

+			MappingLibrary library, ReqIF reqIf, char separator, boolean header) {

+		super();

+		this.editingDomain = editingDomain;

+		this.path = path;

+		this.library = library;

+		this.reqIf = reqIf;

+		this.separator = separator;

+		this.header = header;

+		attributeDefinitionMap = new HashMap<String, AttributeDefinition>();

+	}

+

+	public static void importReq(EditingDomain editingDomain, IFile file, String path,

+			MappingLibrary library, char separator, boolean header)

+			throws IOException {

+		boolean needDispose = false;

+		if (editingDomain == null) {

+			URI uri = URI.createPlatformResourceURI(

+					file.getFullPath().toOSString(), true);

+			editingDomain = Utils.createReqIFEditingDomain();

+			editingDomain.getResourceSet().getResource(uri, true);

+			needDispose = true;

+		}

+		ReqIF reqIf = (ReqIF) editingDomain.getResourceSet().getResources()

+				.get(0).getContents().get(0);

+		Importer importer = new Importer(editingDomain, path, library, reqIf,

+				separator, header);

+		importer.doImportReq();

+		if (needDispose) {

+			ComposedAdapterFactory adapterFactory = (ComposedAdapterFactory) ((AdapterFactoryEditingDomain) editingDomain)

+					.getAdapterFactory();

+			adapterFactory.dispose();

+			EList<Resource> resources = editingDomain.getResourceSet()

+					.getResources();

+			final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+			saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,

+					Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+			for (Resource resource : resources) {

+				resource.save(saveOptions);

+				resource.unload();

+				resource.getContents().clear();

+			}

+		}

+	}

+

+	public void doImportReq() throws IOException {

+		CSVReader reader = new CSVReader(new FileReader(path), separator);

+

+		Map<Short, String> map = null;

+		if (header) {

+			String[] headerNames = reader.readNext();

+			map = buildMappingMap(library, Arrays.asList(headerNames));

+		} else {

+			map = buildMappingMap(library);

+		}

+		compoundCommand = new CompoundCommand();

+		importReq(reader, map, library.getItems());

+		editingDomain.getCommandStack().execute(compoundCommand);

+		compoundCommand = null;

+		attributeDefinitionMap.clear();

+	}

+

+	protected void importReq(CSVReader reader, Map<Short, String> map,

+			List<MappingItem> mappingItems) throws IOException {

+		Specification specification = reqIf.getCoreContent()

+				.getSpecifications().get(0);

+		SpecObjectType specObjectType = getSpecObjectType(mappingItems,

+				getSpecTypeName());

+		System.out.println();

+		String[] nextLine;

+		while ((nextLine = reader.readNext()) != null) {

+			Command command = CreateChildCommand.create(editingDomain,

+					specification, new CommandParameter(specification,

+							ReqIF10Package.Literals.SPECIFICATION__CHILDREN,

+							specObjectType), Collections

+							.singleton(specification));

+			compoundCommand.appendAndExecute(command);

+			Collection<?> result = command.getResult();

+			for (Object object : result) {

+				if (object instanceof SpecHierarchy) {

+					SpecObject specObject = ((SpecHierarchy) object)

+							.getObject();

+					createAttributeValues(specObject);

+					for (int i = 0; i < nextLine.length; i++) {

+						String attributeName = map.get((short) i);

+						String attributeStringValue = nextLine[i];

+						if (attributeName != null) {

+							EAttribute attribute = getSpecObjectAttribute(attributeName);

+							if (attribute != null) {

+								specObject.eSet(attribute, EcoreUtil

+										.createFromString(

+												attribute.getEAttributeType(),

+												attributeStringValue));

+							} else {

+								AttributeDefinition attributeDefinition = attributeDefinitionMap

+										.get(attributeName);

+								AttributeValue attributeValue = ReqIF10Util

+										.getAttributeValue(specObject,

+												attributeDefinition);

+								if (attributeValue != null) {

+									if (attributeValue instanceof AttributeValueEnumeration) {

+										EnumValue enumValue = getEnumValue(

+												(AttributeDefinitionEnumeration) attributeDefinition,

+												attributeStringValue);

+										ReqIF10Util.setTheValue(attributeValue,

+												Collections

+														.singleton(enumValue));

+									} else if (attributeValue instanceof AttributeValueXHTML) {

+									} else {

+										EAttribute eAttribute = (EAttribute) ReqIF10Util

+												.getTheValueFeature(attributeValue);

+										ReqIF10Util

+												.setTheValue(

+														attributeValue,

+														EcoreUtil

+																.createFromString(

+																		eAttribute

+																				.getEAttributeType(),

+																		attributeStringValue));

+

+									}

+								}

+							}

+						}

+					}

+				}

+			}

+		}

+		reader.close();

+	}

+

+	private void createAttributeValues(SpecObject specObject) {

+		EList<AttributeDefinition> attributeDefinitions = specObject.getType()

+				.getSpecAttributes();

+		for (AttributeDefinition attributeDefinition : attributeDefinitions) {

+			specObject.getValues().add(

+					ReqIF10Util.createAttributeValue(attributeDefinition));

+		}

+	}

+

+	private EnumValue getEnumValue(

+			AttributeDefinitionEnumeration attributeDefinition,

+			String attributeStringValue) {

+		EList<EnumValue> values = attributeDefinition.getType()

+				.getSpecifiedValues();

+		for (EnumValue enumValue : values) {

+			if ((enumValue.getLongName() != null)

+					&& (enumValue.getLongName().equals(attributeStringValue))) {

+				return enumValue;

+			}

+		}

+		// Create the attribute value and return it

+		EnumValue enumValue = FACTORY.createEnumValue();

+		enumValue.setLongName(attributeStringValue);

+		values.add(enumValue);

+		return enumValue;

+	}

+

+	protected SpecObjectType getSpecObjectType(List<MappingItem> mappingItems,

+			String specTypeName) {

+		EList<SpecType> specTypes = reqIf.getCoreContent().getSpecTypes();

+		for (SpecType specType : specTypes) {

+			if (specType instanceof SpecObjectType) {

+				SpecObjectType specObjectType = (SpecObjectType) specType;

+				if (containsAttributeDefinitions(specObjectType, mappingItems,

+						specTypeName)) {

+					fillAttributeDefinitionMap(specObjectType);

+					return specObjectType;

+				}

+			}

+		}

+		return createSpecObjectType(mappingItems, specTypeName);

+	}

+

+	private void fillAttributeDefinitionMap(SpecObjectType specObjectType) {

+		EList<AttributeDefinition> attributeDefinitions = specObjectType

+				.getSpecAttributes();

+		for (AttributeDefinition attributeDefinition : attributeDefinitions) {

+			attributeDefinitionMap.put(attributeDefinition.getLongName(),

+					attributeDefinition);

+		}

+

+	}

+

+	private boolean containsAttributeDefinitions(SpecObjectType specObjectType,

+			List<MappingItem> mappingItems, String specTypeName) {

+		if ((specObjectType.getLongName() == null)

+				|| (false == specObjectType.getLongName().equals(specTypeName))) {

+			return false;

+		}

+		if (mappingItems.size() != specObjectType.getSpecAttributes().size()) {

+			return false;

+		}

+		for (MappingItem mappingItem : mappingItems) {

+			if (false == containsAttributeDefinition(specObjectType,

+					mappingItem)) {

+				return false;

+			}

+		}

+		return true;

+	}

+

+	private boolean containsAttributeDefinition(SpecObjectType specObjectType,

+			MappingItem item) {

+		boolean found = false;

+		EList<AttributeDefinition> attributeDefinitions = specObjectType

+				.getSpecAttributes();

+		for (AttributeDefinition attributeDefinition : attributeDefinitions) {

+			if ((attributeDefinition.getLongName() != null)

+					&& (attributeDefinition.getLongName().equals(item

+							.getAttributeName()))) {

+				switch (item.getDataType()) {

+				case BOOLEAN:

+					found = attributeDefinition instanceof AttributeDefinitionBoolean;

+					break;

+				case INTEGER:

+					found = attributeDefinition instanceof AttributeDefinitionInteger;

+					break;

+				case REAL:

+					found = attributeDefinition instanceof AttributeDefinitionReal;

+					break;

+				case DATE:

+					found = attributeDefinition instanceof AttributeDefinitionDate;

+					break;

+				case XHTML:

+					found = attributeDefinition instanceof AttributeDefinitionXHTML;

+					break;

+				case ENUMERATION:

+					found = attributeDefinition instanceof AttributeDefinitionEnumeration;

+					break;

+				case STRING:

+				default:

+					found = attributeDefinition instanceof AttributeDefinitionString;

+					break;

+				}

+				if (found) {

+					break;

+				}

+

+			}

+		}

+		return found;

+	}

+

+	protected SpecObjectType createSpecObjectType(

+			List<MappingItem> mappingItems, String specTypeName) {

+		SpecObjectType specObjectType = FACTORY.createSpecObjectType();

+		specObjectType.setLongName(specTypeName);

+		for (MappingItem mappingItem : mappingItems) {

+			String attributeName = mappingItem.getAttributeName();

+			if (getSpecObjectAttribute(attributeName) == null) {

+				DatatypeDefinition datatypeDefinition = createDatatypeDefinition(

+						mappingItem.getDataType(), attributeName);

+				Command command = AddCommand.create(editingDomain,

+						reqIf.getCoreContent(),

+						ReqIF10Package.Literals.REQ_IF_CONTENT__DATATYPES,

+						Collections.singleton(datatypeDefinition));

+				compoundCommand.appendAndExecute(command);

+				AttributeDefinition attributeDefinition = createAttributeDefinition(

+						datatypeDefinition, attributeName);

+				attributeDefinition.setLongName(attributeName);

+				specObjectType.getSpecAttributes().add(attributeDefinition);

+			}

+		}

+		Command specTypecommand = AddCommand.create(editingDomain,

+				reqIf.getCoreContent(),

+				ReqIF10Package.Literals.REQ_IF_CONTENT__SPEC_TYPES,

+				Collections.singleton(specObjectType));

+		compoundCommand.appendAndExecute(specTypecommand);

+		fillAttributeDefinitionMap(specObjectType);

+		return specObjectType;

+	}

+

+	protected AttributeDefinition createAttributeDefinition(

+			DatatypeDefinition datatypeDefinition, String name) {

+		AttributeDefinition attributeDefinition = null;

+		if (datatypeDefinition instanceof DatatypeDefinitionBoolean) {

+			attributeDefinition = FACTORY.createAttributeDefinitionBoolean();

+			((AttributeDefinitionBoolean) attributeDefinition)

+					.setType((DatatypeDefinitionBoolean) datatypeDefinition);

+		} else if (datatypeDefinition instanceof DatatypeDefinitionInteger) {

+			attributeDefinition = FACTORY.createAttributeDefinitionInteger();

+			((AttributeDefinitionInteger) attributeDefinition)

+					.setType((DatatypeDefinitionInteger) datatypeDefinition);

+		} else if (datatypeDefinition instanceof DatatypeDefinitionReal) {

+			attributeDefinition = FACTORY.createAttributeDefinitionReal();

+			((AttributeDefinitionReal) attributeDefinition)

+					.setType((DatatypeDefinitionReal) datatypeDefinition);

+		} else if (datatypeDefinition instanceof DatatypeDefinitionDate) {

+			attributeDefinition = FACTORY.createAttributeDefinitionDate();

+			((AttributeDefinitionDate) attributeDefinition)

+					.setType((DatatypeDefinitionDate) datatypeDefinition);

+		} else if (datatypeDefinition instanceof DatatypeDefinitionXHTML) {

+			attributeDefinition = FACTORY.createAttributeDefinitionXHTML();

+			((AttributeDefinitionXHTML) attributeDefinition)

+					.setType((DatatypeDefinitionXHTML) datatypeDefinition);

+		} else if (datatypeDefinition instanceof DatatypeDefinitionEnumeration) {

+			attributeDefinition = FACTORY

+					.createAttributeDefinitionEnumeration();

+			((AttributeDefinitionEnumeration) attributeDefinition)

+					.setType((DatatypeDefinitionEnumeration) datatypeDefinition);

+		} else {

+			attributeDefinition = FACTORY.createAttributeDefinitionString();

+			((AttributeDefinitionString) attributeDefinition)

+					.setType((DatatypeDefinitionString) datatypeDefinition);

+		}

+		attributeDefinition.setLongName(name);

+		return attributeDefinition;

+	}

+

+	protected DatatypeDefinition createDatatypeDefinition(DataType dataType,

+			String name) {

+		DatatypeDefinition dataTypeDefinition = null;

+		switch (dataType) {

+		case BOOLEAN:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionBoolean();

+			break;

+		case INTEGER:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionInteger();

+			break;

+		case REAL:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionReal();

+			break;

+		case DATE:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionDate();

+			break;

+		case XHTML:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionXHTML();

+			break;

+		case ENUMERATION:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionEnumeration();

+			break;

+		case STRING:

+		default:

+			dataTypeDefinition = FACTORY.createDatatypeDefinitionString();

+			break;

+		}

+		dataTypeDefinition.setLongName(name);

+		return dataTypeDefinition;

+	}

+

+	protected EAttribute getSpecObjectAttribute(String attributeName) {

+		EStructuralFeature feature = ReqIF10Package.Literals.SPEC_OBJECT

+				.getEStructuralFeature(attributeName);

+		if (feature instanceof EAttribute) {

+			return (EAttribute) feature;

+		}

+

+		return null;

+	}

+

+	protected Map<Short, String> buildMappingMap(MappingLibrary library) {

+		List<MappingItem> items = library.getItems();

+		Map<Short, String> map = new HashMap<Short, String>(items.size());

+		for (MappingItem columnIndexMappingItem : items) {

+			map.put(Short.valueOf(columnIndexMappingItem.getColumnId()),

+					columnIndexMappingItem.getAttributeName());

+		}

+		return map;

+	}

+

+	protected Map<Short, String> buildMappingMap(MappingLibrary library,

+			List<String> columnNames) {

+		List<MappingItem> items = library.getItems();

+		Map<Short, String> map = new HashMap<Short, String>(items.size());

+		for (MappingItem columnNameMappingItem : items) {

+			String columnName = columnNameMappingItem.getColumnId();

+			short columnIndex = (short) columnNames.indexOf(columnName);

+			if (columnIndex != -1) {

+				map.put(columnIndex, columnNameMappingItem.getAttributeName());

+			}

+		}

+		return map;

+	}

+

+	protected String getSpecTypeName() {

+		return path.substring(path.lastIndexOf(File.separator) + 1,

+				path.lastIndexOf('.'));

+	}

+}

diff --git a/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/utils/Utils.java b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/utils/Utils.java
new file mode 100644
index 0000000..e7580af
--- /dev/null
+++ b/org.eclipse.rmf.reqif10.csv.importer/src/org/eclipse/rmf/reqif10/csv/importer/utils/Utils.java
@@ -0,0 +1,76 @@
+/*******************************************************************************

+ * Copyright (c) 2014 Hussein Mhanna

+ * 

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

+ *     Hussein Mhanna - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.rmf.reqif10.csv.importer.utils;

+

+import java.io.FileReader;

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.List;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+import org.eclipse.rmf.reqif10.pror.configuration.provider.ConfigurationItemProviderAdapterFactory;

+import org.eclipse.rmf.reqif10.pror.provider.ReqIF10ItemProviderAdapterFactory;

+import org.eclipse.rmf.reqif10.xhtml.provider.XhtmlItemProviderAdapterFactory;

+import org.eclipse.rmf.serialization.XMLPersistenceMappingResourceSetImpl;

+

+import au.com.bytecode.opencsv.CSVReader;

+

+public class Utils {

+

+	public static List<String> getColumnIds(String path, char separator,

+			boolean header) throws IOException {

+		CSVReader reader = new CSVReader(new FileReader(path), separator);

+		String[] headerLine = reader.readNext();

+		reader.close();

+		if (header) {

+			return Arrays.asList(headerLine);

+		} else {

+			List<String> columnIDs = new ArrayList<String>(headerLine.length);

+			for (int i = 0; i < headerLine.length; i++) {

+				columnIDs.add(String.valueOf(i));

+			}

+			return columnIDs;

+		}

+	}

+

+	public static EditingDomain createReqIFEditingDomain() {

+		ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(

+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory

+				.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory

+				.addAdapterFactory(new ReqIF10ItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new XhtmlItemProviderAdapterFactory());

+		adapterFactory

+				.addAdapterFactory(new ConfigurationItemProviderAdapterFactory());

+		adapterFactory

+				.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+		// Create the editing domain with a special command stack.

+		//

+		EditingDomain editingDomain = new AdapterFactoryEditingDomain(

+				adapterFactory, new BasicCommandStack(),

+				new XMLPersistenceMappingResourceSetImpl());

+		editingDomain

+				.getResourceSet()

+				.eAdapters()

+				.add(new AdapterFactoryEditingDomain.EditingDomainProvider(

+						editingDomain));

+		return editingDomain;

+	}

+}

diff --git a/org.eclipse.rmf.reqif10.feature/feature.xml b/org.eclipse.rmf.reqif10.feature/feature.xml
index 3d0993b..27f3a11 100644
--- a/org.eclipse.rmf.reqif10.feature/feature.xml
+++ b/org.eclipse.rmf.reqif10.feature/feature.xml
@@ -83,4 +83,10 @@
          install-size="0"
          version="0.0.0"/>
 
+   <plugin
+         id="org.eclipse.rmf.ext.prostep"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
 </feature>
diff --git a/org.eclipse.rmf.reqif10.pror.editor/plugin.properties b/org.eclipse.rmf.reqif10.pror.editor/plugin.properties
index 74582bd..9c7507e 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/plugin.properties
+++ b/org.eclipse.rmf.reqif10.pror.editor/plugin.properties
@@ -128,3 +128,4 @@
 _UI_Standard_Properties = Standard Attributes

 _UI_All_Properties = All Attributes

 

+_UI_Import_Wizard_category = ProR (ReqIf)
\ No newline at end of file
diff --git a/org.eclipse.rmf.reqif10.pror.editor/plugin.xml b/org.eclipse.rmf.reqif10.pror.editor/plugin.xml
index eb1ed31..819441f 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/plugin.xml
+++ b/org.eclipse.rmf.reqif10.pror.editor/plugin.xml
@@ -245,5 +245,12 @@
           file="help-contexts.xml">

     </contexts>

  </extension>

+ <extension

+       point="org.eclipse.ui.importWizards">

+    <category

+          id="org.eclipse.rmf.pror.import.category"

+          name="%_UI_Import_Wizard_category">

+    </category>

+ </extension>

 

 </plugin>

diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/presentation/Reqif10Editor.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/presentation/Reqif10Editor.java
index ec634cb..76cdfa6 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/presentation/Reqif10Editor.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/presentation/Reqif10Editor.java
@@ -1466,11 +1466,9 @@
 	 */

 	@Override

 	public void doSave(IProgressMonitor progressMonitor) {

+		ISelection currentSelection = getSite().getSelectionProvider().getSelection();

 		// Update ReqIF ID.

-		Command cmd = SetCommand.create(editingDomain, reqif.getTheHeader(),

-				ReqIF10Package.Literals.REQ_IF_HEADER__IDENTIFIER, UUID

-						.randomUUID().toString());

-		editingDomain.getCommandStack().execute(cmd);

+		reqif.getTheHeader().setIdentifier(UUID.randomUUID().toString());

 

 		// Save only resources that have actually changed.

 		//

@@ -1529,6 +1527,8 @@
 		}

 		updateProblemIndication = true;

 		updateProblemIndication();

+		

+		getSite().getSelectionProvider().setSelection(currentSelection);

 	}

 

 	/**

diff --git a/org.eclipse.rmf.reqif10.pror.feature/feature.xml b/org.eclipse.rmf.reqif10.pror.feature/feature.xml
index 628e2fa..6b00669 100644
--- a/org.eclipse.rmf.reqif10.pror.feature/feature.xml
+++ b/org.eclipse.rmf.reqif10.pror.feature/feature.xml
@@ -112,4 +112,11 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.rmf.reqif10.csv.importer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
diff --git a/org.eclipse.rmf.reqif10.pror.tests/META-INF/MANIFEST.MF b/org.eclipse.rmf.reqif10.pror.tests/META-INF/MANIFEST.MF
index fa8a34e..1b78a5e 100644
--- a/org.eclipse.rmf.reqif10.pror.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.rmf.reqif10.pror.tests/META-INF/MANIFEST.MF
@@ -15,7 +15,8 @@
  org.eclipse.rmf.reqif10.pror.presentation.id;bundle-version="0.9.0",

  org.eclipse.rmf.reqif10.pror.presentation.linewrap;bundle-version="0.9.0",

  org.eclipse.rmf.reqif10.xhtml;bundle-version="0.9.0",

- org.eclipse.rmf.reqif10.serialization;bundle-version="0.9.0"

+ org.eclipse.rmf.reqif10.serialization;bundle-version="0.9.0",

+ org.eclipse.rmf.ext.prostep

 Bundle-Vendor: %providerName

 Export-Package: org.eclipse.rmf.reqif10.pror.configuration.provider,or

  g.eclipse.rmf.reqif10.pror.testdata,org.eclipse.rmf.reqif10.pror.test

diff --git a/org.eclipse.rmf.reqif10.pror.tests/src/org/eclipse/rmf/reqif10/pror/testframework/AbstractItemProviderTest.java b/org.eclipse.rmf.reqif10.pror.tests/src/org/eclipse/rmf/reqif10/pror/testframework/AbstractItemProviderTest.java
index fc157c3..996ce86 100644
--- a/org.eclipse.rmf.reqif10.pror.tests/src/org/eclipse/rmf/reqif10/pror/testframework/AbstractItemProviderTest.java
+++ b/org.eclipse.rmf.reqif10.pror.tests/src/org/eclipse/rmf/reqif10/pror/testframework/AbstractItemProviderTest.java
@@ -38,6 +38,7 @@
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;

 import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

 import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+import org.eclipse.rmf.ext.prostep.util.ProstepAdapterFactory;

 import org.eclipse.rmf.reqif10.ReqIF;

 import org.eclipse.rmf.reqif10.pror.configuration.provider.ConfigurationItemProviderAdapterFactory;

 import org.eclipse.rmf.reqif10.pror.configuration.util.ConfigurationAdapterFactory;

@@ -107,7 +108,9 @@
 				.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

 		adapterFactory

 				.addAdapterFactory(new ConfigurationItemProviderAdapterFactory());

-

+		adapterFactory.addAdapterFactory(new ProstepAdapterFactory());

+		

+		

 		commandStack = new BasicCommandStack();

 		editingDomain = new AdapterFactoryEditingDomain(adapterFactory,

 				commandStack, new XMLPersistenceMappingResourceSetImpl());

diff --git a/org.eclipse.rmf.tests.ext.prostep/.classpath b/org.eclipse.rmf.tests.ext.prostep/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/.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.rmf.tests.ext.prostep/.gitignore b/org.eclipse.rmf.tests.ext.prostep/.gitignore
new file mode 100644
index 0000000..70db735
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/.gitignore
@@ -0,0 +1,3 @@
+bin
+target
+work
\ No newline at end of file
diff --git a/org.eclipse.rmf.tests.ext.prostep/.project b/org.eclipse.rmf.tests.ext.prostep/.project
new file mode 100644
index 0000000..64f4863
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.rmf.tests.ext.prostep</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.rmf.tests.ext.prostep/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.rmf.tests.ext.prostep/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/.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.rmf.tests.ext.prostep/META-INF/MANIFEST.MF b/org.eclipse.rmf.tests.ext.prostep/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fdbf1c2
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.rmf.tests.ext.prostep
+Bundle-Version: 0.11.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.junit,
+ org.eclipse.rmf.reqif10;bundle-version="0.11.0",
+ org.eclipse.rmf.ext.prostep;bundle-version="0.11.0",
+ org.eclipse.rmf.reqif10.common;bundle-version="0.11.0",
+ org.eclipse.rmf.reqif10.serialization;bundle-version="0.11.0",
+ org.eclipse.rmf.tests.reqif10.serialization;bundle-version="0.11.0",
+ org.eclipse.rmf.tests.reqif10.serialization,
+ org.eclipse.rmf.serialization
diff --git a/org.eclipse.rmf.tests.ext.prostep/about.html b/org.eclipse.rmf.tests.ext.prostep/about.html
new file mode 100644
index 0000000..c258ef5
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.rmf.tests.ext.prostep/build.properties b/org.eclipse.rmf.tests.ext.prostep/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/org.eclipse.rmf.tests.ext.prostep/epl-v10.html b/org.eclipse.rmf.tests.ext.prostep/epl-v10.html
new file mode 100644
index 0000000..3998fce
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.rmf.tests.ext.prostep/notice.html b/org.eclipse.rmf.tests.ext.prostep/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.rmf.tests.ext.prostep/plugin.properties b/org.eclipse.rmf.tests.ext.prostep/plugin.properties
new file mode 100644
index 0000000..036424a
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2014 itemis AG and others.
+# 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:
+#     Mark Broerkens (itemis AG) - initial API and implementation
+###############################################################################
+# Copyright (c) 2012 itemis GmbH.
+# 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:
+#     Mark Broerkens - initial API and implementation
+
+pluginName = RMF Core ReqIF Common Tests (Incubation)
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.rmf.tests.ext.prostep/pom.xml b/org.eclipse.rmf.tests.ext.prostep/pom.xml
new file mode 100644
index 0000000..9920175
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ <copyright>
+Copyright (c) 2012 itemis AG.
+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:
+    Mark Broerkens - initial API and implementation
+ </copyright>
+
+-->
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.rmf</groupId>
+		<artifactId>org.eclipse.rmf.releng</artifactId>
+		<version>0.11.0-SNAPSHOT</version>
+		<relativePath>../org.eclipse.rmf.releng/pom.xml</relativePath>
+	</parent>
+	<artifactId>org.eclipse.rmf.tests.ext.prostep</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<groupId>org.eclipse.rmf.plugins</groupId>
+	<properties>
+    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  	</properties>
+ 	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+				<version>${tycho.version}</version>
+				<executions>
+					<execution>
+						<id>plugin-source</id>
+						<goals>
+							<goal>plugin-source</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>
\ No newline at end of file
diff --git a/org.eclipse.rmf.tests.ext.prostep/src/org/eclipse/rmf/tests/ext/prostep/serializaion/SerializationTests.java b/org.eclipse.rmf.tests.ext.prostep/src/org/eclipse/rmf/tests/ext/prostep/serializaion/SerializationTests.java
new file mode 100644
index 0000000..76b5376
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/src/org/eclipse/rmf/tests/ext/prostep/serializaion/SerializationTests.java
@@ -0,0 +1,76 @@
+package org.eclipse.rmf.tests.ext.prostep.serializaion;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.xml.namespace.XMLNamespacePackage;
+import org.eclipse.rmf.ext.prostep.ExchangeConversation;
+import org.eclipse.rmf.ext.prostep.ProstepFactory;
+import org.eclipse.rmf.ext.prostep.ProstepPackage;
+import org.eclipse.rmf.reqif10.ReqIF;
+import org.eclipse.rmf.reqif10.ReqIF10Factory;
+import org.eclipse.rmf.reqif10.ReqIF10Package;
+import org.eclipse.rmf.reqif10.common.util.ReqIFToolExtensionUtil;
+import org.eclipse.rmf.reqif10.serialization.ReqIF10ResourceFactoryImpl;
+import org.eclipse.rmf.serialization.XMLPersistenceMappingResourceSetImpl;
+import org.eclipse.rmf.tests.reqif10.serialization.util.AbstractTestCase;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class SerializationTests extends AbstractTestCase {
+	
+	@BeforeClass
+	public static void setupOnce() throws Exception {
+		// globally register packages (global registry required since the generated EMF code
+		// doesn't handle local registries during handling of xsd any types)
+		// backup the registry
+		backupRegistry = new HashMap<String, Object>();
+		backupRegistry.putAll(EPackage.Registry.INSTANCE);
+		// System.out.println("BeforeClass: Initial package registry: " + EPackage.Registry.INSTANCE.keySet());
+		EPackage.Registry.INSTANCE.clear();
+		EPackage.Registry.INSTANCE.put(ReqIF10Package.eNS_URI, ReqIF10Package.eINSTANCE);
+		EPackage.Registry.INSTANCE.put(XMLNamespacePackage.eNS_URI, XMLNamespacePackage.eINSTANCE);
+		EPackage.Registry.INSTANCE.put(ProstepPackage.eNS_URI, ProstepPackage.eINSTANCE);
+
+		loadXMLPersistenceMappingResourceSet = new XMLPersistenceMappingResourceSetImpl();
+		loadXMLPersistenceMappingResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("reqif", new ReqIF10ResourceFactoryImpl());
+
+		saveXMLPersistenceMappingResourceSet = new XMLPersistenceMappingResourceSetImpl();
+		saveXMLPersistenceMappingResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("reqif", new ReqIF10ResourceFactoryImpl());
+	}
+	
+
+	@Test
+	public void test() throws IOException {
+		String fileName = getWorkingFileName("minimalExchangeConversation.reqif");
+		String identifier = "_6ced3339-9916-44f7-b9f0";
+		
+		
+		// create minimal model that contains tool extension
+		ReqIF reqIF = ReqIF10Factory.eINSTANCE.createReqIF();
+		ExchangeConversation exchangeConversation = ProstepFactory.eINSTANCE.createExchangeConversation();
+		exchangeConversation.setIdentifier(identifier);
+		ReqIFToolExtensionUtil.addToolExtension(reqIF,exchangeConversation);
+		
+		// save the model
+		saveReqIFFile(reqIF, fileName);
+		
+		// load file
+		ReqIF loadedReqIF = loadReqIFFile(fileName);
+		List<EObject> loadedExtensions = ReqIFToolExtensionUtil.getToolExtensionsByNsURI(loadedReqIF, ProstepPackage.eNS_URI);
+		
+		Assert.assertSame(1, loadedExtensions.size());
+		EObject loadedExtension = loadedExtensions.get(0);
+		Assert.assertTrue(loadedExtension instanceof ExchangeConversation);
+		ExchangeConversation loadedExchangeConversation = (ExchangeConversation)loadedExtension;
+		Assert.assertEquals(identifier, loadedExchangeConversation.getIdentifier());
+		
+		
+		
+	}
+
+}
diff --git a/org.eclipse.rmf.tests.ext.prostep/work/minimalExchangeConversation.reqif b/org.eclipse.rmf.tests.ext.prostep/work/minimalExchangeConversation.reqif
new file mode 100644
index 0000000..8a7a5f9
--- /dev/null
+++ b/org.eclipse.rmf.tests.ext.prostep/work/minimalExchangeConversation.reqif
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<REQ-IF xmlns="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd" xmlns:reqif-common="http://www.prostep.org/reqif">
+  <TOOL-EXTENSIONS>
+    <REQ-IF-TOOL-EXTENSION>
+      <reqif-common:EXCHANGE-CONVERSATION>
+        <reqif-common:IDENTIFIER>_6ced3339-9916-44f7-b9f0</reqif-common:IDENTIFIER>
+      </reqif-common:EXCHANGE-CONVERSATION>
+    </REQ-IF-TOOL-EXTENSION>
+  </TOOL-EXTENSIONS>
+</REQ-IF>
diff --git a/org.eclipse.rmf.tests.reqif10.feature/feature.xml b/org.eclipse.rmf.tests.reqif10.feature/feature.xml
index ba98b2f..0bc2973 100644
--- a/org.eclipse.rmf.tests.reqif10.feature/feature.xml
+++ b/org.eclipse.rmf.tests.reqif10.feature/feature.xml
@@ -56,4 +56,10 @@
          install-size="0"
          version="0.0.0"/>
 
+   <plugin
+         id="org.eclipse.rmf.ext.prostep"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
 </feature>
diff --git a/org.eclipse.rmf.tests.reqif10.serialization/src/org/eclipse/rmf/tests/reqif10/serialization/util/AbstractTestCase.java b/org.eclipse.rmf.tests.reqif10.serialization/src/org/eclipse/rmf/tests/reqif10/serialization/util/AbstractTestCase.java
index 5f16ee0..e11cf1d 100644
--- a/org.eclipse.rmf.tests.reqif10.serialization/src/org/eclipse/rmf/tests/reqif10/serialization/util/AbstractTestCase.java
+++ b/org.eclipse.rmf.tests.reqif10.serialization/src/org/eclipse/rmf/tests/reqif10/serialization/util/AbstractTestCase.java
@@ -70,10 +70,10 @@
 
 @SuppressWarnings("nls")
 public abstract class AbstractTestCase {
-	private static final String WORKING_DIRECTORY = "work";
-	static Map<String, Object> backupRegistry = null;
-	static XMLPersistenceMappingResourceSetImpl loadXMLPersistenceMappingResourceSet = null;
-	static XMLPersistenceMappingResourceSetImpl saveXMLPersistenceMappingResourceSet = null;
+	protected static final String WORKING_DIRECTORY = "work";
+	protected static Map<String, Object> backupRegistry = null;
+	protected static XMLPersistenceMappingResourceSetImpl loadXMLPersistenceMappingResourceSet = null;
+	protected static XMLPersistenceMappingResourceSetImpl saveXMLPersistenceMappingResourceSet = null;
 
 	static final DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
 	static final DateFormat timeFormat = new SimpleDateFormat("HHmm");
@@ -333,7 +333,7 @@
 	/**
 	 * Creates the file name of reference test data. The name pattern as defined by the ReqIF Implementor Forum.
 	 * #TestCaseID#_E0000_S10_Reference_#yyyyMMdd#_#HHmm# #NameOfHumanCreator#.<reqif/reqifz>
-	 * 
+	 *
 	 * @param testCaseId
 	 * @return
 	 */
@@ -344,7 +344,7 @@
 	/**
 	 * Creates the file name of reference test data. The name pattern as defined by the ReqIF Implementor Forum.
 	 * #TestCaseID#_E0001_S21_Reference_#yyyyMMdd#_#HHmm# #NameOfHumanCreator#.<reqif/reqifz>
-	 * 
+	 *
 	 * @param testCaseId
 	 * @return
 	 */
@@ -356,7 +356,7 @@
 	 * Creates the file name according to the ReqIF Implementor Forum naming conventions. The name pattern as defined by
 	 * the ReqIF Implementor Forum.
 	 * #TestCaseID#_E#NumberOfExports#_S#TestStep#_#Tool#_#yyyyMMdd#_#HHmm#_#NameOfHumanCreator#.#reqif/reqifz#
-	 * 
+	 *
 	 * @param testCaseId
 	 * @return
 	 */