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 ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). 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, "Program" 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 ("Redistributor") 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 ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" 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>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" 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>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" 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
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+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 "AS IS" 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.
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
"
+ 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 "CONTENT"). 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
+ ("EPL"). 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, "Program" 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 ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</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 ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</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 "features". Within a Feature, files named "feature.xml" 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 ("Included Features"). Within a Feature, files named "feature.xml" 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 "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). 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 "src" 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 ("Feature Update License") 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 "license" property of files named "feature.properties" 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 ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). 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>
+ ("Specification").</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 ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") 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 ("Installable Software Agreement") 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 ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" 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>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" 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>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" 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
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+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 "AS IS" 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 "CONTENT"). 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
+ ("EPL"). 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, "Program" 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 ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</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 ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</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 "features". Within a Feature, files named "feature.xml" 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 ("Included Features"). Within a Feature, files named "feature.xml" 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 "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). 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 "src" 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 ("Feature Update License") 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 "license" property of files named "feature.properties" 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 ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). 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>
+ ("Specification").</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 ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") 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 ("Installable Software Agreement") 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 ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). 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, "Program" 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 ("Redistributor") 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 ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" 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>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" 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>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" 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
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+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 "AS IS" 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 "CONTENT"). 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
+ ("EPL"). 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, "Program" 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 ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</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 ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</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 "features". Within a Feature, files named "feature.xml" 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 ("Included Features"). Within a Feature, files named "feature.xml" 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 "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). 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 "src" 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 ("Feature Update License") 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 "license" property of files named "feature.properties" 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 ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). 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>
+ ("Specification").</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 ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") 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 ("Installable Software Agreement") 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
*/