NEW - bug 285337: Test Models
https://bugs.eclipse.org/bugs/show_bug.cgi?id=285337

XText and EMF Model.
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/.classpath b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/.classpath
new file mode 100644
index 0000000..68494e9
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/.classpath
@@ -0,0 +1,8 @@
+<?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/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src-gen"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/.project b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/.project
new file mode 100644
index 0000000..f2629b7
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.amp.amf.testing</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.amp.amf/plugins/org.eclipse.amp.amf.testing/META-INF/MANIFEST.MF b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..967a5df
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/META-INF/MANIFEST.MF
@@ -0,0 +1,44 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: org.eclipse.amp.amf.testing

+Bundle-Vendor: My Company

+Bundle-Version: 1.0.0

+Bundle-SymbolicName: org.eclipse.amp.amf.testing; singleton:=true

+Eclipse-RegisterBuddy: org.eclipse.xtext.log4j

+Bundle-ActivationPolicy: lazy

+Require-Bundle: org.eclipse.xtext,

+ org.eclipse.xtext.generator;resolution:=optional,

+ de.itemis.xtext.antlr;resolution:=optional,

+ org.apache.commons.logging;resolution:=optional,

+ org.eclipse.emf.codegen.ecore;resolution:=optional,

+ org.eclipse.xtext.log4j;resolution:=optional,

+ org.eclipse.emf.mwe.utils;resolution:=optional,

+ org.eclipse.emf.mwe.core;resolution:=optional,

+ com.ibm.icu;resolution:=optional,

+ org.eclipse.xtext.xtend;resolution:=optional,

+ org.eclipse.xtext.util,

+ org.eclipse.emf.ecore,

+ org.eclipse.emf.common,

+ org.antlr.runtime,

+ org.eclipse.amp.amf.acore;bundle-version="0.2.0",

+ org.eclipse.ui;bundle-version="3.5.0",

+ org.eclipse.core.runtime;bundle-version="3.5.0",

+ org.eclipse.core.resources;bundle-version="3.5.0",

+ org.eclipse.amp.amf.parameters;bundle-version="1.0.0"

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Bundle-ClassPath: .

+Export-Package: org.eclipse.amp.amf.testing,

+ org.eclipse.amp.amf.testing.aTest,

+ org.eclipse.amp.amf.testing.aTest.impl,

+ org.eclipse.amp.amf.testing.aTest.util,

+ org.eclipse.amp.amf.testing.ares,

+ org.eclipse.amp.amf.testing.ares.impl,

+ org.eclipse.amp.amf.testing.ares.util,

+ org.eclipse.amp.amf.testing.ares.validation,

+ org.eclipse.amp.amf.testing.formatting,

+ org.eclipse.amp.amf.testing.parseTreeConstruction,

+ org.eclipse.amp.amf.testing.parser.antlr,

+ org.eclipse.amp.amf.testing.parser.antlr.internal,

+ org.eclipse.amp.amf.testing.scoping,

+ org.eclipse.amp.amf.testing.services,

+ org.eclipse.amp.amf.testing.validation

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/build.properties b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/build.properties
new file mode 100644
index 0000000..9c719c7
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/build.properties
@@ -0,0 +1,14 @@
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               .project,\
+               .classpath
+jars.compile.order = .
+output.. = bin/
+source.. = src/,\
+           src-gen/
+src.includes = src-gen/,\
+               src/
+source.. = src/,\
+           src-gen/
+
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.properties b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.properties
new file mode 100644
index 0000000..ff93fb8
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.properties
@@ -0,0 +1,8 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id: plugin.properties,v 1.1 2009/07/31 21:48:19 mparker Exp $

+

+pluginName = Ares Model

+providerName = www.example.org

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.xml b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.xml
new file mode 100644
index 0000000..8ad9ccc
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.eclipse.org/amp/amf/testing/ATest" 
+       class = "org.eclipse.amp.amf.testing.aTest.ATestPackage"
+       genModel = "org/eclipse/amp/amf/testing/ATest.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.xml_gen b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.xml_gen
new file mode 100644
index 0000000..8ad9ccc
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/plugin.xml_gen
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.eclipse.org/amp/amf/testing/ATest" 
+       class = "org.eclipse.amp.amf.testing.aTest.ATestPackage"
+       genModel = "org/eclipse/amp/amf/testing/ATest.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.ecore b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.ecore
new file mode 100644
index 0000000..1a51381
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.ecore
@@ -0,0 +1,40 @@
+<?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="aTest"
+    nsURI="http://www.eclipse.org/amp/amf/testing/ATest" nsPrefix="aTest">
+  <eClassifiers xsi:type="ecore:EClass" name="Model">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tests" eType="#//Tests"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="contraints" upperBound="-1"
+        eType="#//Constraint" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Tests">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="importURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Constraint">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="measure" eType="#//Measure"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="agent" eType="ecore:EClass ../../../../../../../org.eclipse.amp.amf.acore/src/model/metaabm.ecore#//SAgent"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="attribute" eType="ecore:EClass ../../../../../../../org.eclipse.amp.amf.acore/src/model/metaabm.ecore#//SAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="qualifier" eType="ecore:EClass ../../../../../../../org.eclipse.amp.amf.acore/src/model/metaabm.ecore#//SStateValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="minValue" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="maxValue" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Measure">
+    <eLiterals name="COUNT" literal="Count"/>
+    <eLiterals name="AVERAGE" value="1" literal="Average"/>
+    <eLiterals name="SUM" value="2" literal="Sum"/>
+    <eLiterals name="MINIMUM" value="3" literal="Minimum"/>
+    <eLiterals name="MAXIMUM" value="4" literal="Maximum"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IntValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RealValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.genmodel b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.genmodel
new file mode 100644
index 0000000..0141a3c
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.genmodel
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="ASCII"?>
+<genmodel:GenModel 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" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.amp.amf.testing/src-gen" editDirectory="/org.eclipse.amp.amf.testing.edit/src" editorDirectory="/org.eclipse.amp.amf.testing.editor/src" modelPluginID="org.eclipse.amp.amf.testing" forceOverwrite="true" modelName="ATest" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" complianceLevel="5.0" copyrightFields="false" editPluginID="org.eclipse.amp.amf.testing.edit" editorPluginID="org.eclipse.amp.amf.testing.editor">
+  <genPackages prefix="ATest" basePackage="org.eclipse.amp.amf.testing" disposableProviderFactory="true">
+    <ecorePackage href="ATest.ecore#/"/>
+    <genEnums typeSafeEnumCompatible="false">
+      <ecoreEnum href="ATest.ecore#//Measure"/>
+      <genEnumLiterals>
+        <ecoreEnumLiteral href="ATest.ecore#//Measure/COUNT"/>
+      </genEnumLiterals>
+      <genEnumLiterals>
+        <ecoreEnumLiteral href="ATest.ecore#//Measure/AVERAGE"/>
+      </genEnumLiterals>
+      <genEnumLiterals>
+        <ecoreEnumLiteral href="ATest.ecore#//Measure/SUM"/>
+      </genEnumLiterals>
+      <genEnumLiterals>
+        <ecoreEnumLiteral href="ATest.ecore#//Measure/MINIMUM"/>
+      </genEnumLiterals>
+      <genEnumLiterals>
+        <ecoreEnumLiteral href="ATest.ecore#//Measure/MAXIMUM"/>
+      </genEnumLiterals>
+    </genEnums>
+    <genClasses>
+      <ecoreClass href="ATest.ecore#//Model"/>
+      <genFeatures createChild="false">
+        <ecoreFeature xsi:type="ecore:EAttribute" href="ATest.ecore#//Model/name"/>
+      </genFeatures>
+      <genFeatures createChild="false">
+        <ecoreFeature xsi:type="ecore:EAttribute" href="ATest.ecore#//Model/description"/>
+      </genFeatures>
+      <genFeatures property="None" children="true" createChild="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Model/tests"/>
+      </genFeatures>
+      <genFeatures property="None" children="true" createChild="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Model/contraints"/>
+      </genFeatures>
+    </genClasses>
+    <genClasses>
+      <ecoreClass href="ATest.ecore#//Tests"/>
+      <genFeatures createChild="false">
+        <ecoreFeature xsi:type="ecore:EAttribute" href="ATest.ecore#//Tests/importURI"/>
+      </genFeatures>
+    </genClasses>
+    <genClasses>
+      <ecoreClass href="ATest.ecore#//Constraint"/>
+      <genFeatures createChild="false">
+        <ecoreFeature xsi:type="ecore:EAttribute" href="ATest.ecore#//Constraint/measure"/>
+      </genFeatures>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Constraint/agent"/>
+      </genFeatures>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Constraint/attribute"/>
+      </genFeatures>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Constraint/qualifier"/>
+      </genFeatures>
+      <genFeatures property="None" children="true" createChild="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Constraint/minValue"/>
+      </genFeatures>
+      <genFeatures property="None" children="true" createChild="true">
+        <ecoreFeature xsi:type="ecore:EReference" href="ATest.ecore#//Constraint/maxValue"/>
+      </genFeatures>
+    </genClasses>
+    <genClasses>
+      <ecoreClass href="ATest.ecore#//IntValue"/>
+      <genFeatures createChild="false">
+        <ecoreFeature xsi:type="ecore:EAttribute" href="ATest.ecore#//IntValue/value"/>
+      </genFeatures>
+    </genClasses>
+    <genClasses>
+      <ecoreClass href="ATest.ecore#//RealValue"/>
+      <genFeatures createChild="false">
+        <ecoreFeature xsi:type="ecore:EAttribute" href="ATest.ecore#//RealValue/value"/>
+      </genFeatures>
+    </genClasses>
+  </genPackages>
+  <usedGenPackages href="platform:/resource/org.eclipse.amp.amf.acore/src/model/metaabm.genmodel#//metaabm"/>
+</genmodel:GenModel>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.xmi b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.xmi
new file mode 100644
index 0000000..77e8c51
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATest.xmi
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI 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" xmlns:xtext="http://www.eclipse.org/2008/Xtext">
+  <xtext:Grammar name="org.eclipse.amp.amf.testing.ATest" usedGrammars="/1">
+    <metamodelDeclarations xsi:type="xtext:GeneratedMetamodel" name="aTest">
+      <ePackage href="http://www.eclipse.org/amp/amf/testing/ATest#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel">
+      <ePackage href="http://metaabm.org/structure#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:ParserRule" name="Model">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/amp/amf/testing/ATest#//Model"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="description" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="tests" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="*" feature="contraints" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Tests">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/amp/amf/testing/ATest#//Tests"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="TESTS"/>
+        <tokens xsi:type="xtext:Assignment" feature="importURI" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Constraint">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/amp/amf/testing/ATest#//Constraint"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="measure" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="("/>
+        <tokens xsi:type="xtext:Assignment" feature="agent" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.2">
+              <classifier xsi:type="ecore:EClass" href="http://metaabm.org/structure#//SAgent"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+          </terminal>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value=":"/>
+        <tokens xsi:type="xtext:Assignment" feature="attribute" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.2">
+              <classifier xsi:type="ecore:EClass" href="http://metaabm.org/structure#//SAttribute"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+          </terminal>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value=":"/>
+          <tokens xsi:type="xtext:Assignment" feature="qualifier" operator="=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.2">
+                <classifier xsi:type="ecore:EClass" href="http://metaabm.org/structure#//SStateValue"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+            </terminal>
+          </tokens>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value=")"/>
+        <tokens xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="="/>
+          <tokens xsi:type="xtext:Keyword" value="["/>
+          <tokens xsi:type="xtext:Assignment" feature="minValue" operator="=">
+            <terminal xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+              <groups xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+            </terminal>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value=","/>
+          <tokens xsi:type="xtext:Assignment" feature="maxValue" operator="=">
+            <terminal xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+              <groups xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+            </terminal>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value="]"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="Measure">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EEnum" href="http://www.eclipse.org/amp/amf/testing/ATest#//Measure"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.eclipse.org/amp/amf/testing/ATest#//Measure/COUNT"/>
+          <literal value="Count"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.eclipse.org/amp/amf/testing/ATest#//Measure/AVERAGE"/>
+          <literal value="Average"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.eclipse.org/amp/amf/testing/ATest#//Measure/SUM"/>
+          <literal value="Sum"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.eclipse.org/amp/amf/testing/ATest#//Measure/MINIMUM"/>
+          <literal value="Minimum"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.eclipse.org/amp/amf/testing/ATest#//Measure/MAXIMUM"/>
+          <literal value="Maximum"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="IntValue">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/amp/amf/testing/ATest#//IntValue"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="RealValue">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/amp/amf/testing/ATest#//RealValue"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="REAL">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="-"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value="."/>
+          <tokens xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="PLAIN_STRING">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="&#xab;"/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="*">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Keyword" value="\"/>
+            <tokens xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:Keyword" value="b"/>
+              <groups xsi:type="xtext:Keyword" value="t"/>
+              <groups xsi:type="xtext:Keyword" value="n"/>
+              <groups xsi:type="xtext:Keyword" value="f"/>
+              <groups xsi:type="xtext:Keyword" value="r"/>
+              <groups xsi:type="xtext:Keyword" value="&quot;"/>
+              <groups xsi:type="xtext:Keyword" value="'"/>
+              <groups xsi:type="xtext:Keyword" value="\"/>
+            </tokens>
+          </groups>
+          <groups xsi:type="xtext:NegatedToken">
+            <terminal xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:Keyword" value="\"/>
+              <groups xsi:type="xtext:Keyword" value="&#xab;"/>
+              <groups xsi:type="xtext:Keyword" value="&#xbb;"/>
+            </terminal>
+          </groups>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="&#xbb;"/>
+      </alternatives>
+    </rules>
+  </xtext:Grammar>
+  <xtext:Grammar name="org.eclipse.xtext.common.Terminals" definesHiddenTokens="true" hiddenTokens="/1/@rules.5 /1/@rules.3 /1/@rules.4">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:TerminalRule" name="ID">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="^"/>
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </groups>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </groups>
+          <groups xsi:type="xtext:Keyword" value="_"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives" cardinality="*">
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </groups>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </groups>
+          <groups xsi:type="xtext:Keyword" value="_"/>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="0"/>
+            <right value="9"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="INT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+      </type>
+      <alternatives xsi:type="xtext:CharacterRange" cardinality="+">
+        <left value="0"/>
+        <right value="9"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="STRING">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="&quot;"/>
+          <tokens xsi:type="xtext:Alternatives" cardinality="*">
+            <groups xsi:type="xtext:Group">
+              <tokens xsi:type="xtext:Keyword" value="\"/>
+              <tokens xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="b"/>
+                <groups xsi:type="xtext:Keyword" value="t"/>
+                <groups xsi:type="xtext:Keyword" value="n"/>
+                <groups xsi:type="xtext:Keyword" value="f"/>
+                <groups xsi:type="xtext:Keyword" value="r"/>
+                <groups xsi:type="xtext:Keyword" value="&quot;"/>
+                <groups xsi:type="xtext:Keyword" value="'"/>
+                <groups xsi:type="xtext:Keyword" value="\"/>
+              </tokens>
+            </groups>
+            <groups xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="\"/>
+                <groups xsi:type="xtext:Keyword" value="&quot;"/>
+              </terminal>
+            </groups>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value="&quot;"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="'"/>
+          <tokens xsi:type="xtext:Alternatives" cardinality="*">
+            <groups xsi:type="xtext:Group">
+              <tokens xsi:type="xtext:Keyword" value="\"/>
+              <tokens xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="b"/>
+                <groups xsi:type="xtext:Keyword" value="t"/>
+                <groups xsi:type="xtext:Keyword" value="n"/>
+                <groups xsi:type="xtext:Keyword" value="f"/>
+                <groups xsi:type="xtext:Keyword" value="r"/>
+                <groups xsi:type="xtext:Keyword" value="&quot;"/>
+                <groups xsi:type="xtext:Keyword" value="'"/>
+                <groups xsi:type="xtext:Keyword" value="\"/>
+              </tokens>
+            </groups>
+            <groups xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="\"/>
+                <groups xsi:type="xtext:Keyword" value="'"/>
+              </terminal>
+            </groups>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value="'"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ML_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="/*"/>
+        <tokens xsi:type="xtext:UntilToken">
+          <terminal xsi:type="xtext:Keyword" value="*/"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SL_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="//"/>
+        <tokens xsi:type="xtext:NegatedToken" cardinality="*">
+          <terminal xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:Keyword" value="&#xA;"/>
+            <groups xsi:type="xtext:Keyword" value="&#xD;"/>
+          </terminal>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
+          <tokens xsi:type="xtext:Keyword" value="&#xA;"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="WS">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives" cardinality="+">
+        <groups xsi:type="xtext:Keyword" value=" "/>
+        <groups xsi:type="xtext:Keyword" value="&#x9;"/>
+        <groups xsi:type="xtext:Keyword" value="&#xD;"/>
+        <groups xsi:type="xtext:Keyword" value="&#xA;"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ANY_OTHER">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Wildcard"/>
+    </rules>
+  </xtext:Grammar>
+</xmi:XMI>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATestStandaloneSetup.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATestStandaloneSetup.java
new file mode 100644
index 0000000..1b211fd
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/ATestStandaloneSetup.java
@@ -0,0 +1,43 @@
+package org.eclipse.amp.amf.testing;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.ISetup;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Generated from StandaloneSetup.xpt!
+ */
+public class ATestStandaloneSetup implements ISetup {
+
+	public static void doSetup() {
+		new ATestStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+
+	public Injector createInjectorAndDoEMFRegistration() {
+		org.eclipse.xtext.common.TerminalsStandaloneSetup.doSetup();
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new org.eclipse.amp.amf.testing.ATestRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+	if (!EPackage.Registry.INSTANCE.containsKey("http://www.eclipse.org/amp/amf/testing/ATest")) {
+		EPackage.Registry.INSTANCE.put("http://www.eclipse.org/amp/amf/testing/ATest", org.eclipse.amp.amf.testing.aTest.ATestPackage.eINSTANCE);
+	}
+
+		org.eclipse.xtext.resource.IResourceFactory resourceFactory = injector.getInstance(org.eclipse.xtext.resource.IResourceFactory.class);
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("atest", resourceFactory);
+		
+
+
+
+	}
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/AbstractATestRuntimeModule.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/AbstractATestRuntimeModule.java
new file mode 100644
index 0000000..58c45c1
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/AbstractATestRuntimeModule.java
@@ -0,0 +1,76 @@
+
+/*
+ * generated by Xtext
+ */
+package org.eclipse.amp.amf.testing;
+
+import org.eclipse.xtext.Constants;
+import org.eclipse.xtext.service.DefaultRuntimeModule;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+
+/**
+ * Manual modifications go to {org.eclipse.amp.amf.testing.ATestRuntimeModule}
+ */
+public abstract class AbstractATestRuntimeModule extends DefaultRuntimeModule {
+	
+	@Override
+	public void configure(Binder binder) {
+		super.configure(binder);
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance(
+			"org.eclipse.amp.amf.testing.ATest");
+	}
+	
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return org.eclipse.amp.amf.testing.services.ATestGrammarAccess.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parseTreeConstructor.ParseTreeConstructorFragment
+	public Class<? extends org.eclipse.xtext.parsetree.reconstr.IParseTreeConstructor> bindIParseTreeConstructor() {
+		return org.eclipse.amp.amf.testing.parseTreeConstruction.ATestParsetreeConstructor.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrParser> bindIAntlrParser() {
+		return org.eclipse.amp.amf.testing.parser.antlr.ATestParser.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.ITokenToStringConverter> bindITokenToStringConverter() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
+		return org.eclipse.amp.amf.testing.parser.antlr.ATestAntlrTokenFileProvider.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.Lexer> bindLexer() {
+		return org.eclipse.amp.amf.testing.parser.antlr.internal.InternalATestLexer.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.ITokenDefProvider> bindITokenDefProvider() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.JavaValidatorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.eclipse.amp.amf.testing.validation.ATestJavaValidator> bindATestJavaValidator() {
+		return org.eclipse.amp.amf.testing.validation.ATestJavaValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.JavaScopingFragment
+	public Class<? extends org.eclipse.xtext.scoping.IScopeProvider> bindIScopeProvider() {
+		return org.eclipse.amp.amf.testing.scoping.ATestScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.formatting.FormatterFragment
+	public Class<? extends org.eclipse.xtext.formatting.IFormatter> bindIFormatter() {
+		return org.eclipse.amp.amf.testing.formatting.ATestFormatter.class;
+	}
+
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/ATestFactory.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/ATestFactory.java
new file mode 100644
index 0000000..51e31b6
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/ATestFactory.java
@@ -0,0 +1,82 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+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.amp.amf.testing.aTest.ATestPackage
+ * @generated
+ */
+public interface ATestFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  ATestFactory eINSTANCE = org.eclipse.amp.amf.testing.aTest.impl.ATestFactoryImpl.init();
+
+  /**
+   * Returns a new object of class '<em>Model</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Model</em>'.
+   * @generated
+   */
+  Model createModel();
+
+  /**
+   * Returns a new object of class '<em>Tests</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Tests</em>'.
+   * @generated
+   */
+  Tests createTests();
+
+  /**
+   * Returns a new object of class '<em>Constraint</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Constraint</em>'.
+   * @generated
+   */
+  Constraint createConstraint();
+
+  /**
+   * Returns a new object of class '<em>Int Value</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Int Value</em>'.
+   * @generated
+   */
+  IntValue createIntValue();
+
+  /**
+   * Returns a new object of class '<em>Real Value</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Real Value</em>'.
+   * @generated
+   */
+  RealValue createRealValue();
+
+  /**
+   * Returns the package supported by this factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the package supported by this factory.
+   * @generated
+   */
+  ATestPackage getATestPackage();
+
+} //ATestFactory
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/ATestPackage.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/ATestPackage.java
new file mode 100644
index 0000000..e9c3bda
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/ATestPackage.java
@@ -0,0 +1,678 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+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 enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.amp.amf.testing.aTest.ATestFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ATestPackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "aTest";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://www.eclipse.org/amp/amf/testing/ATest";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "aTest";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  ATestPackage eINSTANCE = org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link org.eclipse.amp.amf.testing.aTest.impl.ModelImpl <em>Model</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ModelImpl
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getModel()
+   * @generated
+   */
+  int MODEL = 0;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>Description</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL__DESCRIPTION = 1;
+
+  /**
+   * The feature id for the '<em><b>Tests</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL__TESTS = 2;
+
+  /**
+   * The feature id for the '<em><b>Contraints</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL__CONTRAINTS = 3;
+
+  /**
+   * The number of structural features of the '<em>Model</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODEL_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.amp.amf.testing.aTest.impl.TestsImpl <em>Tests</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.amp.amf.testing.aTest.impl.TestsImpl
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getTests()
+   * @generated
+   */
+  int TESTS = 1;
+
+  /**
+   * The feature id for the '<em><b>Import URI</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TESTS__IMPORT_URI = 0;
+
+  /**
+   * The number of structural features of the '<em>Tests</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TESTS_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl <em>Constraint</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getConstraint()
+   * @generated
+   */
+  int CONSTRAINT = 2;
+
+  /**
+   * The feature id for the '<em><b>Measure</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT__MEASURE = 0;
+
+  /**
+   * The feature id for the '<em><b>Agent</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT__AGENT = 1;
+
+  /**
+   * The feature id for the '<em><b>Attribute</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT__ATTRIBUTE = 2;
+
+  /**
+   * The feature id for the '<em><b>Qualifier</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT__QUALIFIER = 3;
+
+  /**
+   * The feature id for the '<em><b>Min Value</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT__MIN_VALUE = 4;
+
+  /**
+   * The feature id for the '<em><b>Max Value</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT__MAX_VALUE = 5;
+
+  /**
+   * The number of structural features of the '<em>Constraint</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINT_FEATURE_COUNT = 6;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.amp.amf.testing.aTest.impl.IntValueImpl <em>Int Value</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.amp.amf.testing.aTest.impl.IntValueImpl
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getIntValue()
+   * @generated
+   */
+  int INT_VALUE = 3;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INT_VALUE__VALUE = 0;
+
+  /**
+   * The number of structural features of the '<em>Int Value</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INT_VALUE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.amp.amf.testing.aTest.impl.RealValueImpl <em>Real Value</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.amp.amf.testing.aTest.impl.RealValueImpl
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getRealValue()
+   * @generated
+   */
+  int REAL_VALUE = 4;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REAL_VALUE__VALUE = 0;
+
+  /**
+   * The number of structural features of the '<em>Real Value</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REAL_VALUE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.amp.amf.testing.aTest.Measure <em>Measure</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.amp.amf.testing.aTest.Measure
+   * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getMeasure()
+   * @generated
+   */
+  int MEASURE = 5;
+
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.aTest.Model <em>Model</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Model</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Model
+   * @generated
+   */
+  EClass getModel();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.aTest.Model#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Model#getName()
+   * @see #getModel()
+   * @generated
+   */
+  EAttribute getModel_Name();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.aTest.Model#getDescription <em>Description</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Description</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Model#getDescription()
+   * @see #getModel()
+   * @generated
+   */
+  EAttribute getModel_Description();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.amp.amf.testing.aTest.Model#getTests <em>Tests</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Tests</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Model#getTests()
+   * @see #getModel()
+   * @generated
+   */
+  EReference getModel_Tests();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.amp.amf.testing.aTest.Model#getContraints <em>Contraints</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Contraints</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Model#getContraints()
+   * @see #getModel()
+   * @generated
+   */
+  EReference getModel_Contraints();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.aTest.Tests <em>Tests</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Tests</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Tests
+   * @generated
+   */
+  EClass getTests();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.aTest.Tests#getImportURI <em>Import URI</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Import URI</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Tests#getImportURI()
+   * @see #getTests()
+   * @generated
+   */
+  EAttribute getTests_ImportURI();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.aTest.Constraint <em>Constraint</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Constraint</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint
+   * @generated
+   */
+  EClass getConstraint();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMeasure <em>Measure</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Measure</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint#getMeasure()
+   * @see #getConstraint()
+   * @generated
+   */
+  EAttribute getConstraint_Measure();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getAgent <em>Agent</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Agent</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint#getAgent()
+   * @see #getConstraint()
+   * @generated
+   */
+  EReference getConstraint_Agent();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getAttribute <em>Attribute</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Attribute</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint#getAttribute()
+   * @see #getConstraint()
+   * @generated
+   */
+  EReference getConstraint_Attribute();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getQualifier <em>Qualifier</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Qualifier</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint#getQualifier()
+   * @see #getConstraint()
+   * @generated
+   */
+  EReference getConstraint_Qualifier();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMinValue <em>Min Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Min Value</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint#getMinValue()
+   * @see #getConstraint()
+   * @generated
+   */
+  EReference getConstraint_MinValue();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMaxValue <em>Max Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Max Value</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Constraint#getMaxValue()
+   * @see #getConstraint()
+   * @generated
+   */
+  EReference getConstraint_MaxValue();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.aTest.IntValue <em>Int Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Int Value</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.IntValue
+   * @generated
+   */
+  EClass getIntValue();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.aTest.IntValue#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.IntValue#getValue()
+   * @see #getIntValue()
+   * @generated
+   */
+  EAttribute getIntValue_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.aTest.RealValue <em>Real Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Real Value</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.RealValue
+   * @generated
+   */
+  EClass getRealValue();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.aTest.RealValue#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.RealValue#getValue()
+   * @see #getRealValue()
+   * @generated
+   */
+  EAttribute getRealValue_Value();
+
+  /**
+   * Returns the meta object for enum '{@link org.eclipse.amp.amf.testing.aTest.Measure <em>Measure</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Measure</em>'.
+   * @see org.eclipse.amp.amf.testing.aTest.Measure
+   * @generated
+   */
+  EEnum getMeasure();
+
+  /**
+   * 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
+   */
+  ATestFactory getATestFactory();
+
+  /**
+   * <!-- 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 enum,</li>
+   *   <li>and each data type</li>
+   * </ul>
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  interface Literals
+  {
+    /**
+     * The meta object literal for the '{@link org.eclipse.amp.amf.testing.aTest.impl.ModelImpl <em>Model</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ModelImpl
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getModel()
+     * @generated
+     */
+    EClass MODEL = eINSTANCE.getModel();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute MODEL__NAME = eINSTANCE.getModel_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute MODEL__DESCRIPTION = eINSTANCE.getModel_Description();
+
+    /**
+     * The meta object literal for the '<em><b>Tests</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MODEL__TESTS = eINSTANCE.getModel_Tests();
+
+    /**
+     * The meta object literal for the '<em><b>Contraints</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MODEL__CONTRAINTS = eINSTANCE.getModel_Contraints();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.amp.amf.testing.aTest.impl.TestsImpl <em>Tests</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.amp.amf.testing.aTest.impl.TestsImpl
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getTests()
+     * @generated
+     */
+    EClass TESTS = eINSTANCE.getTests();
+
+    /**
+     * The meta object literal for the '<em><b>Import URI</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute TESTS__IMPORT_URI = eINSTANCE.getTests_ImportURI();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl <em>Constraint</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getConstraint()
+     * @generated
+     */
+    EClass CONSTRAINT = eINSTANCE.getConstraint();
+
+    /**
+     * The meta object literal for the '<em><b>Measure</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CONSTRAINT__MEASURE = eINSTANCE.getConstraint_Measure();
+
+    /**
+     * The meta object literal for the '<em><b>Agent</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINT__AGENT = eINSTANCE.getConstraint_Agent();
+
+    /**
+     * The meta object literal for the '<em><b>Attribute</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINT__ATTRIBUTE = eINSTANCE.getConstraint_Attribute();
+
+    /**
+     * The meta object literal for the '<em><b>Qualifier</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINT__QUALIFIER = eINSTANCE.getConstraint_Qualifier();
+
+    /**
+     * The meta object literal for the '<em><b>Min Value</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINT__MIN_VALUE = eINSTANCE.getConstraint_MinValue();
+
+    /**
+     * The meta object literal for the '<em><b>Max Value</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINT__MAX_VALUE = eINSTANCE.getConstraint_MaxValue();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.amp.amf.testing.aTest.impl.IntValueImpl <em>Int Value</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.amp.amf.testing.aTest.impl.IntValueImpl
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getIntValue()
+     * @generated
+     */
+    EClass INT_VALUE = eINSTANCE.getIntValue();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute INT_VALUE__VALUE = eINSTANCE.getIntValue_Value();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.amp.amf.testing.aTest.impl.RealValueImpl <em>Real Value</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.amp.amf.testing.aTest.impl.RealValueImpl
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getRealValue()
+     * @generated
+     */
+    EClass REAL_VALUE = eINSTANCE.getRealValue();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute REAL_VALUE__VALUE = eINSTANCE.getRealValue_Value();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.amp.amf.testing.aTest.Measure <em>Measure</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.amp.amf.testing.aTest.Measure
+     * @see org.eclipse.amp.amf.testing.aTest.impl.ATestPackageImpl#getMeasure()
+     * @generated
+     */
+    EEnum MEASURE = eINSTANCE.getMeasure();
+
+  }
+
+} //ATestPackage
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Constraint.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Constraint.java
new file mode 100644
index 0000000..61ec58e
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Constraint.java
@@ -0,0 +1,196 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.metaabm.SAgent;
+import org.metaabm.SAttribute;
+import org.metaabm.SStateValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Constraint</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMeasure <em>Measure</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Constraint#getAgent <em>Agent</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Constraint#getAttribute <em>Attribute</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Constraint#getQualifier <em>Qualifier</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMinValue <em>Min Value</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMaxValue <em>Max Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint()
+ * @model
+ * @generated
+ */
+public interface Constraint extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Measure</b></em>' attribute.
+   * The literals are from the enumeration {@link org.eclipse.amp.amf.testing.aTest.Measure}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Measure</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Measure</em>' attribute.
+   * @see org.eclipse.amp.amf.testing.aTest.Measure
+   * @see #setMeasure(Measure)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint_Measure()
+   * @model
+   * @generated
+   */
+  Measure getMeasure();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMeasure <em>Measure</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Measure</em>' attribute.
+   * @see org.eclipse.amp.amf.testing.aTest.Measure
+   * @see #getMeasure()
+   * @generated
+   */
+  void setMeasure(Measure value);
+
+  /**
+   * Returns the value of the '<em><b>Agent</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Agent</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Agent</em>' reference.
+   * @see #setAgent(SAgent)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint_Agent()
+   * @model
+   * @generated
+   */
+  SAgent getAgent();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getAgent <em>Agent</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Agent</em>' reference.
+   * @see #getAgent()
+   * @generated
+   */
+  void setAgent(SAgent value);
+
+  /**
+   * Returns the value of the '<em><b>Attribute</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Attribute</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Attribute</em>' reference.
+   * @see #setAttribute(SAttribute)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint_Attribute()
+   * @model
+   * @generated
+   */
+  SAttribute getAttribute();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getAttribute <em>Attribute</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Attribute</em>' reference.
+   * @see #getAttribute()
+   * @generated
+   */
+  void setAttribute(SAttribute value);
+
+  /**
+   * Returns the value of the '<em><b>Qualifier</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Qualifier</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Qualifier</em>' reference.
+   * @see #setQualifier(SStateValue)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint_Qualifier()
+   * @model
+   * @generated
+   */
+  SStateValue getQualifier();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getQualifier <em>Qualifier</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Qualifier</em>' reference.
+   * @see #getQualifier()
+   * @generated
+   */
+  void setQualifier(SStateValue value);
+
+  /**
+   * Returns the value of the '<em><b>Min Value</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Min Value</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Min Value</em>' containment reference.
+   * @see #setMinValue(EObject)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint_MinValue()
+   * @model containment="true"
+   * @generated
+   */
+  EObject getMinValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMinValue <em>Min Value</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Min Value</em>' containment reference.
+   * @see #getMinValue()
+   * @generated
+   */
+  void setMinValue(EObject value);
+
+  /**
+   * Returns the value of the '<em><b>Max Value</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Max Value</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Max Value</em>' containment reference.
+   * @see #setMaxValue(EObject)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getConstraint_MaxValue()
+   * @model containment="true"
+   * @generated
+   */
+  EObject getMaxValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Constraint#getMaxValue <em>Max Value</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Max Value</em>' containment reference.
+   * @see #getMaxValue()
+   * @generated
+   */
+  void setMaxValue(EObject value);
+
+} // Constraint
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/IntValue.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/IntValue.java
new file mode 100644
index 0000000..eb4d06f
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/IntValue.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Int Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.IntValue#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getIntValue()
+ * @model
+ * @generated
+ */
+public interface IntValue extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Value</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Value</em>' attribute.
+   * @see #setValue(int)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getIntValue_Value()
+   * @model
+   * @generated
+   */
+  int getValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.IntValue#getValue <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Value</em>' attribute.
+   * @see #getValue()
+   * @generated
+   */
+  void setValue(int value);
+
+} // IntValue
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Measure.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Measure.java
new file mode 100644
index 0000000..417babd
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Measure.java
@@ -0,0 +1,307 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+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>Measure</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getMeasure()
+ * @model
+ * @generated
+ */
+public enum Measure implements Enumerator
+{
+  /**
+   * The '<em><b>COUNT</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #COUNT_VALUE
+   * @generated
+   * @ordered
+   */
+  COUNT(0, "COUNT", "Count"),
+
+  /**
+   * The '<em><b>AVERAGE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #AVERAGE_VALUE
+   * @generated
+   * @ordered
+   */
+  AVERAGE(1, "AVERAGE", "Average"),
+
+  /**
+   * The '<em><b>SUM</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #SUM_VALUE
+   * @generated
+   * @ordered
+   */
+  SUM(2, "SUM", "Sum"),
+
+  /**
+   * The '<em><b>MINIMUM</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #MINIMUM_VALUE
+   * @generated
+   * @ordered
+   */
+  MINIMUM(3, "MINIMUM", "Minimum"),
+
+  /**
+   * The '<em><b>MAXIMUM</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #MAXIMUM_VALUE
+   * @generated
+   * @ordered
+   */
+  MAXIMUM(4, "MAXIMUM", "Maximum");
+
+  /**
+   * The '<em><b>COUNT</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>COUNT</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #COUNT
+   * @model literal="Count"
+   * @generated
+   * @ordered
+   */
+  public static final int COUNT_VALUE = 0;
+
+  /**
+   * The '<em><b>AVERAGE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>AVERAGE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #AVERAGE
+   * @model literal="Average"
+   * @generated
+   * @ordered
+   */
+  public static final int AVERAGE_VALUE = 1;
+
+  /**
+   * The '<em><b>SUM</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>SUM</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #SUM
+   * @model literal="Sum"
+   * @generated
+   * @ordered
+   */
+  public static final int SUM_VALUE = 2;
+
+  /**
+   * The '<em><b>MINIMUM</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>MINIMUM</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #MINIMUM
+   * @model literal="Minimum"
+   * @generated
+   * @ordered
+   */
+  public static final int MINIMUM_VALUE = 3;
+
+  /**
+   * The '<em><b>MAXIMUM</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>MAXIMUM</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #MAXIMUM
+   * @model literal="Maximum"
+   * @generated
+   * @ordered
+   */
+  public static final int MAXIMUM_VALUE = 4;
+
+  /**
+   * An array of all the '<em><b>Measure</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Measure[] VALUES_ARRAY =
+    new Measure[]
+    {
+      COUNT,
+      AVERAGE,
+      SUM,
+      MINIMUM,
+      MAXIMUM,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Measure</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Measure> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Measure</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static Measure get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Measure result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Measure</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static Measure getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Measure result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Measure</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static Measure get(int value)
+  {
+    switch (value)
+    {
+      case COUNT_VALUE: return COUNT;
+      case AVERAGE_VALUE: return AVERAGE;
+      case SUM_VALUE: return SUM;
+      case MINIMUM_VALUE: return MINIMUM;
+      case MAXIMUM_VALUE: return MAXIMUM;
+    }
+    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 Measure(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;
+  }
+  
+} //Measure
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Model.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Model.java
new file mode 100644
index 0000000..ecceda9
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Model.java
@@ -0,0 +1,127 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Model#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Model#getDescription <em>Description</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Model#getTests <em>Tests</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Model#getContraints <em>Contraints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getModel()
+ * @model
+ * @generated
+ */
+public interface Model extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>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>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getModel_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Model#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Description</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Description</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Description</em>' attribute.
+   * @see #setDescription(String)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getModel_Description()
+   * @model
+   * @generated
+   */
+  String getDescription();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Model#getDescription <em>Description</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Description</em>' attribute.
+   * @see #getDescription()
+   * @generated
+   */
+  void setDescription(String value);
+
+  /**
+   * Returns the value of the '<em><b>Tests</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Tests</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Tests</em>' containment reference.
+   * @see #setTests(Tests)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getModel_Tests()
+   * @model containment="true"
+   * @generated
+   */
+  Tests getTests();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Model#getTests <em>Tests</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Tests</em>' containment reference.
+   * @see #getTests()
+   * @generated
+   */
+  void setTests(Tests value);
+
+  /**
+   * Returns the value of the '<em><b>Contraints</b></em>' containment reference list.
+   * The list contents are of type {@link org.eclipse.amp.amf.testing.aTest.Constraint}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Contraints</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>Contraints</em>' containment reference list.
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getModel_Contraints()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Constraint> getContraints();
+
+} // Model
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/RealValue.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/RealValue.java
new file mode 100644
index 0000000..72334a5
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/RealValue.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Real Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.RealValue#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getRealValue()
+ * @model
+ * @generated
+ */
+public interface RealValue extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Value</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Value</em>' attribute.
+   * @see #setValue(String)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getRealValue_Value()
+   * @model
+   * @generated
+   */
+  String getValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.RealValue#getValue <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Value</em>' attribute.
+   * @see #getValue()
+   * @generated
+   */
+  void setValue(String value);
+
+} // RealValue
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Tests.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Tests.java
new file mode 100644
index 0000000..76cf4e8
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/Tests.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Tests</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.Tests#getImportURI <em>Import URI</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getTests()
+ * @model
+ * @generated
+ */
+public interface Tests extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Import URI</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Import URI</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Import URI</em>' attribute.
+   * @see #setImportURI(String)
+   * @see org.eclipse.amp.amf.testing.aTest.ATestPackage#getTests_ImportURI()
+   * @model
+   * @generated
+   */
+  String getImportURI();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.amp.amf.testing.aTest.Tests#getImportURI <em>Import URI</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Import URI</em>' attribute.
+   * @see #getImportURI()
+   * @generated
+   */
+  void setImportURI(String value);
+
+} // Tests
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ATestFactoryImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ATestFactoryImpl.java
new file mode 100644
index 0000000..5a3cbda
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ATestFactoryImpl.java
@@ -0,0 +1,214 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import org.eclipse.amp.amf.testing.aTest.*;
+
+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;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ATestFactoryImpl extends EFactoryImpl implements ATestFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ATestFactory init()
+  {
+    try
+    {
+      ATestFactory theATestFactory = (ATestFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/amp/amf/testing/ATest"); 
+      if (theATestFactory != null)
+      {
+        return theATestFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new ATestFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ATestFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+      case ATestPackage.MODEL: return createModel();
+      case ATestPackage.TESTS: return createTests();
+      case ATestPackage.CONSTRAINT: return createConstraint();
+      case ATestPackage.INT_VALUE: return createIntValue();
+      case ATestPackage.REAL_VALUE: return createRealValue();
+      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 ATestPackage.MEASURE:
+        return createMeasureFromString(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 ATestPackage.MEASURE:
+        return convertMeasureToString(eDataType, instanceValue);
+      default:
+        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Model createModel()
+  {
+    ModelImpl model = new ModelImpl();
+    return model;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Tests createTests()
+  {
+    TestsImpl tests = new TestsImpl();
+    return tests;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Constraint createConstraint()
+  {
+    ConstraintImpl constraint = new ConstraintImpl();
+    return constraint;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public IntValue createIntValue()
+  {
+    IntValueImpl intValue = new IntValueImpl();
+    return intValue;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public RealValue createRealValue()
+  {
+    RealValueImpl realValue = new RealValueImpl();
+    return realValue;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Measure createMeasureFromString(EDataType eDataType, String initialValue)
+  {
+    Measure result = Measure.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 convertMeasureToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ATestPackage getATestPackage()
+  {
+    return (ATestPackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static ATestPackage getPackage()
+  {
+    return ATestPackage.eINSTANCE;
+  }
+
+} //ATestFactoryImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ATestPackageImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ATestPackageImpl.java
new file mode 100644
index 0000000..9dfaa49
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ATestPackageImpl.java
@@ -0,0 +1,459 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import org.eclipse.amp.amf.testing.aTest.ATestFactory;
+import org.eclipse.amp.amf.testing.aTest.ATestPackage;
+import org.eclipse.amp.amf.testing.aTest.Constraint;
+import org.eclipse.amp.amf.testing.aTest.IntValue;
+import org.eclipse.amp.amf.testing.aTest.Measure;
+import org.eclipse.amp.amf.testing.aTest.Model;
+import org.eclipse.amp.amf.testing.aTest.RealValue;
+import org.eclipse.amp.amf.testing.aTest.Tests;
+
+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.metaabm.MetaABMPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ATestPackageImpl extends EPackageImpl implements ATestPackage
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass modelEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass testsEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass constraintEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass intValueEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass realValueEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum measureEEnum = 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.amp.amf.testing.aTest.ATestPackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private ATestPackageImpl()
+  {
+    super(eNS_URI, ATestFactory.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 ATestPackage#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 ATestPackage init()
+  {
+    if (isInited) return (ATestPackage)EPackage.Registry.INSTANCE.getEPackage(ATestPackage.eNS_URI);
+
+    // Obtain or create and register package
+    ATestPackageImpl theATestPackage = (ATestPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ATestPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ATestPackageImpl());
+
+    isInited = true;
+
+    // Initialize simple dependencies
+    MetaABMPackage.eINSTANCE.eClass();
+
+    // Create package meta-data objects
+    theATestPackage.createPackageContents();
+
+    // Initialize created meta-data
+    theATestPackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theATestPackage.freeze();
+
+  
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(ATestPackage.eNS_URI, theATestPackage);
+    return theATestPackage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getModel()
+  {
+    return modelEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getModel_Name()
+  {
+    return (EAttribute)modelEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getModel_Description()
+  {
+    return (EAttribute)modelEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getModel_Tests()
+  {
+    return (EReference)modelEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getModel_Contraints()
+  {
+    return (EReference)modelEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getTests()
+  {
+    return testsEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getTests_ImportURI()
+  {
+    return (EAttribute)testsEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getConstraint()
+  {
+    return constraintEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getConstraint_Measure()
+  {
+    return (EAttribute)constraintEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstraint_Agent()
+  {
+    return (EReference)constraintEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstraint_Attribute()
+  {
+    return (EReference)constraintEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstraint_Qualifier()
+  {
+    return (EReference)constraintEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstraint_MinValue()
+  {
+    return (EReference)constraintEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstraint_MaxValue()
+  {
+    return (EReference)constraintEClass.getEStructuralFeatures().get(5);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getIntValue()
+  {
+    return intValueEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getIntValue_Value()
+  {
+    return (EAttribute)intValueEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getRealValue()
+  {
+    return realValueEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRealValue_Value()
+  {
+    return (EAttribute)realValueEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getMeasure()
+  {
+    return measureEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ATestFactory getATestFactory()
+  {
+    return (ATestFactory)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
+    modelEClass = createEClass(MODEL);
+    createEAttribute(modelEClass, MODEL__NAME);
+    createEAttribute(modelEClass, MODEL__DESCRIPTION);
+    createEReference(modelEClass, MODEL__TESTS);
+    createEReference(modelEClass, MODEL__CONTRAINTS);
+
+    testsEClass = createEClass(TESTS);
+    createEAttribute(testsEClass, TESTS__IMPORT_URI);
+
+    constraintEClass = createEClass(CONSTRAINT);
+    createEAttribute(constraintEClass, CONSTRAINT__MEASURE);
+    createEReference(constraintEClass, CONSTRAINT__AGENT);
+    createEReference(constraintEClass, CONSTRAINT__ATTRIBUTE);
+    createEReference(constraintEClass, CONSTRAINT__QUALIFIER);
+    createEReference(constraintEClass, CONSTRAINT__MIN_VALUE);
+    createEReference(constraintEClass, CONSTRAINT__MAX_VALUE);
+
+    intValueEClass = createEClass(INT_VALUE);
+    createEAttribute(intValueEClass, INT_VALUE__VALUE);
+
+    realValueEClass = createEClass(REAL_VALUE);
+    createEAttribute(realValueEClass, REAL_VALUE__VALUE);
+
+    // Create enums
+    measureEEnum = createEEnum(MEASURE);
+  }
+
+  /**
+   * <!-- 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);
+
+    // Obtain other dependent packages
+    MetaABMPackage theMetaABMPackage = (MetaABMPackage)EPackage.Registry.INSTANCE.getEPackage(MetaABMPackage.eNS_URI);
+
+    // Create type parameters
+
+    // Set bounds for type parameters
+
+    // Add supertypes to classes
+
+    // Initialize classes and features; add operations and parameters
+    initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getModel_Name(), ecorePackage.getEString(), "name", null, 0, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getModel_Description(), ecorePackage.getEString(), "description", null, 0, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getModel_Tests(), this.getTests(), null, "tests", null, 0, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getModel_Contraints(), this.getConstraint(), null, "contraints", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(testsEClass, Tests.class, "Tests", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getTests_ImportURI(), ecorePackage.getEString(), "importURI", null, 0, 1, Tests.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(constraintEClass, Constraint.class, "Constraint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getConstraint_Measure(), this.getMeasure(), "measure", null, 0, 1, Constraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstraint_Agent(), theMetaABMPackage.getSAgent(), null, "agent", null, 0, 1, Constraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstraint_Attribute(), theMetaABMPackage.getSAttribute(), null, "attribute", null, 0, 1, Constraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstraint_Qualifier(), theMetaABMPackage.getSStateValue(), null, "qualifier", null, 0, 1, Constraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstraint_MinValue(), ecorePackage.getEObject(), null, "minValue", null, 0, 1, Constraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstraint_MaxValue(), ecorePackage.getEObject(), null, "maxValue", null, 0, 1, Constraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(intValueEClass, IntValue.class, "IntValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getIntValue_Value(), ecorePackage.getEInt(), "value", null, 0, 1, IntValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(realValueEClass, RealValue.class, "RealValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getRealValue_Value(), ecorePackage.getEString(), "value", null, 0, 1, RealValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    // Initialize enums and add enum literals
+    initEEnum(measureEEnum, Measure.class, "Measure");
+    addEEnumLiteral(measureEEnum, Measure.COUNT);
+    addEEnumLiteral(measureEEnum, Measure.AVERAGE);
+    addEEnumLiteral(measureEEnum, Measure.SUM);
+    addEEnumLiteral(measureEEnum, Measure.MINIMUM);
+    addEEnumLiteral(measureEEnum, Measure.MAXIMUM);
+
+    // Create resource
+    createResource(eNS_URI);
+  }
+
+} //ATestPackageImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ConstraintImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ConstraintImpl.java
new file mode 100644
index 0000000..6b916f1
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ConstraintImpl.java
@@ -0,0 +1,539 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import org.eclipse.amp.amf.testing.aTest.ATestPackage;
+import org.eclipse.amp.amf.testing.aTest.Constraint;
+import org.eclipse.amp.amf.testing.aTest.Measure;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.metaabm.SAgent;
+import org.metaabm.SAttribute;
+import org.metaabm.SStateValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Constraint</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl#getMeasure <em>Measure</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl#getAgent <em>Agent</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl#getAttribute <em>Attribute</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl#getQualifier <em>Qualifier</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl#getMinValue <em>Min Value</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ConstraintImpl#getMaxValue <em>Max Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ConstraintImpl extends MinimalEObjectImpl.Container implements Constraint
+{
+  /**
+   * The default value of the '{@link #getMeasure() <em>Measure</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMeasure()
+   * @generated
+   * @ordered
+   */
+  protected static final Measure MEASURE_EDEFAULT = Measure.COUNT;
+
+  /**
+   * The cached value of the '{@link #getMeasure() <em>Measure</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMeasure()
+   * @generated
+   * @ordered
+   */
+  protected Measure measure = MEASURE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getAgent() <em>Agent</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAgent()
+   * @generated
+   * @ordered
+   */
+  protected SAgent agent;
+
+  /**
+   * The cached value of the '{@link #getAttribute() <em>Attribute</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAttribute()
+   * @generated
+   * @ordered
+   */
+  protected SAttribute attribute;
+
+  /**
+   * The cached value of the '{@link #getQualifier() <em>Qualifier</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getQualifier()
+   * @generated
+   * @ordered
+   */
+  protected SStateValue qualifier;
+
+  /**
+   * The cached value of the '{@link #getMinValue() <em>Min Value</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMinValue()
+   * @generated
+   * @ordered
+   */
+  protected EObject minValue;
+
+  /**
+   * The cached value of the '{@link #getMaxValue() <em>Max Value</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMaxValue()
+   * @generated
+   * @ordered
+   */
+  protected EObject maxValue;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ConstraintImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ATestPackage.Literals.CONSTRAINT;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Measure getMeasure()
+  {
+    return measure;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMeasure(Measure newMeasure)
+  {
+    Measure oldMeasure = measure;
+    measure = newMeasure == null ? MEASURE_EDEFAULT : newMeasure;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__MEASURE, oldMeasure, measure));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SAgent getAgent()
+  {
+    if (agent != null && agent.eIsProxy())
+    {
+      InternalEObject oldAgent = (InternalEObject)agent;
+      agent = (SAgent)eResolveProxy(oldAgent);
+      if (agent != oldAgent)
+      {
+        if (eNotificationRequired())
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, ATestPackage.CONSTRAINT__AGENT, oldAgent, agent));
+      }
+    }
+    return agent;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SAgent basicGetAgent()
+  {
+    return agent;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAgent(SAgent newAgent)
+  {
+    SAgent oldAgent = agent;
+    agent = newAgent;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__AGENT, oldAgent, agent));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SAttribute getAttribute()
+  {
+    if (attribute != null && attribute.eIsProxy())
+    {
+      InternalEObject oldAttribute = (InternalEObject)attribute;
+      attribute = (SAttribute)eResolveProxy(oldAttribute);
+      if (attribute != oldAttribute)
+      {
+        if (eNotificationRequired())
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, ATestPackage.CONSTRAINT__ATTRIBUTE, oldAttribute, attribute));
+      }
+    }
+    return attribute;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SAttribute basicGetAttribute()
+  {
+    return attribute;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAttribute(SAttribute newAttribute)
+  {
+    SAttribute oldAttribute = attribute;
+    attribute = newAttribute;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__ATTRIBUTE, oldAttribute, attribute));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SStateValue getQualifier()
+  {
+    if (qualifier != null && qualifier.eIsProxy())
+    {
+      InternalEObject oldQualifier = (InternalEObject)qualifier;
+      qualifier = (SStateValue)eResolveProxy(oldQualifier);
+      if (qualifier != oldQualifier)
+      {
+        if (eNotificationRequired())
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, ATestPackage.CONSTRAINT__QUALIFIER, oldQualifier, qualifier));
+      }
+    }
+    return qualifier;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SStateValue basicGetQualifier()
+  {
+    return qualifier;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setQualifier(SStateValue newQualifier)
+  {
+    SStateValue oldQualifier = qualifier;
+    qualifier = newQualifier;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__QUALIFIER, oldQualifier, qualifier));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EObject getMinValue()
+  {
+    return minValue;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetMinValue(EObject newMinValue, NotificationChain msgs)
+  {
+    EObject oldMinValue = minValue;
+    minValue = newMinValue;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__MIN_VALUE, oldMinValue, newMinValue);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMinValue(EObject newMinValue)
+  {
+    if (newMinValue != minValue)
+    {
+      NotificationChain msgs = null;
+      if (minValue != null)
+        msgs = ((InternalEObject)minValue).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ATestPackage.CONSTRAINT__MIN_VALUE, null, msgs);
+      if (newMinValue != null)
+        msgs = ((InternalEObject)newMinValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ATestPackage.CONSTRAINT__MIN_VALUE, null, msgs);
+      msgs = basicSetMinValue(newMinValue, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__MIN_VALUE, newMinValue, newMinValue));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EObject getMaxValue()
+  {
+    return maxValue;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetMaxValue(EObject newMaxValue, NotificationChain msgs)
+  {
+    EObject oldMaxValue = maxValue;
+    maxValue = newMaxValue;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__MAX_VALUE, oldMaxValue, newMaxValue);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMaxValue(EObject newMaxValue)
+  {
+    if (newMaxValue != maxValue)
+    {
+      NotificationChain msgs = null;
+      if (maxValue != null)
+        msgs = ((InternalEObject)maxValue).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ATestPackage.CONSTRAINT__MAX_VALUE, null, msgs);
+      if (newMaxValue != null)
+        msgs = ((InternalEObject)newMaxValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ATestPackage.CONSTRAINT__MAX_VALUE, null, msgs);
+      msgs = basicSetMaxValue(newMaxValue, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.CONSTRAINT__MAX_VALUE, newMaxValue, newMaxValue));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.CONSTRAINT__MIN_VALUE:
+        return basicSetMinValue(null, msgs);
+      case ATestPackage.CONSTRAINT__MAX_VALUE:
+        return basicSetMaxValue(null, 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 ATestPackage.CONSTRAINT__MEASURE:
+        return getMeasure();
+      case ATestPackage.CONSTRAINT__AGENT:
+        if (resolve) return getAgent();
+        return basicGetAgent();
+      case ATestPackage.CONSTRAINT__ATTRIBUTE:
+        if (resolve) return getAttribute();
+        return basicGetAttribute();
+      case ATestPackage.CONSTRAINT__QUALIFIER:
+        if (resolve) return getQualifier();
+        return basicGetQualifier();
+      case ATestPackage.CONSTRAINT__MIN_VALUE:
+        return getMinValue();
+      case ATestPackage.CONSTRAINT__MAX_VALUE:
+        return getMaxValue();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.CONSTRAINT__MEASURE:
+        setMeasure((Measure)newValue);
+        return;
+      case ATestPackage.CONSTRAINT__AGENT:
+        setAgent((SAgent)newValue);
+        return;
+      case ATestPackage.CONSTRAINT__ATTRIBUTE:
+        setAttribute((SAttribute)newValue);
+        return;
+      case ATestPackage.CONSTRAINT__QUALIFIER:
+        setQualifier((SStateValue)newValue);
+        return;
+      case ATestPackage.CONSTRAINT__MIN_VALUE:
+        setMinValue((EObject)newValue);
+        return;
+      case ATestPackage.CONSTRAINT__MAX_VALUE:
+        setMaxValue((EObject)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.CONSTRAINT__MEASURE:
+        setMeasure(MEASURE_EDEFAULT);
+        return;
+      case ATestPackage.CONSTRAINT__AGENT:
+        setAgent((SAgent)null);
+        return;
+      case ATestPackage.CONSTRAINT__ATTRIBUTE:
+        setAttribute((SAttribute)null);
+        return;
+      case ATestPackage.CONSTRAINT__QUALIFIER:
+        setQualifier((SStateValue)null);
+        return;
+      case ATestPackage.CONSTRAINT__MIN_VALUE:
+        setMinValue((EObject)null);
+        return;
+      case ATestPackage.CONSTRAINT__MAX_VALUE:
+        setMaxValue((EObject)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.CONSTRAINT__MEASURE:
+        return measure != MEASURE_EDEFAULT;
+      case ATestPackage.CONSTRAINT__AGENT:
+        return agent != null;
+      case ATestPackage.CONSTRAINT__ATTRIBUTE:
+        return attribute != null;
+      case ATestPackage.CONSTRAINT__QUALIFIER:
+        return qualifier != null;
+      case ATestPackage.CONSTRAINT__MIN_VALUE:
+        return minValue != null;
+      case ATestPackage.CONSTRAINT__MAX_VALUE:
+        return maxValue != null;
+    }
+    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(" (measure: ");
+    result.append(measure);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ConstraintImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/IntValueImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/IntValueImpl.java
new file mode 100644
index 0000000..865fcbd
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/IntValueImpl.java
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import org.eclipse.amp.amf.testing.aTest.ATestPackage;
+import org.eclipse.amp.amf.testing.aTest.IntValue;
+
+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;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Int Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.IntValueImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IntValueImpl extends MinimalEObjectImpl.Container implements IntValue
+{
+  /**
+   * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected static final int VALUE_EDEFAULT = 0;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected int value = VALUE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected IntValueImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ATestPackage.Literals.INT_VALUE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(int newValue)
+  {
+    int oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.INT_VALUE__VALUE, oldValue, value));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.INT_VALUE__VALUE:
+        return getValue();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.INT_VALUE__VALUE:
+        setValue((Integer)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.INT_VALUE__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.INT_VALUE__VALUE:
+        return value != VALUE_EDEFAULT;
+    }
+    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(" (value: ");
+    result.append(value);
+    result.append(')');
+    return result.toString();
+  }
+
+} //IntValueImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ModelImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ModelImpl.java
new file mode 100644
index 0000000..c2d6e25
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/ModelImpl.java
@@ -0,0 +1,371 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import java.util.Collection;
+
+import org.eclipse.amp.amf.testing.aTest.ATestPackage;
+import org.eclipse.amp.amf.testing.aTest.Constraint;
+import org.eclipse.amp.amf.testing.aTest.Model;
+import org.eclipse.amp.amf.testing.aTest.Tests;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ModelImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ModelImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ModelImpl#getTests <em>Tests</em>}</li>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.ModelImpl#getContraints <em>Contraints</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ModelImpl extends MinimalEObjectImpl.Container implements Model
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDescription()
+   * @generated
+   * @ordered
+   */
+  protected static final String DESCRIPTION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDescription()
+   * @generated
+   * @ordered
+   */
+  protected String description = DESCRIPTION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getTests() <em>Tests</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTests()
+   * @generated
+   * @ordered
+   */
+  protected Tests tests;
+
+  /**
+   * The cached value of the '{@link #getContraints() <em>Contraints</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getContraints()
+   * @generated
+   * @ordered
+   */
+  protected EList<Constraint> contraints;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ModelImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ATestPackage.Literals.MODEL;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.MODEL__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDescription()
+  {
+    return description;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDescription(String newDescription)
+  {
+    String oldDescription = description;
+    description = newDescription;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.MODEL__DESCRIPTION, oldDescription, description));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Tests getTests()
+  {
+    return tests;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTests(Tests newTests, NotificationChain msgs)
+  {
+    Tests oldTests = tests;
+    tests = newTests;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ATestPackage.MODEL__TESTS, oldTests, newTests);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTests(Tests newTests)
+  {
+    if (newTests != tests)
+    {
+      NotificationChain msgs = null;
+      if (tests != null)
+        msgs = ((InternalEObject)tests).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ATestPackage.MODEL__TESTS, null, msgs);
+      if (newTests != null)
+        msgs = ((InternalEObject)newTests).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ATestPackage.MODEL__TESTS, null, msgs);
+      msgs = basicSetTests(newTests, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.MODEL__TESTS, newTests, newTests));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Constraint> getContraints()
+  {
+    if (contraints == null)
+    {
+      contraints = new EObjectContainmentEList<Constraint>(Constraint.class, this, ATestPackage.MODEL__CONTRAINTS);
+    }
+    return contraints;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.MODEL__TESTS:
+        return basicSetTests(null, msgs);
+      case ATestPackage.MODEL__CONTRAINTS:
+        return ((InternalEList<?>)getContraints()).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 ATestPackage.MODEL__NAME:
+        return getName();
+      case ATestPackage.MODEL__DESCRIPTION:
+        return getDescription();
+      case ATestPackage.MODEL__TESTS:
+        return getTests();
+      case ATestPackage.MODEL__CONTRAINTS:
+        return getContraints();
+    }
+    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 ATestPackage.MODEL__NAME:
+        setName((String)newValue);
+        return;
+      case ATestPackage.MODEL__DESCRIPTION:
+        setDescription((String)newValue);
+        return;
+      case ATestPackage.MODEL__TESTS:
+        setTests((Tests)newValue);
+        return;
+      case ATestPackage.MODEL__CONTRAINTS:
+        getContraints().clear();
+        getContraints().addAll((Collection<? extends Constraint>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.MODEL__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case ATestPackage.MODEL__DESCRIPTION:
+        setDescription(DESCRIPTION_EDEFAULT);
+        return;
+      case ATestPackage.MODEL__TESTS:
+        setTests((Tests)null);
+        return;
+      case ATestPackage.MODEL__CONTRAINTS:
+        getContraints().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.MODEL__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case ATestPackage.MODEL__DESCRIPTION:
+        return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+      case ATestPackage.MODEL__TESTS:
+        return tests != null;
+      case ATestPackage.MODEL__CONTRAINTS:
+        return contraints != null && !contraints.isEmpty();
+    }
+    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(" (name: ");
+    result.append(name);
+    result.append(", description: ");
+    result.append(description);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ModelImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/RealValueImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/RealValueImpl.java
new file mode 100644
index 0000000..108ea04
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/RealValueImpl.java
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import org.eclipse.amp.amf.testing.aTest.ATestPackage;
+import org.eclipse.amp.amf.testing.aTest.RealValue;
+
+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;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Real Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.RealValueImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RealValueImpl extends MinimalEObjectImpl.Container implements RealValue
+{
+  /**
+   * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected static final String VALUE_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected String value = VALUE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected RealValueImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ATestPackage.Literals.REAL_VALUE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(String newValue)
+  {
+    String oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.REAL_VALUE__VALUE, oldValue, value));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.REAL_VALUE__VALUE:
+        return getValue();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.REAL_VALUE__VALUE:
+        setValue((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.REAL_VALUE__VALUE:
+        setValue(VALUE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.REAL_VALUE__VALUE:
+        return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+    }
+    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(" (value: ");
+    result.append(value);
+    result.append(')');
+    return result.toString();
+  }
+
+} //RealValueImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/TestsImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/TestsImpl.java
new file mode 100644
index 0000000..2e1c493
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/impl/TestsImpl.java
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.impl;
+
+import org.eclipse.amp.amf.testing.aTest.ATestPackage;
+import org.eclipse.amp.amf.testing.aTest.Tests;
+
+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;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Tests</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.amp.amf.testing.aTest.impl.TestsImpl#getImportURI <em>Import URI</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestsImpl extends MinimalEObjectImpl.Container implements Tests
+{
+  /**
+   * The default value of the '{@link #getImportURI() <em>Import URI</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getImportURI()
+   * @generated
+   * @ordered
+   */
+  protected static final String IMPORT_URI_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getImportURI() <em>Import URI</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getImportURI()
+   * @generated
+   * @ordered
+   */
+  protected String importURI = IMPORT_URI_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected TestsImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ATestPackage.Literals.TESTS;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getImportURI()
+  {
+    return importURI;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setImportURI(String newImportURI)
+  {
+    String oldImportURI = importURI;
+    importURI = newImportURI;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ATestPackage.TESTS__IMPORT_URI, oldImportURI, importURI));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.TESTS__IMPORT_URI:
+        return getImportURI();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.TESTS__IMPORT_URI:
+        setImportURI((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.TESTS__IMPORT_URI:
+        setImportURI(IMPORT_URI_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ATestPackage.TESTS__IMPORT_URI:
+        return IMPORT_URI_EDEFAULT == null ? importURI != null : !IMPORT_URI_EDEFAULT.equals(importURI);
+    }
+    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(" (importURI: ");
+    result.append(importURI);
+    result.append(')');
+    return result.toString();
+  }
+
+} //TestsImpl
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/util/ATestAdapterFactory.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/util/ATestAdapterFactory.java
new file mode 100644
index 0000000..55ce88b
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/util/ATestAdapterFactory.java
@@ -0,0 +1,215 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.util;
+
+import org.eclipse.amp.amf.testing.aTest.*;
+
+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;
+
+/**
+ * <!-- 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.amp.amf.testing.aTest.ATestPackage
+ * @generated
+ */
+public class ATestAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static ATestPackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ATestAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = ATestPackage.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 ATestSwitch<Adapter> modelSwitch =
+    new ATestSwitch<Adapter>()
+    {
+      @Override
+      public Adapter caseModel(Model object)
+      {
+        return createModelAdapter();
+      }
+      @Override
+      public Adapter caseTests(Tests object)
+      {
+        return createTestsAdapter();
+      }
+      @Override
+      public Adapter caseConstraint(Constraint object)
+      {
+        return createConstraintAdapter();
+      }
+      @Override
+      public Adapter caseIntValue(IntValue object)
+      {
+        return createIntValueAdapter();
+      }
+      @Override
+      public Adapter caseRealValue(RealValue object)
+      {
+        return createRealValueAdapter();
+      }
+      @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.amp.amf.testing.aTest.Model <em>Model</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.amp.amf.testing.aTest.Model
+   * @generated
+   */
+  public Adapter createModelAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.amp.amf.testing.aTest.Tests <em>Tests</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.amp.amf.testing.aTest.Tests
+   * @generated
+   */
+  public Adapter createTestsAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.amp.amf.testing.aTest.Constraint <em>Constraint</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.amp.amf.testing.aTest.Constraint
+   * @generated
+   */
+  public Adapter createConstraintAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.amp.amf.testing.aTest.IntValue <em>Int Value</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.amp.amf.testing.aTest.IntValue
+   * @generated
+   */
+  public Adapter createIntValueAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.amp.amf.testing.aTest.RealValue <em>Real Value</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.amp.amf.testing.aTest.RealValue
+   * @generated
+   */
+  public Adapter createRealValueAdapter()
+  {
+    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;
+  }
+
+} //ATestAdapterFactory
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/util/ATestSwitch.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/util/ATestSwitch.java
new file mode 100644
index 0000000..b0d30d3
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/aTest/util/ATestSwitch.java
@@ -0,0 +1,233 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.amf.testing.aTest.util;
+
+import java.util.List;
+
+import org.eclipse.amp.amf.testing.aTest.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- 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.amp.amf.testing.aTest.ATestPackage
+ * @generated
+ */
+public class ATestSwitch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static ATestPackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ATestSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = ATestPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * 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
+   */
+  public T doSwitch(EObject theEObject)
+  {
+    return doSwitch(theEObject.eClass(), theEObject);
+  }
+
+  /**
+   * 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
+   */
+  protected T doSwitch(EClass theEClass, EObject theEObject)
+  {
+    if (theEClass.eContainer() == modelPackage)
+    {
+      return doSwitch(theEClass.getClassifierID(), theEObject);
+    }
+    else
+    {
+      List<EClass> eSuperTypes = theEClass.getESuperTypes();
+      return
+        eSuperTypes.isEmpty() ?
+          defaultCase(theEObject) :
+          doSwitch(eSuperTypes.get(0), theEObject);
+    }
+  }
+
+  /**
+   * 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
+   */
+  protected T doSwitch(int classifierID, EObject theEObject)
+  {
+    switch (classifierID)
+    {
+      case ATestPackage.MODEL:
+      {
+        Model model = (Model)theEObject;
+        T result = caseModel(model);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ATestPackage.TESTS:
+      {
+        Tests tests = (Tests)theEObject;
+        T result = caseTests(tests);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ATestPackage.CONSTRAINT:
+      {
+        Constraint constraint = (Constraint)theEObject;
+        T result = caseConstraint(constraint);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ATestPackage.INT_VALUE:
+      {
+        IntValue intValue = (IntValue)theEObject;
+        T result = caseIntValue(intValue);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ATestPackage.REAL_VALUE:
+      {
+        RealValue realValue = (RealValue)theEObject;
+        T result = caseRealValue(realValue);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      default: return defaultCase(theEObject);
+    }
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Model</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>Model</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseModel(Model object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Tests</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>Tests</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseTests(Tests object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Constraint</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>Constraint</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseConstraint(Constraint object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Int Value</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>Int Value</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseIntValue(IntValue object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Real Value</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>Real Value</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseRealValue(RealValue 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
+   */
+  public T defaultCase(EObject object)
+  {
+    return null;
+  }
+
+} //ATestSwitch
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parseTreeConstruction/ATestParsetreeConstructor.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parseTreeConstruction/ATestParsetreeConstructor.java
new file mode 100644
index 0000000..34e6303
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parseTreeConstruction/ATestParsetreeConstructor.java
@@ -0,0 +1,883 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.amp.amf.testing.parseTreeConstruction;
+
+import org.eclipse.emf.ecore.*;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parsetree.reconstr.IInstanceDescription;
+import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;
+
+import org.eclipse.amp.amf.testing.services.ATestGrammarAccess;
+
+import com.google.inject.Inject;
+
+public class ATestParsetreeConstructor extends AbstractParseTreeConstructor {
+		
+	@Inject
+	private ATestGrammarAccess grammarAccess;
+		
+	public ATestGrammarAccess getGrammarAccess() {
+		return grammarAccess;
+	}
+
+	protected AbstractToken getRootToken(IInstanceDescription inst) {
+		return new ThisRootNode(inst);	
+	}
+	
+protected class ThisRootNode extends RootToken {
+	public ThisRootNode(IInstanceDescription inst) {
+		super(inst);
+	}
+	
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Model_Group(this, this, 0, inst);
+			case 1: return new Tests_Group(this, this, 1, inst);
+			case 2: return new Constraint_Group(this, this, 2, inst);
+			case 3: return new IntValue_ValueAssignment(this, this, 3, inst);
+			case 4: return new RealValue_ValueAssignment(this, this, 4, inst);
+			default: return null;
+		}	
+	}	
+}
+	
+
+/************ begin Rule Model ****************
+ *
+ * Model:
+ *   name=STRING? description=PLAIN_STRING? tests=Tests? contraints+=Constraint*;
+ *
+ **/
+
+// name=STRING? description=PLAIN_STRING? tests=Tests? contraints+=Constraint*
+protected class Model_Group extends GroupToken {
+	
+	public Model_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getModelAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Model_ContraintsAssignment_3(parent, this, 0, inst);
+			case 1: return new Model_TestsAssignment_2(parent, this, 1, inst);
+			case 2: return new Model_DescriptionAssignment_1(parent, this, 2, inst);
+			case 3: return new Model_NameAssignment_0(parent, this, 3, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getModelRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// name=STRING?
+protected class Model_NameAssignment_0 extends AssignmentToken  {
+	
+	public Model_NameAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getModelAccess().getNameAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getModelAccess().getNameSTRINGTerminalRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// description=PLAIN_STRING?
+protected class Model_DescriptionAssignment_1 extends AssignmentToken  {
+	
+	public Model_DescriptionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getModelAccess().getDescriptionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Model_NameAssignment_0(parent, this, 0, inst);
+			default: return parent.createParentFollower(this, index, index - 1, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("description",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("description");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getModelAccess().getDescriptionPLAIN_STRINGTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// tests=Tests?
+protected class Model_TestsAssignment_2 extends AssignmentToken  {
+	
+	public Model_TestsAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getModelAccess().getTestsAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Tests_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("tests",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("tests");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getTestsRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getModelAccess().getTestsTestsParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Model_DescriptionAssignment_1(parent, next, actIndex, consumed);
+			case 1: return new Model_NameAssignment_0(parent, next, actIndex, consumed);
+			default: return parent.createParentFollower(next, actIndex , index - 2, consumed);
+		}	
+	}	
+}
+
+// contraints+=Constraint*
+protected class Model_ContraintsAssignment_3 extends AssignmentToken  {
+	
+	public Model_ContraintsAssignment_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getModelAccess().getContraintsAssignment_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("contraints",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("contraints");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getModelAccess().getContraintsConstraintParserRuleCall_3_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Model_ContraintsAssignment_3(parent, next, actIndex, consumed);
+			case 1: return new Model_TestsAssignment_2(parent, next, actIndex, consumed);
+			case 2: return new Model_DescriptionAssignment_1(parent, next, actIndex, consumed);
+			case 3: return new Model_NameAssignment_0(parent, next, actIndex, consumed);
+			default: return parent.createParentFollower(next, actIndex , index - 4, consumed);
+		}	
+	}	
+}
+
+
+/************ end Rule Model ****************/
+
+
+/************ begin Rule Tests ****************
+ *
+ * Tests:
+ *   "TESTS" importURI=STRING;
+ *
+ **/
+
+// "TESTS" importURI=STRING
+protected class Tests_Group extends GroupToken {
+	
+	public Tests_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getTestsAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Tests_ImportURIAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getTestsRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "TESTS"
+protected class Tests_TESTSKeyword_0 extends KeywordToken  {
+	
+	public Tests_TESTSKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getTestsAccess().getTESTSKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// importURI=STRING
+protected class Tests_ImportURIAssignment_1 extends AssignmentToken  {
+	
+	public Tests_ImportURIAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getTestsAccess().getImportURIAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Tests_TESTSKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("importURI",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("importURI");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getTestsAccess().getImportURISTRINGTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+/************ end Rule Tests ****************/
+
+
+/************ begin Rule Constraint ****************
+ *
+ * Constraint:
+ *   measure=Measure "(" agent=[SAgent|STRING] ":" attribute=[SAttribute|STRING] (":"
+ *   qualifier=[SStateValue|STRING])? ")" ("=" "[" minValue=( IntValue | RealValue ) ","
+ *   maxValue=( IntValue | RealValue ) "]");
+ *
+ **/
+
+// measure=Measure "(" agent=[SAgent|STRING] ":" attribute=[SAttribute|STRING] (":"
+// qualifier=[SStateValue|STRING])? ")" ("=" "[" minValue=( IntValue | RealValue ) ","
+// maxValue=( IntValue | RealValue ) "]")
+protected class Constraint_Group extends GroupToken {
+	
+	public Constraint_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_Group_7(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// measure=Measure
+protected class Constraint_MeasureAssignment_0 extends AssignmentToken  {
+	
+	public Constraint_MeasureAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getMeasureAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("measure",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("measure");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.ERC;
+			element = grammarAccess.getConstraintAccess().getMeasureMeasureEnumRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "("
+protected class Constraint_LeftParenthesisKeyword_1 extends KeywordToken  {
+	
+	public Constraint_LeftParenthesisKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getLeftParenthesisKeyword_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_MeasureAssignment_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// agent=[SAgent|STRING]
+protected class Constraint_AgentAssignment_2 extends AssignmentToken  {
+	
+	public Constraint_AgentAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getAgentAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_LeftParenthesisKeyword_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("agent",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("agent");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getConstraintAccess().getAgentSAgentCrossReference_2_0().getType().getClassifier())) {
+				type = AssignmentType.CR;
+				element = grammarAccess.getConstraintAccess().getAgentSAgentCrossReference_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ":"
+protected class Constraint_ColonKeyword_3 extends KeywordToken  {
+	
+	public Constraint_ColonKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getColonKeyword_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_AgentAssignment_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// attribute=[SAttribute|STRING]
+protected class Constraint_AttributeAssignment_4 extends AssignmentToken  {
+	
+	public Constraint_AttributeAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getAttributeAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_ColonKeyword_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("attribute",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("attribute");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getConstraintAccess().getAttributeSAttributeCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CR;
+				element = grammarAccess.getConstraintAccess().getAttributeSAttributeCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// (":" qualifier=[SStateValue|STRING])?
+protected class Constraint_Group_5 extends GroupToken {
+	
+	public Constraint_Group_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getGroup_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_QualifierAssignment_5_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ":"
+protected class Constraint_ColonKeyword_5_0 extends KeywordToken  {
+	
+	public Constraint_ColonKeyword_5_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getColonKeyword_5_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_AttributeAssignment_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// qualifier=[SStateValue|STRING]
+protected class Constraint_QualifierAssignment_5_1 extends AssignmentToken  {
+	
+	public Constraint_QualifierAssignment_5_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getQualifierAssignment_5_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_ColonKeyword_5_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("qualifier",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("qualifier");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getConstraintAccess().getQualifierSStateValueCrossReference_5_1_0().getType().getClassifier())) {
+				type = AssignmentType.CR;
+				element = grammarAccess.getConstraintAccess().getQualifierSStateValueCrossReference_5_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class Constraint_RightParenthesisKeyword_6 extends KeywordToken  {
+	
+	public Constraint_RightParenthesisKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getRightParenthesisKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_Group_5(parent, this, 0, inst);
+			case 1: return new Constraint_AttributeAssignment_4(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "=" "[" minValue=( IntValue | RealValue ) "," maxValue=( IntValue | RealValue ) "]"
+protected class Constraint_Group_7 extends GroupToken {
+	
+	public Constraint_Group_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getGroup_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_RightSquareBracketKeyword_7_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "="
+protected class Constraint_EqualsSignKeyword_7_0 extends KeywordToken  {
+	
+	public Constraint_EqualsSignKeyword_7_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getEqualsSignKeyword_7_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_RightParenthesisKeyword_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "["
+protected class Constraint_LeftSquareBracketKeyword_7_1 extends KeywordToken  {
+	
+	public Constraint_LeftSquareBracketKeyword_7_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getLeftSquareBracketKeyword_7_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_EqualsSignKeyword_7_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// minValue=( IntValue | RealValue )
+protected class Constraint_MinValueAssignment_7_2 extends AssignmentToken  {
+	
+	public Constraint_MinValueAssignment_7_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getMinValueAssignment_7_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new IntValue_ValueAssignment(this, this, 0, inst);
+			case 1: return new RealValue_ValueAssignment(this, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("minValue",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("minValue");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getIntValueRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraintAccess().getMinValueIntValueParserRuleCall_7_2_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRealValueRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraintAccess().getMinValueRealValueParserRuleCall_7_2_0_1(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Constraint_LeftSquareBracketKeyword_7_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ","
+protected class Constraint_CommaKeyword_7_3 extends KeywordToken  {
+	
+	public Constraint_CommaKeyword_7_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getCommaKeyword_7_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_MinValueAssignment_7_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// maxValue=( IntValue | RealValue )
+protected class Constraint_MaxValueAssignment_7_4 extends AssignmentToken  {
+	
+	public Constraint_MaxValueAssignment_7_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getMaxValueAssignment_7_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new IntValue_ValueAssignment(this, this, 0, inst);
+			case 1: return new RealValue_ValueAssignment(this, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("maxValue",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("maxValue");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getIntValueRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraintAccess().getMaxValueIntValueParserRuleCall_7_4_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRealValueRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraintAccess().getMaxValueRealValueParserRuleCall_7_4_0_1(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Constraint_CommaKeyword_7_3(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "]"
+protected class Constraint_RightSquareBracketKeyword_7_5 extends KeywordToken  {
+	
+	public Constraint_RightSquareBracketKeyword_7_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraintAccess().getRightSquareBracketKeyword_7_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraint_MaxValueAssignment_7_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule Constraint ****************/
+
+
+/************ begin Rule IntValue ****************
+ *
+ * IntValue:
+ *   value=INT;
+ *
+ **/
+
+// value=INT
+protected class IntValue_ValueAssignment extends AssignmentToken  {
+	
+	public IntValue_ValueAssignment(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getIntValueAccess().getValueAssignment();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getIntValueRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("value",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("value");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getIntValueAccess().getValueINTTerminalRuleCall_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+/************ end Rule IntValue ****************/
+
+
+/************ begin Rule RealValue ****************
+ *
+ * RealValue:
+ *   value=REAL;
+ *
+ **/
+
+// value=REAL
+protected class RealValue_ValueAssignment extends AssignmentToken  {
+	
+	public RealValue_ValueAssignment(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRealValueAccess().getValueAssignment();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getRealValueRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("value",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("value");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getRealValueAccess().getValueREALTerminalRuleCall_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+/************ end Rule RealValue ****************/
+
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/ATestAntlrTokenFileProvider.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/ATestAntlrTokenFileProvider.java
new file mode 100644
index 0000000..f27e4f4
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/ATestAntlrTokenFileProvider.java
@@ -0,0 +1,15 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.amp.amf.testing.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class ATestAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.tokens");
+	}
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/ATestParser.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/ATestParser.java
new file mode 100644
index 0000000..3669375
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/ATestParser.java
@@ -0,0 +1,53 @@
+/*
+* generated by Xtext
+*/
+package org.eclipse.amp.amf.testing.parser.antlr;
+
+import org.antlr.runtime.ANTLRInputStream;
+import org.eclipse.xtext.parser.antlr.ITokenDefProvider;
+import org.eclipse.xtext.parser.IParseResult;
+import org.eclipse.xtext.parser.ParseException;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+
+import com.google.inject.Inject;
+
+import org.eclipse.amp.amf.testing.services.ATestGrammarAccess;
+
+public class ATestParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject 
+    protected ITokenDefProvider antlrTokenDefProvider;
+	
+	@Inject
+	private ATestGrammarAccess grammarAccess;
+	
+	@Override
+	protected IParseResult parse(String ruleName, ANTLRInputStream in) {
+		org.eclipse.amp.amf.testing.parser.antlr.internal.InternalATestLexer lexer = new org.eclipse.amp.amf.testing.parser.antlr.internal.InternalATestLexer(in);
+		XtextTokenStream stream = new XtextTokenStream(lexer, antlrTokenDefProvider);
+		stream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+		org.eclipse.amp.amf.testing.parser.antlr.internal.InternalATestParser parser = new org.eclipse.amp.amf.testing.parser.antlr.internal.InternalATestParser(
+				stream, getElementFactory(), grammarAccess);
+		parser.setTokenTypeMap(antlrTokenDefProvider.getTokenDefMap());
+		try {
+			if(ruleName != null)
+				return parser.parse(ruleName);
+			return parser.parse();
+		} catch (Exception re) {
+			throw new ParseException(re.getMessage(),re);
+		}
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "Model";
+	}
+	
+	public ATestGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(ATestGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g
new file mode 100644
index 0000000..7abe17c
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g
@@ -0,0 +1,541 @@
+/*
+* generated by Xtext
+*/
+grammar InternalATest;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+	
+}
+
+@lexer::header {
+package org.eclipse.amp.amf.testing.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+}
+
+@parser::header {
+package org.eclipse.amp.amf.testing.parser.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.xtext.parsetree.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.amp.amf.testing.services.ATestGrammarAccess;
+
+}
+
+@parser::members {
+ 
+ 	private ATestGrammarAccess grammarAccess;
+ 	
+    public InternalATestParser(TokenStream input, IAstFactory factory, ATestGrammarAccess grammarAccess) {
+        this(input);
+        this.factory = factory;
+        registerRules(grammarAccess.getGrammar());
+        this.grammarAccess = grammarAccess;
+    }
+    
+    @Override
+    protected InputStream getTokenFile() {
+    	ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.tokens");
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "Model";	
+   	} 
+}
+
+@rulecatch { 
+    catch (RecognitionException re) { 
+        recover(input,re); 
+        appendSkippedTokens();
+    } 
+}
+
+
+
+
+// Entry rule entryRuleModel
+entryRuleModel returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getModelRule(), currentNode); }
+	 iv_ruleModel=ruleModel 
+	 { $current=$iv_ruleModel.current; } 
+	 EOF 
+;
+
+// Rule Model
+ruleModel returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    lv_name_0=	RULE_STRING
+	{
+		createLeafNode(grammarAccess.getModelAccess().getNameSTRINGTerminalRuleCall_0_0(), "name"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_0, "STRING", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)?(	
+	
+	    lv_description_1=	RULE_PLAIN_STRING
+	{
+		createLeafNode(grammarAccess.getModelAccess().getDescriptionPLAIN_STRINGTerminalRuleCall_1_0(), "description"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "description", lv_description_1, "PLAIN_STRING", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getModelAccess().getTestsTestsParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_tests_2=ruleTests 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "tests", lv_tests_2, "Tests", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getModelAccess().getContraintsConstraintParserRuleCall_3_0(), currentNode); 
+	    }
+	    lv_contraints_3=ruleConstraint 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "contraints", lv_contraints_3, "Constraint", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)*);
+
+
+
+
+
+// Entry rule entryRuleTests
+entryRuleTests returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getTestsRule(), currentNode); }
+	 iv_ruleTests=ruleTests 
+	 { $current=$iv_ruleTests.current; } 
+	 EOF 
+;
+
+// Rule Tests
+ruleTests returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('TESTS' 
+    {
+        createLeafNode(grammarAccess.getTestsAccess().getTESTSKeyword_0(), null); 
+    }
+(	
+	
+	    lv_importURI_1=	RULE_STRING
+	{
+		createLeafNode(grammarAccess.getTestsAccess().getImportURISTRINGTerminalRuleCall_1_0(), "importURI"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getTestsRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "importURI", lv_importURI_1, "STRING", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleConstraint
+entryRuleConstraint returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConstraintRule(), currentNode); }
+	 iv_ruleConstraint=ruleConstraint 
+	 { $current=$iv_ruleConstraint.current; } 
+	 EOF 
+;
+
+// Rule Constraint
+ruleConstraint returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMeasureMeasureEnumRuleCall_0_0(), currentNode); 
+	    }
+	    lv_measure_0=ruleMeasure 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "measure", lv_measure_0, "Measure", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'(' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getLeftParenthesisKeyword_1(), null); 
+    }
+(	
+	
+		
+		{
+			if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+        }
+	RULE_STRING
+	{
+		createLeafNode(grammarAccess.getConstraintAccess().getAgentSAgentCrossReference_2_0(), "agent"); 
+	}
+
+		// TODO assign feature to currentNode
+	
+)':' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getColonKeyword_3(), null); 
+    }
+(	
+	
+		
+		{
+			if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+        }
+	RULE_STRING
+	{
+		createLeafNode(grammarAccess.getConstraintAccess().getAttributeSAttributeCrossReference_4_0(), "attribute"); 
+	}
+
+		// TODO assign feature to currentNode
+	
+)(':' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getColonKeyword_5_0(), null); 
+    }
+(	
+	
+		
+		{
+			if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+        }
+	RULE_STRING
+	{
+		createLeafNode(grammarAccess.getConstraintAccess().getQualifierSStateValueCrossReference_5_1_0(), "qualifier"); 
+	}
+
+		// TODO assign feature to currentNode
+	
+))?')' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getRightParenthesisKeyword_6(), null); 
+    }
+('=' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getEqualsSignKeyword_7_0(), null); 
+    }
+'[' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getLeftSquareBracketKeyword_7_1(), null); 
+    }
+(	
+	
+	    lv_minValue_10=(	{ 
+        currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMinValueIntValueParserRuleCall_7_2_0_0(), currentNode); 
+    }
+	ruleIntValue	{ 
+        currentNode = currentNode.getParent();
+    }
+
+    |	{ 
+        currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMinValueRealValueParserRuleCall_7_2_0_1(), currentNode); 
+    }
+	ruleRealValue	{ 
+        currentNode = currentNode.getParent();
+    }
+)
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "minValue", lv_minValue_10, null, lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)',' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getCommaKeyword_7_3(), null); 
+    }
+(	
+	
+	    lv_maxValue_12=(	{ 
+        currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMaxValueIntValueParserRuleCall_7_4_0_0(), currentNode); 
+    }
+	ruleIntValue	{ 
+        currentNode = currentNode.getParent();
+    }
+
+    |	{ 
+        currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMaxValueRealValueParserRuleCall_7_4_0_1(), currentNode); 
+    }
+	ruleRealValue	{ 
+        currentNode = currentNode.getParent();
+    }
+)
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "maxValue", lv_maxValue_12, null, lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)']' 
+    {
+        createLeafNode(grammarAccess.getConstraintAccess().getRightSquareBracketKeyword_7_5(), null); 
+    }
+));
+
+
+
+
+
+// Entry rule entryRuleIntValue
+entryRuleIntValue returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getIntValueRule(), currentNode); }
+	 iv_ruleIntValue=ruleIntValue 
+	 { $current=$iv_ruleIntValue.current; } 
+	 EOF 
+;
+
+// Rule IntValue
+ruleIntValue returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(	
+	
+	    lv_value_0=	RULE_INT
+	{
+		createLeafNode(grammarAccess.getIntValueAccess().getValueINTTerminalRuleCall_0(), "value"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getIntValueRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "value", lv_value_0, "INT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+);
+
+
+
+
+
+// Entry rule entryRuleRealValue
+entryRuleRealValue returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getRealValueRule(), currentNode); }
+	 iv_ruleRealValue=ruleRealValue 
+	 { $current=$iv_ruleRealValue.current; } 
+	 EOF 
+;
+
+// Rule RealValue
+ruleRealValue returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(	
+	
+	    lv_value_0=	RULE_REAL
+	{
+		createLeafNode(grammarAccess.getRealValueAccess().getValueREALTerminalRuleCall_0(), "value"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getRealValueRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "value", lv_value_0, "REAL", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+);
+
+
+
+
+
+// Rule Measure
+ruleMeasure returns [Enumerator current=null] 
+    @init { setCurrentLookahead(); resetLookahead(); }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	'Count' 
+	{
+        $current = grammarAccess.getMeasureAccess().getCOUNTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getMeasureAccess().getCOUNTEnumLiteralDeclaration_0(), null); 
+    }
+)
+    |(	'Average' 
+	{
+        $current = grammarAccess.getMeasureAccess().getAVERAGEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getMeasureAccess().getAVERAGEEnumLiteralDeclaration_1(), null); 
+    }
+)
+    |(	'Sum' 
+	{
+        $current = grammarAccess.getMeasureAccess().getSUMEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getMeasureAccess().getSUMEnumLiteralDeclaration_2(), null); 
+    }
+)
+    |(	'Minimum' 
+	{
+        $current = grammarAccess.getMeasureAccess().getMINIMUMEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getMeasureAccess().getMINIMUMEnumLiteralDeclaration_3(), null); 
+    }
+)
+    |(	'Maximum' 
+	{
+        $current = grammarAccess.getMeasureAccess().getMAXIMUMEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getMeasureAccess().getMAXIMUMEnumLiteralDeclaration_4(), null); 
+    }
+));
+
+
+
+RULE_REAL : '-'? RULE_INT ('.' RULE_INT)?;
+
+RULE_PLAIN_STRING : '\u00AB' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\u00AB'|'\u00BB')))* '\u00BB';
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.tokens b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.tokens
new file mode 100644
index 0000000..f43e983
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.tokens
@@ -0,0 +1,22 @@
+RULE_PLAIN_STRING=5
+RULE_ID=8
+RULE_STRING=4
+RULE_ANY_OTHER=12
+RULE_INT=6
+RULE_REAL=7
+RULE_WS=11
+RULE_SL_COMMENT=10
+RULE_ML_COMMENT=9
+'Count'=21
+'Minimum'=24
+'TESTS'=13
+'='=17
+'('=14
+':'=15
+'['=18
+'Sum'=23
+','=19
+')'=16
+'Average'=22
+']'=20
+'Maximum'=25
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATestLexer.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATestLexer.java
new file mode 100644
index 0000000..fc950cb
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATestLexer.java
@@ -0,0 +1,1223 @@
+package org.eclipse.amp.amf.testing.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+public class InternalATestLexer extends Lexer {
+    public static final int RULE_ID=8;
+    public static final int RULE_ANY_OTHER=12;
+    public static final int T25=25;
+    public static final int Tokens=26;
+    public static final int T24=24;
+    public static final int EOF=-1;
+    public static final int RULE_SL_COMMENT=10;
+    public static final int T23=23;
+    public static final int T22=22;
+    public static final int T21=21;
+    public static final int T20=20;
+    public static final int RULE_ML_COMMENT=9;
+    public static final int RULE_PLAIN_STRING=5;
+    public static final int RULE_STRING=4;
+    public static final int RULE_INT=6;
+    public static final int RULE_REAL=7;
+    public static final int T13=13;
+    public static final int T14=14;
+    public static final int RULE_WS=11;
+    public static final int T15=15;
+    public static final int T16=16;
+    public static final int T17=17;
+    public static final int T18=18;
+    public static final int T19=19;
+    public InternalATestLexer() {;} 
+    public InternalATestLexer(CharStream input) {
+        super(input);
+    }
+    public String getGrammarFileName() { return "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g"; }
+
+    // $ANTLR start T13
+    public final void mT13() throws RecognitionException {
+        try {
+            int _type = T13;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:10:5: ( 'TESTS' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:10:7: 'TESTS'
+            {
+            match("TESTS"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T13
+
+    // $ANTLR start T14
+    public final void mT14() throws RecognitionException {
+        try {
+            int _type = T14;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:11:5: ( '(' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:11:7: '('
+            {
+            match('('); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T14
+
+    // $ANTLR start T15
+    public final void mT15() throws RecognitionException {
+        try {
+            int _type = T15;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:12:5: ( ':' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:12:7: ':'
+            {
+            match(':'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T15
+
+    // $ANTLR start T16
+    public final void mT16() throws RecognitionException {
+        try {
+            int _type = T16;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:13:5: ( ')' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:13:7: ')'
+            {
+            match(')'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T16
+
+    // $ANTLR start T17
+    public final void mT17() throws RecognitionException {
+        try {
+            int _type = T17;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:14:5: ( '=' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:14:7: '='
+            {
+            match('='); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T17
+
+    // $ANTLR start T18
+    public final void mT18() throws RecognitionException {
+        try {
+            int _type = T18;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:15:5: ( '[' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:15:7: '['
+            {
+            match('['); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T18
+
+    // $ANTLR start T19
+    public final void mT19() throws RecognitionException {
+        try {
+            int _type = T19;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:16:5: ( ',' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:16:7: ','
+            {
+            match(','); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T19
+
+    // $ANTLR start T20
+    public final void mT20() throws RecognitionException {
+        try {
+            int _type = T20;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:17:5: ( ']' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:17:7: ']'
+            {
+            match(']'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T20
+
+    // $ANTLR start T21
+    public final void mT21() throws RecognitionException {
+        try {
+            int _type = T21;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:18:5: ( 'Count' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:18:7: 'Count'
+            {
+            match("Count"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T21
+
+    // $ANTLR start T22
+    public final void mT22() throws RecognitionException {
+        try {
+            int _type = T22;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:19:5: ( 'Average' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:19:7: 'Average'
+            {
+            match("Average"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T22
+
+    // $ANTLR start T23
+    public final void mT23() throws RecognitionException {
+        try {
+            int _type = T23;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:20:5: ( 'Sum' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:20:7: 'Sum'
+            {
+            match("Sum"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T23
+
+    // $ANTLR start T24
+    public final void mT24() throws RecognitionException {
+        try {
+            int _type = T24;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:21:5: ( 'Minimum' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:21:7: 'Minimum'
+            {
+            match("Minimum"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T24
+
+    // $ANTLR start T25
+    public final void mT25() throws RecognitionException {
+        try {
+            int _type = T25;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:22:5: ( 'Maximum' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:22:7: 'Maximum'
+            {
+            match("Maximum"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T25
+
+    // $ANTLR start RULE_REAL
+    public final void mRULE_REAL() throws RecognitionException {
+        try {
+            int _type = RULE_REAL;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:523:11: ( ( '-' )? RULE_INT ( '.' RULE_INT )? )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:523:13: ( '-' )? RULE_INT ( '.' RULE_INT )?
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:523:13: ( '-' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='-') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:523:13: '-'
+                    {
+                    match('-'); 
+
+                    }
+                    break;
+
+            }
+
+            mRULE_INT(); 
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:523:27: ( '.' RULE_INT )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0=='.') ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:523:28: '.' RULE_INT
+                    {
+                    match('.'); 
+                    mRULE_INT(); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_REAL
+
+    // $ANTLR start RULE_PLAIN_STRING
+    public final void mRULE_PLAIN_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_PLAIN_STRING;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:525:19: ( '\\u00AB' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\u00AB' | '\\u00BB' ) ) )* '\\u00BB' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:525:21: '\\u00AB' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\u00AB' | '\\u00BB' ) ) )* '\\u00BB'
+            {
+            match('\u00AB'); 
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:525:30: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\u00AB' | '\\u00BB' ) ) )*
+            loop3:
+            do {
+                int alt3=3;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0=='\\') ) {
+                    alt3=1;
+                }
+                else if ( ((LA3_0>='\u0000' && LA3_0<='[')||(LA3_0>=']' && LA3_0<='\u00AA')||(LA3_0>='\u00AC' && LA3_0<='\u00BA')||(LA3_0>='\u00BC' && LA3_0<='\uFFFE')) ) {
+                    alt3=2;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:525:31: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+            	    {
+            	    match('\\'); 
+            	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:525:72: ~ ( ( '\\\\' | '\\u00AB' | '\\u00BB' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\u00AA')||(input.LA(1)>='\u00AC' && input.LA(1)<='\u00BA')||(input.LA(1)>='\u00BC' && input.LA(1)<='\uFFFE') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop3;
+                }
+            } while (true);
+
+            match('\u00BB'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_PLAIN_STRING
+
+    // $ANTLR start RULE_ID
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:527:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:527:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:527:11: ( '^' )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0=='^') ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:527:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:527:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( ((LA5_0>='0' && LA5_0<='9')||(LA5_0>='A' && LA5_0<='Z')||LA5_0=='_'||(LA5_0>='a' && LA5_0<='z')) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop5;
+                }
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ID
+
+    // $ANTLR start RULE_INT
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:529:10: ( ( '0' .. '9' )+ )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:529:12: ( '0' .. '9' )+
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:529:12: ( '0' .. '9' )+
+            int cnt6=0;
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>='0' && LA6_0<='9')) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:529:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt6 >= 1 ) break loop6;
+                        EarlyExitException eee =
+                            new EarlyExitException(6, input);
+                        throw eee;
+                }
+                cnt6++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_INT
+
+    // $ANTLR start RULE_STRING
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0=='\"') ) {
+                alt9=1;
+            }
+            else if ( (LA9_0=='\'') ) {
+                alt9=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("531:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )", 9, 0, input);
+
+                throw nvae;
+            }
+            switch (alt9) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop7:
+                    do {
+                        int alt7=3;
+                        int LA7_0 = input.LA(1);
+
+                        if ( (LA7_0=='\\') ) {
+                            alt7=1;
+                        }
+                        else if ( ((LA7_0>='\u0000' && LA7_0<='!')||(LA7_0>='#' && LA7_0<='[')||(LA7_0>=']' && LA7_0<='\uFFFE')) ) {
+                            alt7=2;
+                        }
+
+
+                        switch (alt7) {
+                    	case 1 :
+                    	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:62: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop7;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:82: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:87: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop8:
+                    do {
+                        int alt8=3;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0=='\\') ) {
+                            alt8=1;
+                        }
+                        else if ( ((LA8_0>='\u0000' && LA8_0<='&')||(LA8_0>='(' && LA8_0<='[')||(LA8_0>=']' && LA8_0<='\uFFFE')) ) {
+                            alt8=2;
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:88: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:531:129: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop8;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_STRING
+
+    // $ANTLR start RULE_ML_COMMENT
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:533:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:533:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:533:24: ( options {greedy=false; } : . )*
+            loop10:
+            do {
+                int alt10=2;
+                int LA10_0 = input.LA(1);
+
+                if ( (LA10_0=='*') ) {
+                    int LA10_1 = input.LA(2);
+
+                    if ( (LA10_1=='/') ) {
+                        alt10=2;
+                    }
+                    else if ( ((LA10_1>='\u0000' && LA10_1<='.')||(LA10_1>='0' && LA10_1<='\uFFFE')) ) {
+                        alt10=1;
+                    }
+
+
+                }
+                else if ( ((LA10_0>='\u0000' && LA10_0<=')')||(LA10_0>='+' && LA10_0<='\uFFFE')) ) {
+                    alt10=1;
+                }
+
+
+                switch (alt10) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:533:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop10;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ML_COMMENT
+
+    // $ANTLR start RULE_SL_COMMENT
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\u0000' && LA11_0<='\t')||(LA11_0>='\u000B' && LA11_0<='\f')||(LA11_0>='\u000E' && LA11_0<='\uFFFE')) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFE') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:40: ( ( '\\r' )? '\\n' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='\n'||LA13_0=='\r') ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:41: ( '\\r' )?
+                    int alt12=2;
+                    int LA12_0 = input.LA(1);
+
+                    if ( (LA12_0=='\r') ) {
+                        alt12=1;
+                    }
+                    switch (alt12) {
+                        case 1 :
+                            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:535:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_SL_COMMENT
+
+    // $ANTLR start RULE_WS
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:537:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:537:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:537:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt14=0;
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( ((LA14_0>='\t' && LA14_0<='\n')||LA14_0=='\r'||LA14_0==' ') ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt14 >= 1 ) break loop14;
+                        EarlyExitException eee =
+                            new EarlyExitException(14, input);
+                        throw eee;
+                }
+                cnt14++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_WS
+
+    // $ANTLR start RULE_ANY_OTHER
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:539:16: ( . )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:539:18: .
+            {
+            matchAny(); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ANY_OTHER
+
+    public void mTokens() throws RecognitionException {
+        // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:8: ( T13 | T14 | T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | RULE_REAL | RULE_PLAIN_STRING | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt15=22;
+        alt15 = dfa15.predict(input);
+        switch (alt15) {
+            case 1 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:10: T13
+                {
+                mT13(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:14: T14
+                {
+                mT14(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:18: T15
+                {
+                mT15(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:22: T16
+                {
+                mT16(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:26: T17
+                {
+                mT17(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:30: T18
+                {
+                mT18(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:34: T19
+                {
+                mT19(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:38: T20
+                {
+                mT20(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:42: T21
+                {
+                mT21(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:46: T22
+                {
+                mT22(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:50: T23
+                {
+                mT23(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:54: T24
+                {
+                mT24(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:58: T25
+                {
+                mT25(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:62: RULE_REAL
+                {
+                mRULE_REAL(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:72: RULE_PLAIN_STRING
+                {
+                mRULE_PLAIN_STRING(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:90: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:98: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:107: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:119: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:135: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 21 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:151: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 22 :
+                // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:1:159: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA15 dfa15 = new DFA15(this);
+    static final String DFA15_eotS =
+        "\1\uffff\1\30\7\uffff\4\30\1\26\1\45\2\26\1\uffff\3\26\2\uffff\1"+
+        "\30\10\uffff\5\30\1\uffff\1\45\5\uffff\3\30\1\65\5\30\1\uffff\2"+
+        "\30\1\75\1\76\3\30\2\uffff\3\30\1\105\1\106\1\107\3\uffff";
+    static final String DFA15_eofS =
+        "\110\uffff";
+    static final String DFA15_minS =
+        "\1\0\1\105\7\uffff\1\157\1\166\1\165\1\141\2\60\1\0\1\101\1\uffff"+
+        "\2\0\1\52\2\uffff\1\123\10\uffff\1\165\1\145\1\155\1\170\1\156\1"+
+        "\uffff\1\60\5\uffff\1\124\1\156\1\162\1\60\2\151\1\123\1\164\1\141"+
+        "\1\uffff\2\155\2\60\1\147\2\165\2\uffff\1\145\2\155\3\60\3\uffff";
+    static final String DFA15_maxS =
+        "\1\ufffe\1\105\7\uffff\1\157\1\166\1\165\1\151\2\71\1\ufffe\1\172"+
+        "\1\uffff\2\ufffe\1\57\2\uffff\1\123\10\uffff\1\165\1\145\1\155\1"+
+        "\170\1\156\1\uffff\1\71\5\uffff\1\124\1\156\1\162\1\172\2\151\1"+
+        "\123\1\164\1\141\1\uffff\2\155\2\172\1\147\2\165\2\uffff\1\145\2"+
+        "\155\3\172\3\uffff";
+    static final String DFA15_acceptS =
+        "\2\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\10\uffff\1\20\3\uffff\1\25"+
+        "\1\26\1\uffff\1\20\1\2\1\3\1\4\1\5\1\6\1\7\1\10\5\uffff\1\16\1\uffff"+
+        "\1\17\1\22\1\23\1\24\1\25\11\uffff\1\13\7\uffff\1\1\1\11\6\uffff"+
+        "\1\12\1\15\1\14";
+    static final String DFA15_specialS =
+        "\110\uffff}>";
+    static final String[] DFA15_transitionS = {
+            "\11\26\2\25\2\26\1\25\22\26\1\25\1\26\1\22\4\26\1\23\1\2\1\4"+
+            "\2\26\1\7\1\15\1\26\1\24\12\16\1\3\2\26\1\5\3\26\1\12\1\21\1"+
+            "\11\11\21\1\14\5\21\1\13\1\1\6\21\1\6\1\26\1\10\1\20\1\21\1"+
+            "\26\32\21\60\26\1\17\uff53\26",
+            "\1\27",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\40",
+            "\1\41",
+            "\1\42",
+            "\1\43\7\uffff\1\44",
+            "\12\45",
+            "\12\46",
+            "\u00ab\47\1\uffff\uff53\47",
+            "\32\30\4\uffff\1\30\1\uffff\32\30",
+            "",
+            "\uffff\50",
+            "\uffff\50",
+            "\1\51\4\uffff\1\52",
+            "",
+            "",
+            "\1\54",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\55",
+            "\1\56",
+            "\1\57",
+            "\1\60",
+            "\1\61",
+            "",
+            "\12\46",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\62",
+            "\1\63",
+            "\1\64",
+            "\12\30\7\uffff\32\30\4\uffff\1\30\1\uffff\32\30",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "",
+            "\1\73",
+            "\1\74",
+            "\12\30\7\uffff\32\30\4\uffff\1\30\1\uffff\32\30",
+            "\12\30\7\uffff\32\30\4\uffff\1\30\1\uffff\32\30",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "",
+            "",
+            "\1\102",
+            "\1\103",
+            "\1\104",
+            "\12\30\7\uffff\32\30\4\uffff\1\30\1\uffff\32\30",
+            "\12\30\7\uffff\32\30\4\uffff\1\30\1\uffff\32\30",
+            "\12\30\7\uffff\32\30\4\uffff\1\30\1\uffff\32\30",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS);
+    static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS);
+    static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS);
+    static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS);
+    static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS);
+    static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS);
+    static final short[][] DFA15_transition;
+
+    static {
+        int numStates = DFA15_transitionS.length;
+        DFA15_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA15_transition[i] = DFA.unpackEncodedString(DFA15_transitionS[i]);
+        }
+    }
+
+    class DFA15 extends DFA {
+
+        public DFA15(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 15;
+            this.eot = DFA15_eot;
+            this.eof = DFA15_eof;
+            this.min = DFA15_min;
+            this.max = DFA15_max;
+            this.accept = DFA15_accept;
+            this.special = DFA15_special;
+            this.transition = DFA15_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T13 | T14 | T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | RULE_REAL | RULE_PLAIN_STRING | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATestParser.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATestParser.java
new file mode 100644
index 0000000..5e784e9
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATestParser.java
@@ -0,0 +1,1119 @@
+package org.eclipse.amp.amf.testing.parser.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.xtext.parsetree.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.amp.amf.testing.services.ATestGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+public class InternalATestParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_PLAIN_STRING", "RULE_INT", "RULE_REAL", "RULE_ID", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'TESTS'", "'('", "':'", "')'", "'='", "'['", "','", "']'", "'Count'", "'Average'", "'Sum'", "'Minimum'", "'Maximum'"
+    };
+    public static final int RULE_PLAIN_STRING=5;
+    public static final int RULE_ID=8;
+    public static final int RULE_STRING=4;
+    public static final int RULE_ANY_OTHER=12;
+    public static final int RULE_INT=6;
+    public static final int RULE_REAL=7;
+    public static final int RULE_WS=11;
+    public static final int RULE_SL_COMMENT=10;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=9;
+
+        public InternalATestParser(TokenStream input) {
+            super(input);
+        }
+        
+
+    public String[] getTokenNames() { return tokenNames; }
+    public String getGrammarFileName() { return "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g"; }
+
+
+     
+     	private ATestGrammarAccess grammarAccess;
+     	
+        public InternalATestParser(TokenStream input, IAstFactory factory, ATestGrammarAccess grammarAccess) {
+            this(input);
+            this.factory = factory;
+            registerRules(grammarAccess.getGrammar());
+            this.grammarAccess = grammarAccess;
+        }
+        
+        @Override
+        protected InputStream getTokenFile() {
+        	ClassLoader classLoader = getClass().getClassLoader();
+        	return classLoader.getResourceAsStream("org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.tokens");
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "Model";	
+       	} 
+
+
+
+    // $ANTLR start entryRuleModel
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:73:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
+    public final EObject entryRuleModel() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleModel = null;
+
+
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:73:47: (iv_ruleModel= ruleModel EOF )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:74:2: iv_ruleModel= ruleModel EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getModelRule(), currentNode); 
+            pushFollow(FOLLOW_ruleModel_in_entryRuleModel73);
+            iv_ruleModel=ruleModel();
+            _fsp--;
+
+             current =iv_ruleModel; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleModel83); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleModel
+
+
+    // $ANTLR start ruleModel
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:81:1: ruleModel returns [EObject current=null] : ( (lv_name_0= RULE_STRING )? (lv_description_1= RULE_PLAIN_STRING )? (lv_tests_2= ruleTests )? (lv_contraints_3= ruleConstraint )* ) ;
+    public final EObject ruleModel() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_0=null;
+        Token lv_description_1=null;
+        EObject lv_tests_2 = null;
+
+        EObject lv_contraints_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:86:6: ( ( (lv_name_0= RULE_STRING )? (lv_description_1= RULE_PLAIN_STRING )? (lv_tests_2= ruleTests )? (lv_contraints_3= ruleConstraint )* ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:87:1: ( (lv_name_0= RULE_STRING )? (lv_description_1= RULE_PLAIN_STRING )? (lv_tests_2= ruleTests )? (lv_contraints_3= ruleConstraint )* )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:87:1: ( (lv_name_0= RULE_STRING )? (lv_description_1= RULE_PLAIN_STRING )? (lv_tests_2= ruleTests )? (lv_contraints_3= ruleConstraint )* )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:87:2: (lv_name_0= RULE_STRING )? (lv_description_1= RULE_PLAIN_STRING )? (lv_tests_2= ruleTests )? (lv_contraints_3= ruleConstraint )*
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:87:2: (lv_name_0= RULE_STRING )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==RULE_STRING) ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:89:6: lv_name_0= RULE_STRING
+                    {
+                    lv_name_0=(Token)input.LT(1);
+                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleModel130); 
+
+                    		createLeafNode(grammarAccess.getModelAccess().getNameSTRINGTerminalRuleCall_0_0(), "name"); 
+                    	
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "name", lv_name_0, "STRING", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:107:3: (lv_description_1= RULE_PLAIN_STRING )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==RULE_PLAIN_STRING) ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:109:6: lv_description_1= RULE_PLAIN_STRING
+                    {
+                    lv_description_1=(Token)input.LT(1);
+                    match(input,RULE_PLAIN_STRING,FOLLOW_RULE_PLAIN_STRING_in_ruleModel161); 
+
+                    		createLeafNode(grammarAccess.getModelAccess().getDescriptionPLAIN_STRINGTerminalRuleCall_1_0(), "description"); 
+                    	
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "description", lv_description_1, "PLAIN_STRING", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:127:3: (lv_tests_2= ruleTests )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==13) ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:130:6: lv_tests_2= ruleTests
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getModelAccess().getTestsTestsParserRuleCall_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleTests_in_ruleModel204);
+                    lv_tests_2=ruleTests();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "tests", lv_tests_2, "Tests", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:148:3: (lv_contraints_3= ruleConstraint )*
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( ((LA4_0>=21 && LA4_0<=25)) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:151:6: lv_contraints_3= ruleConstraint
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getModelAccess().getContraintsConstraintParserRuleCall_3_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleConstraint_in_ruleModel243);
+            	    lv_contraints_3=ruleConstraint();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getModelRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "contraints", lv_contraints_3, "Constraint", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop4;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleModel
+
+
+    // $ANTLR start entryRuleTests
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:176:1: entryRuleTests returns [EObject current=null] : iv_ruleTests= ruleTests EOF ;
+    public final EObject entryRuleTests() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleTests = null;
+
+
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:176:47: (iv_ruleTests= ruleTests EOF )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:177:2: iv_ruleTests= ruleTests EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getTestsRule(), currentNode); 
+            pushFollow(FOLLOW_ruleTests_in_entryRuleTests281);
+            iv_ruleTests=ruleTests();
+            _fsp--;
+
+             current =iv_ruleTests; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTests291); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleTests
+
+
+    // $ANTLR start ruleTests
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:184:1: ruleTests returns [EObject current=null] : ( 'TESTS' (lv_importURI_1= RULE_STRING ) ) ;
+    public final EObject ruleTests() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_importURI_1=null;
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:189:6: ( ( 'TESTS' (lv_importURI_1= RULE_STRING ) ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:190:1: ( 'TESTS' (lv_importURI_1= RULE_STRING ) )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:190:1: ( 'TESTS' (lv_importURI_1= RULE_STRING ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:190:2: 'TESTS' (lv_importURI_1= RULE_STRING )
+            {
+            match(input,13,FOLLOW_13_in_ruleTests325); 
+
+                    createLeafNode(grammarAccess.getTestsAccess().getTESTSKeyword_0(), null); 
+                
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:194:1: (lv_importURI_1= RULE_STRING )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:196:6: lv_importURI_1= RULE_STRING
+            {
+            lv_importURI_1=(Token)input.LT(1);
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTests347); 
+
+            		createLeafNode(grammarAccess.getTestsAccess().getImportURISTRINGTerminalRuleCall_1_0(), "importURI"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getTestsRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "importURI", lv_importURI_1, "STRING", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleTests
+
+
+    // $ANTLR start entryRuleConstraint
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:221:1: entryRuleConstraint returns [EObject current=null] : iv_ruleConstraint= ruleConstraint EOF ;
+    public final EObject entryRuleConstraint() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleConstraint = null;
+
+
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:221:52: (iv_ruleConstraint= ruleConstraint EOF )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:222:2: iv_ruleConstraint= ruleConstraint EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConstraintRule(), currentNode); 
+            pushFollow(FOLLOW_ruleConstraint_in_entryRuleConstraint388);
+            iv_ruleConstraint=ruleConstraint();
+            _fsp--;
+
+             current =iv_ruleConstraint; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleConstraint398); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleConstraint
+
+
+    // $ANTLR start ruleConstraint
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:229:1: ruleConstraint returns [EObject current=null] : ( (lv_measure_0= ruleMeasure ) '(' ( RULE_STRING ) ':' ( RULE_STRING ) ( ':' ( RULE_STRING ) )? ')' ( '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']' ) ) ;
+    public final EObject ruleConstraint() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_minValue_10=null;
+        Token lv_maxValue_12=null;
+        Enumerator lv_measure_0 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:234:6: ( ( (lv_measure_0= ruleMeasure ) '(' ( RULE_STRING ) ':' ( RULE_STRING ) ( ':' ( RULE_STRING ) )? ')' ( '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']' ) ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:235:1: ( (lv_measure_0= ruleMeasure ) '(' ( RULE_STRING ) ':' ( RULE_STRING ) ( ':' ( RULE_STRING ) )? ')' ( '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']' ) )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:235:1: ( (lv_measure_0= ruleMeasure ) '(' ( RULE_STRING ) ':' ( RULE_STRING ) ( ':' ( RULE_STRING ) )? ')' ( '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']' ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:235:2: (lv_measure_0= ruleMeasure ) '(' ( RULE_STRING ) ':' ( RULE_STRING ) ( ':' ( RULE_STRING ) )? ')' ( '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']' )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:235:2: (lv_measure_0= ruleMeasure )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:238:6: lv_measure_0= ruleMeasure
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMeasureMeasureEnumRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleMeasure_in_ruleConstraint457);
+            lv_measure_0=ruleMeasure();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "measure", lv_measure_0, "Measure", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,14,FOLLOW_14_in_ruleConstraint470); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getLeftParenthesisKeyword_1(), null); 
+                
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:260:1: ( RULE_STRING )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:263:3: RULE_STRING
+            {
+
+            			if (current==null) {
+            	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+                    
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleConstraint492); 
+
+            		createLeafNode(grammarAccess.getConstraintAccess().getAgentSAgentCrossReference_2_0(), "agent"); 
+            	
+
+            }
+
+            match(input,15,FOLLOW_15_in_ruleConstraint504); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getColonKeyword_3(), null); 
+                
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:280:1: ( RULE_STRING )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:283:3: RULE_STRING
+            {
+
+            			if (current==null) {
+            	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+                    
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleConstraint526); 
+
+            		createLeafNode(grammarAccess.getConstraintAccess().getAttributeSAttributeCrossReference_4_0(), "attribute"); 
+            	
+
+            }
+
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:296:2: ( ':' ( RULE_STRING ) )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==15) ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:296:3: ':' ( RULE_STRING )
+                    {
+                    match(input,15,FOLLOW_15_in_ruleConstraint539); 
+
+                            createLeafNode(grammarAccess.getConstraintAccess().getColonKeyword_5_0(), null); 
+                        
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:300:1: ( RULE_STRING )
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:303:3: RULE_STRING
+                    {
+
+                    			if (current==null) {
+                    	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                            
+                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleConstraint561); 
+
+                    		createLeafNode(grammarAccess.getConstraintAccess().getQualifierSStateValueCrossReference_5_1_0(), "qualifier"); 
+                    	
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,16,FOLLOW_16_in_ruleConstraint575); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getRightParenthesisKeyword_6(), null); 
+                
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:320:1: ( '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']' )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:320:2: '=' '[' (lv_minValue_10= ( ruleIntValue | ruleRealValue ) ) ',' (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) ) ']'
+            {
+            match(input,17,FOLLOW_17_in_ruleConstraint585); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getEqualsSignKeyword_7_0(), null); 
+                
+            match(input,18,FOLLOW_18_in_ruleConstraint594); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getLeftSquareBracketKeyword_7_1(), null); 
+                
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:328:1: (lv_minValue_10= ( ruleIntValue | ruleRealValue ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:330:6: lv_minValue_10= ( ruleIntValue | ruleRealValue )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:330:21: ( ruleIntValue | ruleRealValue )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==RULE_INT) ) {
+                alt6=1;
+            }
+            else if ( (LA6_0==RULE_REAL) ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("330:21: ( ruleIntValue | ruleRealValue )", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:330:23: ruleIntValue
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMinValueIntValueParserRuleCall_7_2_0_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleIntValue_in_ruleConstraint620);
+                    ruleIntValue();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:337:7: ruleRealValue
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMinValueRealValueParserRuleCall_7_2_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleRealValue_in_ruleConstraint634);
+                    ruleRealValue();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "minValue", lv_minValue_10, null, lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            match(input,19,FOLLOW_19_in_ruleConstraint652); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getCommaKeyword_7_3(), null); 
+                
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:362:1: (lv_maxValue_12= ( ruleIntValue | ruleRealValue ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:364:6: lv_maxValue_12= ( ruleIntValue | ruleRealValue )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:364:21: ( ruleIntValue | ruleRealValue )
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==RULE_INT) ) {
+                alt7=1;
+            }
+            else if ( (LA7_0==RULE_REAL) ) {
+                alt7=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("364:21: ( ruleIntValue | ruleRealValue )", 7, 0, input);
+
+                throw nvae;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:364:23: ruleIntValue
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMaxValueIntValueParserRuleCall_7_4_0_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleIntValue_in_ruleConstraint678);
+                    ruleIntValue();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:371:7: ruleRealValue
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getMaxValueRealValueParserRuleCall_7_4_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleRealValue_in_ruleConstraint692);
+                    ruleRealValue();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "maxValue", lv_maxValue_12, null, lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            match(input,20,FOLLOW_20_in_ruleConstraint710); 
+
+                    createLeafNode(grammarAccess.getConstraintAccess().getRightSquareBracketKeyword_7_5(), null); 
+                
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleConstraint
+
+
+    // $ANTLR start entryRuleIntValue
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:403:1: entryRuleIntValue returns [EObject current=null] : iv_ruleIntValue= ruleIntValue EOF ;
+    public final EObject entryRuleIntValue() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleIntValue = null;
+
+
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:403:50: (iv_ruleIntValue= ruleIntValue EOF )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:404:2: iv_ruleIntValue= ruleIntValue EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getIntValueRule(), currentNode); 
+            pushFollow(FOLLOW_ruleIntValue_in_entryRuleIntValue744);
+            iv_ruleIntValue=ruleIntValue();
+            _fsp--;
+
+             current =iv_ruleIntValue; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleIntValue754); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleIntValue
+
+
+    // $ANTLR start ruleIntValue
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:411:1: ruleIntValue returns [EObject current=null] : (lv_value_0= RULE_INT ) ;
+    public final EObject ruleIntValue() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_value_0=null;
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:416:6: ( (lv_value_0= RULE_INT ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:417:1: (lv_value_0= RULE_INT )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:417:1: (lv_value_0= RULE_INT )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:419:6: lv_value_0= RULE_INT
+            {
+            lv_value_0=(Token)input.LT(1);
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleIntValue800); 
+
+            		createLeafNode(grammarAccess.getIntValueAccess().getValueINTTerminalRuleCall_0(), "value"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getIntValueRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "value", lv_value_0, "INT", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleIntValue
+
+
+    // $ANTLR start entryRuleRealValue
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:444:1: entryRuleRealValue returns [EObject current=null] : iv_ruleRealValue= ruleRealValue EOF ;
+    public final EObject entryRuleRealValue() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRealValue = null;
+
+
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:444:51: (iv_ruleRealValue= ruleRealValue EOF )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:445:2: iv_ruleRealValue= ruleRealValue EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getRealValueRule(), currentNode); 
+            pushFollow(FOLLOW_ruleRealValue_in_entryRuleRealValue840);
+            iv_ruleRealValue=ruleRealValue();
+            _fsp--;
+
+             current =iv_ruleRealValue; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRealValue850); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleRealValue
+
+
+    // $ANTLR start ruleRealValue
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:452:1: ruleRealValue returns [EObject current=null] : (lv_value_0= RULE_REAL ) ;
+    public final EObject ruleRealValue() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_value_0=null;
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:457:6: ( (lv_value_0= RULE_REAL ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:458:1: (lv_value_0= RULE_REAL )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:458:1: (lv_value_0= RULE_REAL )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:460:6: lv_value_0= RULE_REAL
+            {
+            lv_value_0=(Token)input.LT(1);
+            match(input,RULE_REAL,FOLLOW_RULE_REAL_in_ruleRealValue896); 
+
+            		createLeafNode(grammarAccess.getRealValueAccess().getValueREALTerminalRuleCall_0(), "value"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getRealValueRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "value", lv_value_0, "REAL", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleRealValue
+
+
+    // $ANTLR start ruleMeasure
+    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:485:1: ruleMeasure returns [Enumerator current=null] : ( ( 'Count' ) | ( 'Average' ) | ( 'Sum' ) | ( 'Minimum' ) | ( 'Maximum' ) ) ;
+    public final Enumerator ruleMeasure() throws RecognitionException {
+        Enumerator current = null;
+
+         setCurrentLookahead(); resetLookahead(); 
+        try {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:489:6: ( ( ( 'Count' ) | ( 'Average' ) | ( 'Sum' ) | ( 'Minimum' ) | ( 'Maximum' ) ) )
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:490:1: ( ( 'Count' ) | ( 'Average' ) | ( 'Sum' ) | ( 'Minimum' ) | ( 'Maximum' ) )
+            {
+            // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:490:1: ( ( 'Count' ) | ( 'Average' ) | ( 'Sum' ) | ( 'Minimum' ) | ( 'Maximum' ) )
+            int alt8=5;
+            switch ( input.LA(1) ) {
+            case 21:
+                {
+                alt8=1;
+                }
+                break;
+            case 22:
+                {
+                alt8=2;
+                }
+                break;
+            case 23:
+                {
+                alt8=3;
+                }
+                break;
+            case 24:
+                {
+                alt8=4;
+                }
+                break;
+            case 25:
+                {
+                alt8=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("490:1: ( ( 'Count' ) | ( 'Average' ) | ( 'Sum' ) | ( 'Minimum' ) | ( 'Maximum' ) )", 8, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt8) {
+                case 1 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:490:2: ( 'Count' )
+                    {
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:490:2: ( 'Count' )
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:490:4: 'Count'
+                    {
+                    match(input,21,FOLLOW_21_in_ruleMeasure950); 
+
+                            current = grammarAccess.getMeasureAccess().getCOUNTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getMeasureAccess().getCOUNTEnumLiteralDeclaration_0(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:496:6: ( 'Average' )
+                    {
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:496:6: ( 'Average' )
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:496:8: 'Average'
+                    {
+                    match(input,22,FOLLOW_22_in_ruleMeasure965); 
+
+                            current = grammarAccess.getMeasureAccess().getAVERAGEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getMeasureAccess().getAVERAGEEnumLiteralDeclaration_1(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:502:6: ( 'Sum' )
+                    {
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:502:6: ( 'Sum' )
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:502:8: 'Sum'
+                    {
+                    match(input,23,FOLLOW_23_in_ruleMeasure980); 
+
+                            current = grammarAccess.getMeasureAccess().getSUMEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getMeasureAccess().getSUMEnumLiteralDeclaration_2(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:508:6: ( 'Minimum' )
+                    {
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:508:6: ( 'Minimum' )
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:508:8: 'Minimum'
+                    {
+                    match(input,24,FOLLOW_24_in_ruleMeasure995); 
+
+                            current = grammarAccess.getMeasureAccess().getMINIMUMEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getMeasureAccess().getMINIMUMEnumLiteralDeclaration_3(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:514:6: ( 'Maximum' )
+                    {
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:514:6: ( 'Maximum' )
+                    // ../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g:514:8: 'Maximum'
+                    {
+                    match(input,25,FOLLOW_25_in_ruleMeasure1010); 
+
+                            current = grammarAccess.getMeasureAccess().getMAXIMUMEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getMeasureAccess().getMAXIMUMEnumLiteralDeclaration_4(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleMeasure
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel73 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleModel83 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleModel130 = new BitSet(new long[]{0x0000000003E02022L});
+    public static final BitSet FOLLOW_RULE_PLAIN_STRING_in_ruleModel161 = new BitSet(new long[]{0x0000000003E02002L});
+    public static final BitSet FOLLOW_ruleTests_in_ruleModel204 = new BitSet(new long[]{0x0000000003E00002L});
+    public static final BitSet FOLLOW_ruleConstraint_in_ruleModel243 = new BitSet(new long[]{0x0000000003E00002L});
+    public static final BitSet FOLLOW_ruleTests_in_entryRuleTests281 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTests291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_ruleTests325 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleTests347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleConstraint_in_entryRuleConstraint388 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleConstraint398 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMeasure_in_ruleConstraint457 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_14_in_ruleConstraint470 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleConstraint492 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleConstraint504 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleConstraint526 = new BitSet(new long[]{0x0000000000018000L});
+    public static final BitSet FOLLOW_15_in_ruleConstraint539 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleConstraint561 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_16_in_ruleConstraint575 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_17_in_ruleConstraint585 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_18_in_ruleConstraint594 = new BitSet(new long[]{0x00000000000000C0L});
+    public static final BitSet FOLLOW_ruleIntValue_in_ruleConstraint620 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_ruleRealValue_in_ruleConstraint634 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_ruleConstraint652 = new BitSet(new long[]{0x00000000000000C0L});
+    public static final BitSet FOLLOW_ruleIntValue_in_ruleConstraint678 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_ruleRealValue_in_ruleConstraint692 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_20_in_ruleConstraint710 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleIntValue_in_entryRuleIntValue744 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleIntValue754 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleIntValue800 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRealValue_in_entryRuleRealValue840 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRealValue850 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_REAL_in_ruleRealValue896 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_ruleMeasure950 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_ruleMeasure965 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_ruleMeasure980 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_24_in_ruleMeasure995 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_ruleMeasure1010 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest__.g b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest__.g
new file mode 100644
index 0000000..959ee6e
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest__.g
@@ -0,0 +1,51 @@
+lexer grammar InternalATest;
+@header {
+package org.eclipse.amp.amf.testing.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+}
+
+T13 : 'TESTS' ;
+T14 : '(' ;
+T15 : ':' ;
+T16 : ')' ;
+T17 : '=' ;
+T18 : '[' ;
+T19 : ',' ;
+T20 : ']' ;
+T21 : 'Count' ;
+T22 : 'Average' ;
+T23 : 'Sum' ;
+T24 : 'Minimum' ;
+T25 : 'Maximum' ;
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 523
+RULE_REAL : '-'? RULE_INT ('.' RULE_INT)?;
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 525
+RULE_PLAIN_STRING : '\u00AB' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\u00AB'|'\u00BB')))* '\u00BB';
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 527
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 529
+RULE_INT : ('0'..'9')+;
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 531
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 533
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 535
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 537
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+// $ANTLR src "../org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/parser/antlr/internal/InternalATest.g" 539
+RULE_ANY_OTHER : .;
+
+
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/services/ATestGrammarAccess.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/services/ATestGrammarAccess.java
new file mode 100644
index 0000000..8d0c9c5
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/services/ATestGrammarAccess.java
@@ -0,0 +1,452 @@
+/*
+* generated by Xtext
+*/
+
+package org.eclipse.amp.amf.testing.services;
+
+import com.google.inject.Singleton;
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.*;
+
+import org.eclipse.xtext.service.GrammarProvider;
+
+import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
+
+@Singleton
+public class ATestGrammarAccess implements IGrammarAccess {
+	
+	
+	public class ModelElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Model");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cNameSTRINGTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
+		private final Assignment cDescriptionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cDescriptionPLAIN_STRINGTerminalRuleCall_1_0 = (RuleCall)cDescriptionAssignment_1.eContents().get(0);
+		private final Assignment cTestsAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cTestsTestsParserRuleCall_2_0 = (RuleCall)cTestsAssignment_2.eContents().get(0);
+		private final Assignment cContraintsAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cContraintsConstraintParserRuleCall_3_0 = (RuleCall)cContraintsAssignment_3.eContents().get(0);
+		
+		//Model:
+		//  name=STRING? description=PLAIN_STRING? tests=Tests? contraints+=Constraint*;
+		public ParserRule getRule() { return rule; }
+
+		//name=STRING? description=PLAIN_STRING? tests=Tests? contraints+=Constraint*
+		public Group getGroup() { return cGroup; }
+
+		//name=STRING?
+		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
+
+		//STRING
+		public RuleCall getNameSTRINGTerminalRuleCall_0_0() { return cNameSTRINGTerminalRuleCall_0_0; }
+
+		//description=PLAIN_STRING?
+		public Assignment getDescriptionAssignment_1() { return cDescriptionAssignment_1; }
+
+		//PLAIN_STRING
+		public RuleCall getDescriptionPLAIN_STRINGTerminalRuleCall_1_0() { return cDescriptionPLAIN_STRINGTerminalRuleCall_1_0; }
+
+		//tests=Tests?
+		public Assignment getTestsAssignment_2() { return cTestsAssignment_2; }
+
+		//Tests
+		public RuleCall getTestsTestsParserRuleCall_2_0() { return cTestsTestsParserRuleCall_2_0; }
+
+		//contraints+=Constraint*
+		public Assignment getContraintsAssignment_3() { return cContraintsAssignment_3; }
+
+		//Constraint
+		public RuleCall getContraintsConstraintParserRuleCall_3_0() { return cContraintsConstraintParserRuleCall_3_0; }
+	}
+
+	public class TestsElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Tests");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cTESTSKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cImportURIAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cImportURISTRINGTerminalRuleCall_1_0 = (RuleCall)cImportURIAssignment_1.eContents().get(0);
+		
+		//Tests:
+		//  "TESTS" importURI=STRING;
+		public ParserRule getRule() { return rule; }
+
+		//"TESTS" importURI=STRING
+		public Group getGroup() { return cGroup; }
+
+		//"TESTS"
+		public Keyword getTESTSKeyword_0() { return cTESTSKeyword_0; }
+
+		//importURI=STRING
+		public Assignment getImportURIAssignment_1() { return cImportURIAssignment_1; }
+
+		//STRING
+		public RuleCall getImportURISTRINGTerminalRuleCall_1_0() { return cImportURISTRINGTerminalRuleCall_1_0; }
+	}
+
+	public class ConstraintElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Constraint");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cMeasureAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cMeasureMeasureEnumRuleCall_0_0 = (RuleCall)cMeasureAssignment_0.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cAgentAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final CrossReference cAgentSAgentCrossReference_2_0 = (CrossReference)cAgentAssignment_2.eContents().get(0);
+		private final RuleCall cAgentSAgentSTRINGTerminalRuleCall_2_0_1 = (RuleCall)cAgentSAgentCrossReference_2_0.eContents().get(1);
+		private final Keyword cColonKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cAttributeAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cAttributeSAttributeCrossReference_4_0 = (CrossReference)cAttributeAssignment_4.eContents().get(0);
+		private final RuleCall cAttributeSAttributeSTRINGTerminalRuleCall_4_0_1 = (RuleCall)cAttributeSAttributeCrossReference_4_0.eContents().get(1);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cColonKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Assignment cQualifierAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
+		private final CrossReference cQualifierSStateValueCrossReference_5_1_0 = (CrossReference)cQualifierAssignment_5_1.eContents().get(0);
+		private final RuleCall cQualifierSStateValueSTRINGTerminalRuleCall_5_1_0_1 = (RuleCall)cQualifierSStateValueCrossReference_5_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
+		private final Keyword cEqualsSignKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
+		private final Keyword cLeftSquareBracketKeyword_7_1 = (Keyword)cGroup_7.eContents().get(1);
+		private final Assignment cMinValueAssignment_7_2 = (Assignment)cGroup_7.eContents().get(2);
+		private final Alternatives cMinValueAlternatives_7_2_0 = (Alternatives)cMinValueAssignment_7_2.eContents().get(0);
+		private final RuleCall cMinValueIntValueParserRuleCall_7_2_0_0 = (RuleCall)cMinValueAlternatives_7_2_0.eContents().get(0);
+		private final RuleCall cMinValueRealValueParserRuleCall_7_2_0_1 = (RuleCall)cMinValueAlternatives_7_2_0.eContents().get(1);
+		private final Keyword cCommaKeyword_7_3 = (Keyword)cGroup_7.eContents().get(3);
+		private final Assignment cMaxValueAssignment_7_4 = (Assignment)cGroup_7.eContents().get(4);
+		private final Alternatives cMaxValueAlternatives_7_4_0 = (Alternatives)cMaxValueAssignment_7_4.eContents().get(0);
+		private final RuleCall cMaxValueIntValueParserRuleCall_7_4_0_0 = (RuleCall)cMaxValueAlternatives_7_4_0.eContents().get(0);
+		private final RuleCall cMaxValueRealValueParserRuleCall_7_4_0_1 = (RuleCall)cMaxValueAlternatives_7_4_0.eContents().get(1);
+		private final Keyword cRightSquareBracketKeyword_7_5 = (Keyword)cGroup_7.eContents().get(5);
+		
+		//Constraint:
+		//  measure=Measure "(" agent=[SAgent|STRING] ":" attribute=[SAttribute|STRING] (":"
+		//  qualifier=[SStateValue|STRING])? ")" ("=" "[" minValue=( IntValue | RealValue ) ","
+		//  maxValue=( IntValue | RealValue ) "]");
+		public ParserRule getRule() { return rule; }
+
+		//measure=Measure "(" agent=[SAgent|STRING] ":" attribute=[SAttribute|STRING] (":"
+		//qualifier=[SStateValue|STRING])? ")" ("=" "[" minValue=( IntValue | RealValue ) ","
+		//maxValue=( IntValue | RealValue ) "]")
+		public Group getGroup() { return cGroup; }
+
+		//measure=Measure
+		public Assignment getMeasureAssignment_0() { return cMeasureAssignment_0; }
+
+		//Measure
+		public RuleCall getMeasureMeasureEnumRuleCall_0_0() { return cMeasureMeasureEnumRuleCall_0_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
+
+		//agent=[SAgent|STRING]
+		public Assignment getAgentAssignment_2() { return cAgentAssignment_2; }
+
+		//[SAgent|STRING]
+		public CrossReference getAgentSAgentCrossReference_2_0() { return cAgentSAgentCrossReference_2_0; }
+
+		//STRING
+		public RuleCall getAgentSAgentSTRINGTerminalRuleCall_2_0_1() { return cAgentSAgentSTRINGTerminalRuleCall_2_0_1; }
+
+		//":"
+		public Keyword getColonKeyword_3() { return cColonKeyword_3; }
+
+		//attribute=[SAttribute|STRING]
+		public Assignment getAttributeAssignment_4() { return cAttributeAssignment_4; }
+
+		//[SAttribute|STRING]
+		public CrossReference getAttributeSAttributeCrossReference_4_0() { return cAttributeSAttributeCrossReference_4_0; }
+
+		//STRING
+		public RuleCall getAttributeSAttributeSTRINGTerminalRuleCall_4_0_1() { return cAttributeSAttributeSTRINGTerminalRuleCall_4_0_1; }
+
+		//(":" qualifier=[SStateValue|STRING])?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//":"
+		public Keyword getColonKeyword_5_0() { return cColonKeyword_5_0; }
+
+		//qualifier=[SStateValue|STRING]
+		public Assignment getQualifierAssignment_5_1() { return cQualifierAssignment_5_1; }
+
+		//[SStateValue|STRING]
+		public CrossReference getQualifierSStateValueCrossReference_5_1_0() { return cQualifierSStateValueCrossReference_5_1_0; }
+
+		//STRING
+		public RuleCall getQualifierSStateValueSTRINGTerminalRuleCall_5_1_0_1() { return cQualifierSStateValueSTRINGTerminalRuleCall_5_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_6() { return cRightParenthesisKeyword_6; }
+
+		//"=" "[" minValue=( IntValue | RealValue ) "," maxValue=( IntValue | RealValue ) "]"
+		public Group getGroup_7() { return cGroup_7; }
+
+		//"="
+		public Keyword getEqualsSignKeyword_7_0() { return cEqualsSignKeyword_7_0; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_7_1() { return cLeftSquareBracketKeyword_7_1; }
+
+		//minValue=( IntValue | RealValue )
+		public Assignment getMinValueAssignment_7_2() { return cMinValueAssignment_7_2; }
+
+		//IntValue|RealValue
+		public Alternatives getMinValueAlternatives_7_2_0() { return cMinValueAlternatives_7_2_0; }
+
+		//IntValue
+		public RuleCall getMinValueIntValueParserRuleCall_7_2_0_0() { return cMinValueIntValueParserRuleCall_7_2_0_0; }
+
+		//RealValue
+		public RuleCall getMinValueRealValueParserRuleCall_7_2_0_1() { return cMinValueRealValueParserRuleCall_7_2_0_1; }
+
+		//","
+		public Keyword getCommaKeyword_7_3() { return cCommaKeyword_7_3; }
+
+		//maxValue=( IntValue | RealValue )
+		public Assignment getMaxValueAssignment_7_4() { return cMaxValueAssignment_7_4; }
+
+		//IntValue|RealValue
+		public Alternatives getMaxValueAlternatives_7_4_0() { return cMaxValueAlternatives_7_4_0; }
+
+		//IntValue
+		public RuleCall getMaxValueIntValueParserRuleCall_7_4_0_0() { return cMaxValueIntValueParserRuleCall_7_4_0_0; }
+
+		//RealValue
+		public RuleCall getMaxValueRealValueParserRuleCall_7_4_0_1() { return cMaxValueRealValueParserRuleCall_7_4_0_1; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_7_5() { return cRightSquareBracketKeyword_7_5; }
+	}
+
+	public class IntValueElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IntValue");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueINTTerminalRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
+		
+		//IntValue:
+		//  value=INT;
+		public ParserRule getRule() { return rule; }
+
+		//value=INT
+		public Assignment getValueAssignment() { return cValueAssignment; }
+
+		//INT
+		public RuleCall getValueINTTerminalRuleCall_0() { return cValueINTTerminalRuleCall_0; }
+	}
+
+	public class RealValueElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RealValue");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueREALTerminalRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
+		
+		//RealValue:
+		//  value=REAL;
+		public ParserRule getRule() { return rule; }
+
+		//value=REAL
+		public Assignment getValueAssignment() { return cValueAssignment; }
+
+		//REAL
+		public RuleCall getValueREALTerminalRuleCall_0() { return cValueREALTerminalRuleCall_0; }
+	}
+	
+	
+	public class MeasureElements implements IEnumRuleAccess {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "Measure");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cCOUNTEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cCOUNTCountKeyword_0_0 = (Keyword)cCOUNTEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cAVERAGEEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cAVERAGEAverageKeyword_1_0 = (Keyword)cAVERAGEEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cSUMEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cSUMSumKeyword_2_0 = (Keyword)cSUMEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cMINIMUMEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cMINIMUMMinimumKeyword_3_0 = (Keyword)cMINIMUMEnumLiteralDeclaration_3.eContents().get(0);
+		private final EnumLiteralDeclaration cMAXIMUMEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
+		private final Keyword cMAXIMUMMaximumKeyword_4_0 = (Keyword)cMAXIMUMEnumLiteralDeclaration_4.eContents().get(0);
+		
+		//enum Measure:
+		//  COUNT="Count" | AVERAGE="Average" | SUM="Sum" | MINIMUM="Minimum" | MAXIMUM="Maximum";
+		public EnumRule getRule() { return rule; }
+
+		//COUNT="Count" | AVERAGE="Average" | SUM="Sum" | MINIMUM="Minimum" | MAXIMUM="Maximum"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//COUNT="Count"
+		public EnumLiteralDeclaration getCOUNTEnumLiteralDeclaration_0() { return cCOUNTEnumLiteralDeclaration_0; }
+
+		//"Count"
+		public Keyword getCOUNTCountKeyword_0_0() { return cCOUNTCountKeyword_0_0; }
+
+		//AVERAGE="Average"
+		public EnumLiteralDeclaration getAVERAGEEnumLiteralDeclaration_1() { return cAVERAGEEnumLiteralDeclaration_1; }
+
+		//"Average"
+		public Keyword getAVERAGEAverageKeyword_1_0() { return cAVERAGEAverageKeyword_1_0; }
+
+		//SUM="Sum"
+		public EnumLiteralDeclaration getSUMEnumLiteralDeclaration_2() { return cSUMEnumLiteralDeclaration_2; }
+
+		//"Sum"
+		public Keyword getSUMSumKeyword_2_0() { return cSUMSumKeyword_2_0; }
+
+		//MINIMUM="Minimum"
+		public EnumLiteralDeclaration getMINIMUMEnumLiteralDeclaration_3() { return cMINIMUMEnumLiteralDeclaration_3; }
+
+		//"Minimum"
+		public Keyword getMINIMUMMinimumKeyword_3_0() { return cMINIMUMMinimumKeyword_3_0; }
+
+		//MAXIMUM="Maximum"
+		public EnumLiteralDeclaration getMAXIMUMEnumLiteralDeclaration_4() { return cMAXIMUMEnumLiteralDeclaration_4; }
+
+		//"Maximum"
+		public Keyword getMAXIMUMMaximumKeyword_4_0() { return cMAXIMUMMaximumKeyword_4_0; }
+	}
+	
+	private ModelElements pModel;
+	private TestsElements pTests;
+	private ConstraintElements pConstraint;
+	private MeasureElements unknownRuleMeasure;
+	private IntValueElements pIntValue;
+	private RealValueElements pRealValue;
+	private TerminalRule tREAL;
+	private TerminalRule tPLAIN_STRING;
+	
+	private final GrammarProvider grammarProvider;
+
+	private TerminalsGrammarAccess gaTerminals;
+
+	@Inject
+	public ATestGrammarAccess(GrammarProvider grammarProvider,
+		TerminalsGrammarAccess gaTerminals) {
+		this.grammarProvider = grammarProvider;
+		this.gaTerminals = gaTerminals;
+	}
+	
+	public Grammar getGrammar() {	
+		return grammarProvider.getGrammar(this);
+	}
+	
+
+	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
+		return gaTerminals;
+	}
+
+	
+	//Model:
+	//  name=STRING? description=PLAIN_STRING? tests=Tests? contraints+=Constraint*;
+	public ModelElements getModelAccess() {
+		return (pModel != null) ? pModel : (pModel = new ModelElements());
+	}
+	
+	public ParserRule getModelRule() {
+		return getModelAccess().getRule();
+	}
+
+	//Tests:
+	//  "TESTS" importURI=STRING;
+	public TestsElements getTestsAccess() {
+		return (pTests != null) ? pTests : (pTests = new TestsElements());
+	}
+	
+	public ParserRule getTestsRule() {
+		return getTestsAccess().getRule();
+	}
+
+	//Constraint:
+	//  measure=Measure "(" agent=[SAgent|STRING] ":" attribute=[SAttribute|STRING] (":"
+	//  qualifier=[SStateValue|STRING])? ")" ("=" "[" minValue=( IntValue | RealValue ) ","
+	//  maxValue=( IntValue | RealValue ) "]");
+	public ConstraintElements getConstraintAccess() {
+		return (pConstraint != null) ? pConstraint : (pConstraint = new ConstraintElements());
+	}
+	
+	public ParserRule getConstraintRule() {
+		return getConstraintAccess().getRule();
+	}
+
+	//enum Measure:
+	//  COUNT="Count" | AVERAGE="Average" | SUM="Sum" | MINIMUM="Minimum" | MAXIMUM="Maximum";
+	public MeasureElements getMeasureAccess() {
+		return (unknownRuleMeasure != null) ? unknownRuleMeasure : (unknownRuleMeasure = new MeasureElements());
+	}
+	
+	public EnumRule getMeasureRule() {
+		return getMeasureAccess().getRule();
+	}
+
+	//IntValue:
+	//  value=INT;
+	public IntValueElements getIntValueAccess() {
+		return (pIntValue != null) ? pIntValue : (pIntValue = new IntValueElements());
+	}
+	
+	public ParserRule getIntValueRule() {
+		return getIntValueAccess().getRule();
+	}
+
+	//RealValue:
+	//  value=REAL;
+	public RealValueElements getRealValueAccess() {
+		return (pRealValue != null) ? pRealValue : (pRealValue = new RealValueElements());
+	}
+	
+	public ParserRule getRealValueRule() {
+		return getRealValueAccess().getRule();
+	}
+
+	//terminal REAL:
+	//  "-"? INT ("." INT)?;
+	public TerminalRule getREALRule() {
+		return (tREAL != null) ? tREAL : (tREAL = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "REAL"));
+	} 
+
+	//terminal PLAIN_STRING:
+	//  "\u00AB" ("\\" ("b" | "t" | "n" | "f" | "r" | "\"" | "\'" | "\\") | !("\\" | "\u00AB" | "\u00BB"))*
+	//  "\u00BB";
+	public TerminalRule getPLAIN_STRINGRule() {
+		return (tPLAIN_STRING != null) ? tPLAIN_STRING : (tPLAIN_STRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "PLAIN_STRING"));
+	} 
+
+	//terminal ID:
+	//  "^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
+	public TerminalRule getIDRule() {
+		return gaTerminals.getIDRule();
+	} 
+
+	//terminal INT returns ecore::EInt:
+	//  "0".."9"+;
+	public TerminalRule getINTRule() {
+		return gaTerminals.getINTRule();
+	} 
+
+	//terminal STRING:
+	//  "\"" ("\\" ("b" | "t" | "n" | "f" | "r" | "\"" | "\'" | "\\") | !("\\" | "\""))* "\"" | "\'" ("\\" ("b" |
+	//  "t" | "n" | "f" | "r" | "\"" | "\'" | "\\") | !("\\" | "\'"))* "\'";
+	public TerminalRule getSTRINGRule() {
+		return gaTerminals.getSTRINGRule();
+	} 
+
+	//terminal ML_COMMENT:
+	//  "/ *"->"* /";
+	public TerminalRule getML_COMMENTRule() {
+		return gaTerminals.getML_COMMENTRule();
+	} 
+
+	//terminal SL_COMMENT:
+	//  "//" !("\n" | "\r")* ("\r"? "\n")?;
+	public TerminalRule getSL_COMMENTRule() {
+		return gaTerminals.getSL_COMMENTRule();
+	} 
+
+	//terminal WS:
+	//  (" " | "\t" | "\r" | "\n")+;
+	public TerminalRule getWSRule() {
+		return gaTerminals.getWSRule();
+	} 
+
+	//terminal ANY_OTHER:
+	//  .;
+	public TerminalRule getANY_OTHERRule() {
+		return gaTerminals.getANY_OTHERRule();
+	} 
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/validation/AbstractATestJavaValidator.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/validation/AbstractATestJavaValidator.java
new file mode 100644
index 0000000..60381f5
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src-gen/org/eclipse/amp/amf/testing/validation/AbstractATestJavaValidator.java
@@ -0,0 +1,20 @@
+package org.eclipse.amp.amf.testing.validation;
+ 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
+import org.eclipse.xtext.validation.ComposedChecks;
+
+@ComposedChecks(validators= {org.eclipse.xtext.validation.ImportUriValidator.class})
+public class AbstractATestJavaValidator extends AbstractDeclarativeValidator {
+
+    @Override
+    protected List<? extends EPackage> getEPackages() {
+        List<EPackage> result = new ArrayList<EPackage>();
+        result.add(org.eclipse.amp.amf.testing.aTest.ATestPackage.eINSTANCE);
+        return result;
+    }
+
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/model/ares.ecore b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/model/ares.ecore
new file mode 100644
index 0000000..89de90b
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/model/ares.ecore
@@ -0,0 +1,36 @@
+<?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="ares"
+    nsURI="http://eclipse.org/amp/ares" nsPrefix="ares">
+  <eClassifiers xsi:type="ecore:EClass" name="Run">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="model" lowerBound="1" eType="ecore:EClass ../../../org.eclipse.amp.amf.acore/src/model/metaabm.ecore#//SContinuousSpace"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="testModel" lowerBound="1"
+        eType="ecore:EClass ../../src-gen/org/eclipse/amp/amf/testing/ATest.ecore#//Model"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterModel" eType="ecore:EClass ../../../org.eclipse.amp.amf.parameters/src-gen/org/eclipse/amp/amf/parameters/APar.ecore#//Model"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="result" eType="#//Result"
+        defaultValueLiteral=""/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+        eType="ecore:EClass ../../../org.eclipse.amp.amf.parameters/src-gen/org/eclipse/amp/amf/parameters/APar.ecore#//Parameter"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constraints" upperBound="-1"
+        eType="ecore:EClass ../../src-gen/org/eclipse/amp/amf/testing/ATest.ecore#//Constraint"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="started" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="finished" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Result">
+    <eLiterals name="Incomplete" value="1" literal="INCOMPLETE"/>
+    <eLiterals name="Success" value="2" literal="SUCCESS"/>
+    <eLiterals name="Failure" value="3" literal="FAILURE"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Failure">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constraint" eType="ecore:EClass ../../src-gen/org/eclipse/amp/amf/testing/ATest.ecore#//Constraint"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="issue" lowerBound="1" eType="#//Issue"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="actualValue" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Issue">
+    <eLiterals name="BelowRange" value="10" literal="BELOW_RANGE"/>
+    <eLiterals name="AboveRange" value="15" literal="ABOVE_RANGE"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/model/ares.genmodel b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/model/ares.genmodel
new file mode 100644
index 0000000..e35e053
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/model/ares.genmodel
@@ -0,0 +1,35 @@
+<?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.amp.amf.testing/src"
+    modelPluginID="org.eclipse.amp.amf.testing" modelName="Ares" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="6.0" copyrightFields="false" usedGenPackages="../../../org.eclipse.amp.amf.parameters/src-gen/org/eclipse/amp/amf/parameters/APar.genmodel#//aPar ../../src-gen/org/eclipse/amp/amf/testing/ATest.genmodel#//aTest ../../../org.eclipse.amp.amf.acore/src/model/metaabm.genmodel#//metaabm">
+  <foreignModel>ares.ecore</foreignModel>
+  <genPackages prefix="Ares" basePackage="org.eclipse.amp.amf.testing" disposableProviderFactory="true"
+      generateExampleClass="false" ecorePackage="ares.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="ares.ecore#//Result">
+      <genEnumLiterals ecoreEnumLiteral="ares.ecore#//Result/Incomplete"/>
+      <genEnumLiterals ecoreEnumLiteral="ares.ecore#//Result/Success"/>
+      <genEnumLiterals ecoreEnumLiteral="ares.ecore#//Result/Failure"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="ares.ecore#//Issue">
+      <genEnumLiterals ecoreEnumLiteral="ares.ecore#//Issue/BelowRange"/>
+      <genEnumLiterals ecoreEnumLiteral="ares.ecore#//Issue/AboveRange"/>
+    </genEnums>
+    <genClasses ecoreClass="ares.ecore#//Run">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ares.ecore#//Run/model"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ares.ecore#//Run/testModel"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ares.ecore#//Run/parameterModel"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ares.ecore#//Run/result"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ares.ecore#//Run/parameters"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ares.ecore#//Run/constraints"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ares.ecore#//Run/started"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ares.ecore#//Run/finished"/>
+    </genClasses>
+    <genClasses ecoreClass="ares.ecore#//Failure">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference ares.ecore#//Failure/constraint"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ares.ecore#//Failure/issue"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ares.ecore#//Failure/actualValue"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATest.xtext b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATest.xtext
new file mode 100644
index 0000000..6285313
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATest.xtext
@@ -0,0 +1,32 @@
+grammar org.eclipse.amp.amf.testing.ATest with org.eclipse.xtext.common.Terminals
+
+generate aTest "http://www.eclipse.org/amp/amf/testing/ATest"
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+import 'platform:/resource/org.eclipse.amp.amf.acore/src/model/metaabm.ecore'
+
+Model :
+	(name=STRING)?
+	(description=PLAIN_STRING)?
+	(tests=Tests)?
+	(contraints+=Constraint)*;
+
+Tests :
+	'TESTS' importURI=STRING;
+
+Constraint :
+	measure=Measure "(" agent=[SAgent|STRING]":"attribute=[SAttribute|STRING] (":" qualifier=[SStateValue|STRING])? ")" ("=" "[" minValue=(IntValue|RealValue) "," maxValue=(IntValue|RealValue) "]");
+
+enum Measure :
+	COUNT = "Count" | AVERAGE = "Average" | SUM = "Sum" | MINIMUM = "Minimum" | MAXIMUM = "Maximum";
+
+IntValue :
+	value=INT;
+
+RealValue :
+	value=REAL;
+
+terminal REAL :
+	"-"? INT ("." INT)?;
+	
+terminal PLAIN_STRING	: 
+  '«'( '\\' ('b'|'t'|'n'|'f'|'r'|'"'|"'"|'\\') | !('\\'|'«'|'»') )*'»';
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestInterpreter.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestInterpreter.java
new file mode 100644
index 0000000..ea13c21
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestInterpreter.java
@@ -0,0 +1,105 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

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

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+

+package org.eclipse.amp.amf.testing;

+

+import org.eclipse.amp.amf.parameters.AParInterpreter;

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+import org.eclipse.amp.amf.testing.aTest.IntValue;

+import org.eclipse.amp.amf.testing.aTest.Model;

+import org.eclipse.amp.amf.testing.aTest.RealValue;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IWorkspace;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.Path;

+import org.eclipse.core.runtime.Status;

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

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

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.ui.statushandlers.StatusManager;

+

+/**

+ * 

+ * @author mparker

+ * 

+ */

+public class ATestInterpreter {

+

+    Model atestModel;

+

+    AParInterpreter aparInterpreter;

+

+    private IResource modelResource;

+

+    public ATestInterpreter(IResource modelResource) {

+        this.modelResource = modelResource;

+        ResourceSet resources = new ResourceSetImpl();

+        IPath filePath = ((IFile) modelResource).getFullPath();

+        URI atestLoc = URI.createPlatformResourceURI(filePath.toString(), true);

+        Resource atest = resources.getResource(atestLoc, true);

+        atestModel = (Model) atest.getContents().get(0);

+

+        URI aparLoc = atestLoc.trimFileExtension().appendFileExtension("apar");

+        Resource aparAnalog = resources.getResource(aparLoc, true);

+        if (aparAnalog == null) {

+            StatusManager.getManager().handle(

+                                              new Status(Status.WARNING, "org.eclipse.amp.amf.parameters",

+                                              "Couldn't locate apar resource."));

+        } else {

+            IWorkspace workspace = ResourcesPlugin.getWorkspace();

+            aparInterpreter = new AParInterpreter(workspace.getRoot()

+                                                  .getFile(new Path(aparLoc.toPlatformString(true))));

+        }

+    }

+

+    public Model getAtestModel() {

+        return atestModel;

+    }

+

+    public AParInterpreter getAparInterpreter() {

+        return aparInterpreter;

+    }

+

+    public IResource getResource() {

+        return modelResource;

+    }

+

+    public String getConstraintString() {

+        String constraintString = "";

+        for (Constraint constraint : atestModel.getContraints()) {

+            constraintString += constraint.getAttribute().getID() + "\t"

+            + valueOf(constraint.getMinValue()) + "\t"

+            + valueOf(constraint.getMinValue()) + "\r";

+        }

+        return constraintString;

+    }

+

+    public double valueOf(EObject constraintValue) {

+        if (constraintValue instanceof IntValue) {

+            return ((IntValue) constraintValue).getValue();

+        } else if (constraintValue instanceof RealValue) {

+            return Double.valueOf(((RealValue) constraintValue).getValue());

+        } else if (constraintValue == null) {

+            return Double.NaN;

+        }

+        throw new RuntimeException("Unexpected value for constraint.");

+    }

+

+}

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestResourceFactory.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestResourceFactory.java
new file mode 100644
index 0000000..3bfeb68
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestResourceFactory.java
@@ -0,0 +1,54 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

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

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+

+package org.eclipse.amp.amf.testing;

+

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

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.xtext.resource.XtextResource;

+import org.eclipse.xtext.resource.XtextResourceFactory;

+

+import com.google.inject.Inject;

+import com.google.inject.Provider;

+

+/**

+ * 

+ * @author mparker

+ *

+ */

+public class ATestResourceFactory extends XtextResourceFactory {

+

+    /**

+     * @param resourceProvider

+     */

+    @Inject

+    public ATestResourceFactory(Provider<XtextResource> resourceProvider) {

+        super(resourceProvider);

+        XtextResource xtextResource = resourceProvider.get();

+        URI testFileURI = xtextResource.getURI();

+        testFileURI.trimFileExtension().appendFileExtension("apar");

+        resourceProvider.get().getResourceSet().getResource(testFileURI, true);

+    }

+

+    /**

+     * @param uri

+     * @return

+     * @see org.eclipse.xtext.resource.XtextResourceFactory#createResource(org.eclipse.emf.common.util.URI)

+     */

+    public Resource createResource(URI uri) {

+        return super.createResource(uri);

+    }

+}

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestRuntimeModule.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestRuntimeModule.java
new file mode 100644
index 0000000..1ac4f5d
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ATestRuntimeModule.java
@@ -0,0 +1,17 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.amp.amf.testing;
+
+import org.eclipse.amp.amf.parameters.scoping.AParImportResolver;
+import org.eclipse.xtext.scoping.impl.ImportUriResolver;
+
+/**
+ * Use this class to register components to be used within the IDE.
+ */
+public class ATestRuntimeModule extends org.eclipse.amp.amf.testing.AbstractATestRuntimeModule {
+
+    public Class<? extends ImportUriResolver> bindImportUriResolver() {
+        return AParImportResolver.class;
+    }
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/GenerateATest.mwe b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/GenerateATest.mwe
new file mode 100644
index 0000000..46555ce
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/GenerateATest.mwe
@@ -0,0 +1,77 @@
+<workflow>
+	<property file="org/eclipse/amp/amf/testing/GenerateATest.properties"/>
+	
+	<property name="runtimeProject" value="../${projectName}"/>
+	
+	<bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" platformUri="${runtimeProject}/..">
+  		<registerGeneratedEPackage value="org.metaabm.MetaABMPackage"/>
+  		<registerGeneratedEPackage value="org.metaabm.act.MetaABMActPackage"/>
+  		<registerGeneratedEPackage value="org.metaabm.function.MetaABMFunctionPackage"/>
+	</bean>
+	
+	<bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" platformUri="${runtimeProject}/.."/>
+	
+	<component class="org.eclipse.emf.mwe.utils.DirectoryCleaner" directory="${runtimeProject}/src-gen"/>
+	<component class="org.eclipse.emf.mwe.utils.DirectoryCleaner" directory="${runtimeProject}.ui/src-gen"/>
+	
+	<component class="org.eclipse.xtext.generator.Generator">
+		<pathRtProject value="${runtimeProject}"/>
+		<pathUiProject value="${runtimeProject}.ui"/>
+		<projectNameRt value="${projectName}"/>
+		<projectNameUi value="${projectName}.ui"/>
+		
+		<language uri="${grammarURI}" fileExtensions="${file.extensions}">
+			<!-- Java API to access grammar elements (required by several other fragments) -->
+			<fragment class="org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment"/>
+			
+			<!-- generates Java API for the generated EPackages -->
+			<fragment class="org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment" genModels="platform:/resource/org.eclipse.amp.amf.acore/src/model/metaabm.genmodel"/>
+			
+			<!-- the serialization component -->
+			<fragment class="org.eclipse.xtext.generator.parseTreeConstructor.ParseTreeConstructorFragment"/>
+			
+			<!-- a custom ResourceFactory for use with EMF -->
+			<fragment class="org.eclipse.xtext.generator.resourceFactory.ResourceFactoryFragment" 
+				fileExtensions="${file.extensions}"/>
+				
+			<!-- the following fragment tries to use the Antlr Generator fragment which can be installed via update manager from http://download.itemis.com/updates/ -->
+			<fragment class="org.eclipse.xtext.generator.AntlrDelegatingFragment" />
+			
+			<!-- If you don't want to use the Antlr fragment for some reason, remove the antlr fragment and uncomment the packrat parser fragment below.
+			<fragment class="org.eclipse.xtext.generator.parser.PackratParserFragment"/>
+			 -->
+	
+			
+			<!-- java-based API for validation -->
+			<fragment class="org.eclipse.xtext.generator.validation.JavaValidatorFragment">
+                <composedCheck value="org.eclipse.xtext.validation.ImportUriValidator"/>
+            </fragment>
+			
+            
+			<!-- scoping API -->
+			<fragment class="org.eclipse.xtext.generator.scoping.JavaScopingFragment"/>
+			
+			<!-- formatter API -->
+			<fragment class="org.eclipse.xtext.generator.formatting.FormatterFragment"/>
+
+			<!-- labeling API -->
+			<fragment class="org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment"/>
+
+			<!-- outline API -->
+			<fragment class="org.eclipse.xtext.ui.generator.outline.TransformerFragment"/>
+			<fragment class="org.eclipse.xtext.ui.generator.outline.OutlineNodeAdapterFactoryFragment"/>
+
+			
+			<!-- java-based API for content assistance -->
+			<fragment class="org.eclipse.xtext.ui.generator.contentAssist.JavaBasedContentAssistFragment"/>
+			<!-- the following fragment tries to use the Antlr based content assist fragment which can be downloaded from http://www.itemis.com 
+			     and will be ignored if it's not available. -->
+			<fragment class="org.eclipse.xtext.generator.DelegatingGeneratorFragment" 
+				delegate="de.itemis.xtext.antlr.XtextAntlrUiGeneratorFragment"
+				message="You are generating without ANTLR. It is highly recommended to download and use the plugin 'de.itemis.xtext.antlr' \n\t using the update site http://download.itemis.com/updates/.">
+			</fragment>
+			<!-- <fragment class="de.itemis.xtext.antlr.XtextAntlrUiGeneratorFragment"/> --> 
+			
+		</language>
+	</component>
+</workflow>
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/GenerateATest.properties b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/GenerateATest.properties
new file mode 100644
index 0000000..3dc9e26
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/GenerateATest.properties
@@ -0,0 +1,3 @@
+grammarURI=classpath:/org/eclipse/amp/amf/testing/ATest.xtext
+file.extensions=atest
+projectName=org.eclipse.amp.amf.testing
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/AresFactory.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/AresFactory.java
new file mode 100644
index 0000000..12763d7
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/AresFactory.java
@@ -0,0 +1,55 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: AresFactory.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares;

+

+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.amp.amf.testing.ares.AresPackage

+ * @generated

+ */

+public interface AresFactory extends EFactory {

+    /**

+     * The singleton instance of the factory.

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

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

+     * @generated

+     */

+    AresFactory eINSTANCE = org.eclipse.amp.amf.testing.ares.impl.AresFactoryImpl.init();

+

+    /**

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

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

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

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

+     * @generated

+     */

+    Run createRun();

+

+    /**

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

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

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

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

+     * @generated

+     */

+    Failure createFailure();

+

+    /**

+     * Returns the package supported by this factory.

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

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

+     * @return the package supported by this factory.

+     * @generated

+     */

+    AresPackage getAresPackage();

+

+} //AresFactory

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/AresPackage.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/AresPackage.java
new file mode 100644
index 0000000..18af8e6
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/AresPackage.java
@@ -0,0 +1,534 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: AresPackage.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares;

+

+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 enum,</li>

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

+ * </ul>

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

+ * @see org.eclipse.amp.amf.testing.ares.AresFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface AresPackage extends EPackage {

+    /**

+     * The package name.

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

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

+     * @generated

+     */

+    String eNAME = "ares";

+

+    /**

+     * The package namespace URI.

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

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

+     * @generated

+     */

+    String eNS_URI = "http://eclipse.org/amp/ares";

+

+    /**

+     * The package namespace name.

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

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

+     * @generated

+     */

+    String eNS_PREFIX = "ares";

+

+    /**

+     * The singleton instance of the package.

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

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

+     * @generated

+     */

+    AresPackage eINSTANCE = org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl.init();

+

+    /**

+     * The meta object id for the '{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl <em>Run</em>}' class.

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

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

+     * @see org.eclipse.amp.amf.testing.ares.impl.RunImpl

+     * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getRun()

+     * @generated

+     */

+    int RUN = 0;

+

+    /**

+     * The feature id for the '<em><b>Model</b></em>' reference.

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__MODEL = 0;

+

+    /**

+     * The feature id for the '<em><b>Test Model</b></em>' reference.

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__TEST_MODEL = 1;

+

+    /**

+     * The feature id for the '<em><b>Parameter Model</b></em>' reference.

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__PARAMETER_MODEL = 2;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__RESULT = 3;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__PARAMETERS = 4;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__CONSTRAINTS = 5;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__STARTED = 6;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN__FINISHED = 7;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int RUN_FEATURE_COUNT = 8;

+

+    /**

+     * The meta object id for the '{@link org.eclipse.amp.amf.testing.ares.impl.FailureImpl <em>Failure</em>}' class.

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

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

+     * @see org.eclipse.amp.amf.testing.ares.impl.FailureImpl

+     * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getFailure()

+     * @generated

+     */

+    int FAILURE = 1;

+

+    /**

+     * The feature id for the '<em><b>Constraint</b></em>' reference.

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

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

+     * @generated

+     * @ordered

+     */

+    int FAILURE__CONSTRAINT = 0;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int FAILURE__ISSUE = 1;

+

+    /**

+     * The feature id for the '<em><b>Actual Value</b></em>' attribute.

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

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

+     * @generated

+     * @ordered

+     */

+    int FAILURE__ACTUAL_VALUE = 2;

+

+    /**

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

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

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

+     * @generated

+     * @ordered

+     */

+    int FAILURE_FEATURE_COUNT = 3;

+

+    /**

+     * The meta object id for the '{@link org.eclipse.amp.amf.testing.ares.Result <em>Result</em>}' enum.

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Result

+     * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getResult()

+     * @generated

+     */

+    int RESULT = 2;

+

+    /**

+     * The meta object id for the '{@link org.eclipse.amp.amf.testing.ares.Issue <em>Issue</em>}' enum.

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Issue

+     * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getIssue()

+     * @generated

+     */

+    int ISSUE = 3;

+

+

+    /**

+     * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.ares.Run <em>Run</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Run

+     * @generated

+     */

+    EClass getRun();

+

+    /**

+     * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.ares.Run#getModel <em>Model</em>}'.

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

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

+     * @return the meta object for the reference '<em>Model</em>'.

+     * @see org.eclipse.amp.amf.testing.ares.Run#getModel()

+     * @see #getRun()

+     * @generated

+     */

+    EReference getRun_Model();

+

+    /**

+     * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.ares.Run#getTestModel <em>Test Model</em>}'.

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

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

+     * @return the meta object for the reference '<em>Test Model</em>'.

+     * @see org.eclipse.amp.amf.testing.ares.Run#getTestModel()

+     * @see #getRun()

+     * @generated

+     */

+    EReference getRun_TestModel();

+

+    /**

+     * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.ares.Run#getParameterModel <em>Parameter Model</em>}'.

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

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

+     * @return the meta object for the reference '<em>Parameter Model</em>'.

+     * @see org.eclipse.amp.amf.testing.ares.Run#getParameterModel()

+     * @see #getRun()

+     * @generated

+     */

+    EReference getRun_ParameterModel();

+

+    /**

+     * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.ares.Run#getResult <em>Result</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Run#getResult()

+     * @see #getRun()

+     * @generated

+     */

+    EAttribute getRun_Result();

+

+    /**

+     * Returns the meta object for the containment reference list '{@link org.eclipse.amp.amf.testing.ares.Run#getParameters <em>Parameters</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Run#getParameters()

+     * @see #getRun()

+     * @generated

+     */

+    EReference getRun_Parameters();

+

+    /**

+     * Returns the meta object for the reference list '{@link org.eclipse.amp.amf.testing.ares.Run#getConstraints <em>Constraints</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Run#getConstraints()

+     * @see #getRun()

+     * @generated

+     */

+    EReference getRun_Constraints();

+

+    /**

+     * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.ares.Run#getStarted <em>Started</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Run#getStarted()

+     * @see #getRun()

+     * @generated

+     */

+    EAttribute getRun_Started();

+

+    /**

+     * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.ares.Run#getFinished <em>Finished</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Run#getFinished()

+     * @see #getRun()

+     * @generated

+     */

+    EAttribute getRun_Finished();

+

+    /**

+     * Returns the meta object for class '{@link org.eclipse.amp.amf.testing.ares.Failure <em>Failure</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Failure

+     * @generated

+     */

+    EClass getFailure();

+

+    /**

+     * Returns the meta object for the reference '{@link org.eclipse.amp.amf.testing.ares.Failure#getConstraint <em>Constraint</em>}'.

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

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

+     * @return the meta object for the reference '<em>Constraint</em>'.

+     * @see org.eclipse.amp.amf.testing.ares.Failure#getConstraint()

+     * @see #getFailure()

+     * @generated

+     */

+    EReference getFailure_Constraint();

+

+    /**

+     * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.ares.Failure#getIssue <em>Issue</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Failure#getIssue()

+     * @see #getFailure()

+     * @generated

+     */

+    EAttribute getFailure_Issue();

+

+    /**

+     * Returns the meta object for the attribute '{@link org.eclipse.amp.amf.testing.ares.Failure#getActualValue <em>Actual Value</em>}'.

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

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

+     * @return the meta object for the attribute '<em>Actual Value</em>'.

+     * @see org.eclipse.amp.amf.testing.ares.Failure#getActualValue()

+     * @see #getFailure()

+     * @generated

+     */

+    EAttribute getFailure_ActualValue();

+

+    /**

+     * Returns the meta object for enum '{@link org.eclipse.amp.amf.testing.ares.Result <em>Result</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Result

+     * @generated

+     */

+    EEnum getResult();

+

+    /**

+     * Returns the meta object for enum '{@link org.eclipse.amp.amf.testing.ares.Issue <em>Issue</em>}'.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Issue

+     * @generated

+     */

+    EEnum getIssue();

+

+    /**

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

+     */

+    AresFactory getAresFactory();

+

+    /**

+     * <!-- 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 enum,</li>

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

+     * </ul>

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

+     * @generated

+     */

+    interface Literals {

+        /**

+         * The meta object literal for the '{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl <em>Run</em>}' class.

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

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

+         * @see org.eclipse.amp.amf.testing.ares.impl.RunImpl

+         * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getRun()

+         * @generated

+         */

+        EClass RUN = eINSTANCE.getRun();

+

+        /**

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

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

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

+         * @generated

+         */

+        EReference RUN__MODEL = eINSTANCE.getRun_Model();

+

+        /**

+         * The meta object literal for the '<em><b>Test Model</b></em>' reference feature.

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

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

+         * @generated

+         */

+        EReference RUN__TEST_MODEL = eINSTANCE.getRun_TestModel();

+

+        /**

+         * The meta object literal for the '<em><b>Parameter Model</b></em>' reference feature.

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

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

+         * @generated

+         */

+        EReference RUN__PARAMETER_MODEL = eINSTANCE.getRun_ParameterModel();

+

+        /**

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

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

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

+         * @generated

+         */

+        EAttribute RUN__RESULT = eINSTANCE.getRun_Result();

+

+        /**

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

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

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

+         * @generated

+         */

+        EReference RUN__PARAMETERS = eINSTANCE.getRun_Parameters();

+

+        /**

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

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

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

+         * @generated

+         */

+        EReference RUN__CONSTRAINTS = eINSTANCE.getRun_Constraints();

+

+        /**

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

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

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

+         * @generated

+         */

+        EAttribute RUN__STARTED = eINSTANCE.getRun_Started();

+

+        /**

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

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

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

+         * @generated

+         */

+        EAttribute RUN__FINISHED = eINSTANCE.getRun_Finished();

+

+        /**

+         * The meta object literal for the '{@link org.eclipse.amp.amf.testing.ares.impl.FailureImpl <em>Failure</em>}' class.

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

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

+         * @see org.eclipse.amp.amf.testing.ares.impl.FailureImpl

+         * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getFailure()

+         * @generated

+         */

+        EClass FAILURE = eINSTANCE.getFailure();

+

+        /**

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

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

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

+         * @generated

+         */

+        EReference FAILURE__CONSTRAINT = eINSTANCE.getFailure_Constraint();

+

+        /**

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

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

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

+         * @generated

+         */

+        EAttribute FAILURE__ISSUE = eINSTANCE.getFailure_Issue();

+

+        /**

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

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

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

+         * @generated

+         */

+        EAttribute FAILURE__ACTUAL_VALUE = eINSTANCE.getFailure_ActualValue();

+

+        /**

+         * The meta object literal for the '{@link org.eclipse.amp.amf.testing.ares.Result <em>Result</em>}' enum.

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

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

+         * @see org.eclipse.amp.amf.testing.ares.Result

+         * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getResult()

+         * @generated

+         */

+        EEnum RESULT = eINSTANCE.getResult();

+

+        /**

+         * The meta object literal for the '{@link org.eclipse.amp.amf.testing.ares.Issue <em>Issue</em>}' enum.

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

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

+         * @see org.eclipse.amp.amf.testing.ares.Issue

+         * @see org.eclipse.amp.amf.testing.ares.impl.AresPackageImpl#getIssue()

+         * @generated

+         */

+        EEnum ISSUE = eINSTANCE.getIssue();

+

+    }

+

+} //AresPackage

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Failure.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Failure.java
new file mode 100644
index 0000000..192c214
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Failure.java
@@ -0,0 +1,113 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: Failure.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares;

+

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+

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

+

+/**

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

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

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

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Failure#getConstraint <em>Constraint</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Failure#getIssue <em>Issue</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Failure#getActualValue <em>Actual Value</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.amp.amf.testing.ares.AresPackage#getFailure()

+ * @model

+ * @generated

+ */

+public interface Failure extends EObject {

+    /**

+     * Returns the value of the '<em><b>Constraint</b></em>' reference.

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

+     * <p>

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

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

+     * </p>

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

+     * @return the value of the '<em>Constraint</em>' reference.

+     * @see #setConstraint(Constraint)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getFailure_Constraint()

+     * @model

+     * @generated

+     */

+    Constraint getConstraint();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Failure#getConstraint <em>Constraint</em>}' reference.

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

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

+     * @param value the new value of the '<em>Constraint</em>' reference.

+     * @see #getConstraint()

+     * @generated

+     */

+    void setConstraint(Constraint value);

+

+    /**

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

+     * The literals are from the enumeration {@link org.eclipse.amp.amf.testing.ares.Issue}.

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

+     * <p>

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

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

+     * </p>

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Issue

+     * @see #setIssue(Issue)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getFailure_Issue()

+     * @model required="true"

+     * @generated

+     */

+    Issue getIssue();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Failure#getIssue <em>Issue</em>}' attribute.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Issue

+     * @see #getIssue()

+     * @generated

+     */

+    void setIssue(Issue value);

+

+    /**

+     * Returns the value of the '<em><b>Actual Value</b></em>' attribute.

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

+     * <p>

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

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

+     * </p>

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

+     * @return the value of the '<em>Actual Value</em>' attribute.

+     * @see #setActualValue(double)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getFailure_ActualValue()

+     * @model required="true"

+     * @generated

+     */

+    double getActualValue();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Failure#getActualValue <em>Actual Value</em>}' attribute.

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

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

+     * @param value the new value of the '<em>Actual Value</em>' attribute.

+     * @see #getActualValue()

+     * @generated

+     */

+    void setActualValue(double value);

+

+} // Failure

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Issue.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Issue.java
new file mode 100644
index 0000000..8871d04
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Issue.java
@@ -0,0 +1,212 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: Issue.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares;

+

+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>Issue</b></em>',

+ * and utility methods for working with them.

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

+ * @see org.eclipse.amp.amf.testing.ares.AresPackage#getIssue()

+ * @model

+ * @generated

+ */

+public enum Issue implements Enumerator {

+    /**

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

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

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

+     * @see #BELOW_RANGE_VALUE

+     * @generated

+     * @ordered

+     */

+    BELOW_RANGE(10, "BelowRange", "BELOW_RANGE"),

+

+    /**

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

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

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

+     * @see #ABOVE_RANGE_VALUE

+     * @generated

+     * @ordered

+     */

+    ABOVE_RANGE(15, "AboveRange", "ABOVE_RANGE");

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

+     * @see #BELOW_RANGE

+     * @model name="BelowRange" literal="BELOW_RANGE"

+     * @generated

+     * @ordered

+     */

+    public static final int BELOW_RANGE_VALUE = 10;

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

+     * @see #ABOVE_RANGE

+     * @model name="AboveRange" literal="ABOVE_RANGE"

+     * @generated

+     * @ordered

+     */

+    public static final int ABOVE_RANGE_VALUE = 15;

+

+    /**

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

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

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

+     * @generated

+     */

+    private static final Issue[] VALUES_ARRAY =

+        new Issue[] {

+            BELOW_RANGE,

+            ABOVE_RANGE,

+        };

+

+    /**

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

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

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

+     * @generated

+     */

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

+

+    /**

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

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

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

+     * @generated

+     */

+    public static Issue get(String literal) {

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

+            Issue result = VALUES_ARRAY[i];

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

+                return result;

+            }

+        }

+        return null;

+    }

+

+    /**

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

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

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

+     * @generated

+     */

+    public static Issue getByName(String name) {

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

+            Issue result = VALUES_ARRAY[i];

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

+                return result;

+            }

+        }

+        return null;

+    }

+

+    /**

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

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

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

+     * @generated

+     */

+    public static Issue get(int value) {

+        switch (value) {

+            case BELOW_RANGE_VALUE: return BELOW_RANGE;

+            case ABOVE_RANGE_VALUE: return ABOVE_RANGE;

+        }

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

+    }

+    

+} //Issue

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Result.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Result.java
new file mode 100644
index 0000000..88f9f41
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Result.java
@@ -0,0 +1,239 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: Result.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares;

+

+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>Result</b></em>',

+ * and utility methods for working with them.

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

+ * @see org.eclipse.amp.amf.testing.ares.AresPackage#getResult()

+ * @model

+ * @generated

+ */

+public enum Result implements Enumerator {

+    /**

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

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

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

+     * @see #INCOMPLETE_VALUE

+     * @generated

+     * @ordered

+     */

+    INCOMPLETE(1, "Incomplete", "INCOMPLETE"),

+

+    /**

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

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

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

+     * @see #SUCCESS_VALUE

+     * @generated

+     * @ordered

+     */

+    SUCCESS(2, "Success", "SUCCESS"),

+

+    /**

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

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

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

+     * @see #FAILURE_VALUE

+     * @generated

+     * @ordered

+     */

+    FAILURE(3, "Failure", "FAILURE");

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

+     * @see #INCOMPLETE

+     * @model name="Incomplete" literal="INCOMPLETE"

+     * @generated

+     * @ordered

+     */

+    public static final int INCOMPLETE_VALUE = 1;

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

+     * @see #SUCCESS

+     * @model name="Success" literal="SUCCESS"

+     * @generated

+     * @ordered

+     */

+    public static final int SUCCESS_VALUE = 2;

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

+     * @see #FAILURE

+     * @model name="Failure" literal="FAILURE"

+     * @generated

+     * @ordered

+     */

+    public static final int FAILURE_VALUE = 3;

+

+    /**

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

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

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

+     * @generated

+     */

+    private static final Result[] VALUES_ARRAY =

+        new Result[] {

+            INCOMPLETE,

+            SUCCESS,

+            FAILURE,

+        };

+

+    /**

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

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

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

+     * @generated

+     */

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

+

+    /**

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

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

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

+     * @generated

+     */

+    public static Result get(String literal) {

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

+            Result result = VALUES_ARRAY[i];

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

+                return result;

+            }

+        }

+        return null;

+    }

+

+    /**

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

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

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

+     * @generated

+     */

+    public static Result getByName(String name) {

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

+            Result result = VALUES_ARRAY[i];

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

+                return result;

+            }

+        }

+        return null;

+    }

+

+    /**

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

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

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

+     * @generated

+     */

+    public static Result get(int value) {

+        switch (value) {

+            case INCOMPLETE_VALUE: return INCOMPLETE;

+            case SUCCESS_VALUE: return SUCCESS;

+            case FAILURE_VALUE: return FAILURE;

+        }

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

+    }

+    

+} //Result

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Run.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Run.java
new file mode 100644
index 0000000..eed6c61
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/Run.java
@@ -0,0 +1,238 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: Run.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares;

+

+import java.util.Date;

+

+import org.eclipse.amp.amf.parameters.aPar.Parameter;

+

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+import org.eclipse.amp.amf.testing.aTest.Model;

+

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

+

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

+

+import org.metaabm.SContinuousSpace;

+

+/**

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

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

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

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getModel <em>Model</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getTestModel <em>Test Model</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getParameterModel <em>Parameter Model</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getResult <em>Result</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getParameters <em>Parameters</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getConstraints <em>Constraints</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getStarted <em>Started</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.Run#getFinished <em>Finished</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun()

+ * @model

+ * @generated

+ */

+public interface Run extends EObject {

+    /**

+     * Returns the value of the '<em><b>Model</b></em>' reference.

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

+     * <p>

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

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

+     * </p>

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

+     * @return the value of the '<em>Model</em>' reference.

+     * @see #setModel(SContinuousSpace)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_Model()

+     * @model required="true"

+     * @generated

+     */

+    SContinuousSpace getModel();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Run#getModel <em>Model</em>}' reference.

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

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

+     * @param value the new value of the '<em>Model</em>' reference.

+     * @see #getModel()

+     * @generated

+     */

+    void setModel(SContinuousSpace value);

+

+    /**

+     * Returns the value of the '<em><b>Test Model</b></em>' reference.

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

+     * <p>

+     * If the meaning of the '<em>Test Model</em>' reference isn't clear,

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

+     * </p>

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

+     * @return the value of the '<em>Test Model</em>' reference.

+     * @see #setTestModel(Model)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_TestModel()

+     * @model required="true"

+     * @generated

+     */

+    Model getTestModel();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Run#getTestModel <em>Test Model</em>}' reference.

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

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

+     * @param value the new value of the '<em>Test Model</em>' reference.

+     * @see #getTestModel()

+     * @generated

+     */

+    void setTestModel(Model value);

+

+    /**

+     * Returns the value of the '<em><b>Parameter Model</b></em>' reference.

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

+     * <p>

+     * If the meaning of the '<em>Parameter Model</em>' reference isn't clear,

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

+     * </p>

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

+     * @return the value of the '<em>Parameter Model</em>' reference.

+     * @see #setParameterModel(org.eclipse.amp.amf.parameters.aPar.Model)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_ParameterModel()

+     * @model

+     * @generated

+     */

+    org.eclipse.amp.amf.parameters.aPar.Model getParameterModel();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Run#getParameterModel <em>Parameter Model</em>}' reference.

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

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

+     * @param value the new value of the '<em>Parameter Model</em>' reference.

+     * @see #getParameterModel()

+     * @generated

+     */

+    void setParameterModel(org.eclipse.amp.amf.parameters.aPar.Model value);

+

+    /**

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

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

+     * The literals are from the enumeration {@link org.eclipse.amp.amf.testing.ares.Result}.

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

+     * <p>

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

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

+     * </p>

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Result

+     * @see #setResult(Result)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_Result()

+     * @model default=""

+     * @generated

+     */

+    Result getResult();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Run#getResult <em>Result</em>}' attribute.

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

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

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

+     * @see org.eclipse.amp.amf.testing.ares.Result

+     * @see #getResult()

+     * @generated

+     */

+    void setResult(Result value);

+

+    /**

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

+     * The list contents are of type {@link org.eclipse.amp.amf.parameters.aPar.Parameter}.

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

+     * <p>

+     * If the meaning of the '<em>Parameters</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>Parameters</em>' containment reference list.

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_Parameters()

+     * @model containment="true"

+     * @generated

+     */

+    EList<Parameter> getParameters();

+

+    /**

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

+     * The list contents are of type {@link org.eclipse.amp.amf.testing.aTest.Constraint}.

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

+     * <p>

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

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

+     * </p>

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

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

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_Constraints()

+     * @model

+     * @generated

+     */

+    EList<Constraint> getConstraints();

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

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

+     * @see #setStarted(Date)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_Started()

+     * @model

+     * @generated

+     */

+    Date getStarted();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Run#getStarted <em>Started</em>}' attribute.

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

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

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

+     * @see #getStarted()

+     * @generated

+     */

+    void setStarted(Date value);

+

+    /**

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

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

+     * <p>

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

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

+     * </p>

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

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

+     * @see #setFinished(Date)

+     * @see org.eclipse.amp.amf.testing.ares.AresPackage#getRun_Finished()

+     * @model

+     * @generated

+     */

+    Date getFinished();

+

+    /**

+     * Sets the value of the '{@link org.eclipse.amp.amf.testing.ares.Run#getFinished <em>Finished</em>}' attribute.

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

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

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

+     * @see #getFinished()

+     * @generated

+     */

+    void setFinished(Date value);

+

+} // Run

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/AresFactoryImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/AresFactoryImpl.java
new file mode 100644
index 0000000..9d3ae4b
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/AresFactoryImpl.java
@@ -0,0 +1,185 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: AresFactoryImpl.java,v 1.1 2009/07/31 21:48:18 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.impl;

+

+import org.eclipse.amp.amf.testing.ares.*;

+

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

+

+/**

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

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

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

+ * @generated

+ */

+public class AresFactoryImpl extends EFactoryImpl implements AresFactory {

+    /**

+     * Creates the default factory implementation.

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

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

+     * @generated

+     */

+    public static AresFactory init() {

+        try {

+            AresFactory theAresFactory = (AresFactory)EPackage.Registry.INSTANCE.getEFactory("http://eclipse.org/amp/ares"); 

+            if (theAresFactory != null) {

+                return theAresFactory;

+            }

+        }

+        catch (Exception exception) {

+            EcorePlugin.INSTANCE.log(exception);

+        }

+        return new AresFactoryImpl();

+    }

+

+    /**

+     * Creates an instance of the factory.

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

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

+     * @generated

+     */

+    public AresFactoryImpl() {

+        super();

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    public EObject create(EClass eClass) {

+        switch (eClass.getClassifierID()) {

+            case AresPackage.RUN: return createRun();

+            case AresPackage.FAILURE: return createFailure();

+            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 AresPackage.RESULT:

+                return createResultFromString(eDataType, initialValue);

+            case AresPackage.ISSUE:

+                return createIssueFromString(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 AresPackage.RESULT:

+                return convertResultToString(eDataType, instanceValue);

+            case AresPackage.ISSUE:

+                return convertIssueToString(eDataType, instanceValue);

+            default:

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

+        }

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Run createRun() {

+        RunImpl run = new RunImpl();

+        return run;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Failure createFailure() {

+        FailureImpl failure = new FailureImpl();

+        return failure;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Result createResultFromString(EDataType eDataType, String initialValue) {

+        Result result = Result.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 convertResultToString(EDataType eDataType, Object instanceValue) {

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Issue createIssueFromString(EDataType eDataType, String initialValue) {

+        Issue result = Issue.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 convertIssueToString(EDataType eDataType, Object instanceValue) {

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public AresPackage getAresPackage() {

+        return (AresPackage)getEPackage();

+    }

+

+    /**

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

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

+     * @deprecated

+     * @generated

+     */

+    @Deprecated

+    public static AresPackage getPackage() {

+        return AresPackage.eINSTANCE;

+    }

+

+} //AresFactoryImpl

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/AresPackageImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/AresPackageImpl.java
new file mode 100644
index 0000000..bc093ef
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/AresPackageImpl.java
@@ -0,0 +1,377 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: AresPackageImpl.java,v 1.1 2009/07/31 21:48:18 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.impl;

+

+import org.eclipse.amp.amf.parameters.aPar.AParPackage;

+

+import org.eclipse.amp.amf.testing.aTest.ATestPackage;

+

+import org.eclipse.amp.amf.testing.ares.AresFactory;

+import org.eclipse.amp.amf.testing.ares.AresPackage;

+import org.eclipse.amp.amf.testing.ares.Failure;

+import org.eclipse.amp.amf.testing.ares.Issue;

+import org.eclipse.amp.amf.testing.ares.Result;

+import org.eclipse.amp.amf.testing.ares.Run;

+

+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.metaabm.MetaABMPackage;

+

+/**

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

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

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

+ * @generated

+ */

+public class AresPackageImpl extends EPackageImpl implements AresPackage {

+    /**

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

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

+     * @generated

+     */

+    private EClass runEClass = null;

+

+    /**

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

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

+     * @generated

+     */

+    private EClass failureEClass = null;

+

+    /**

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

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

+     * @generated

+     */

+    private EEnum resultEEnum = null;

+

+    /**

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

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

+     * @generated

+     */

+    private EEnum issueEEnum = 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.amp.amf.testing.ares.AresPackage#eNS_URI

+     * @see #init()

+     * @generated

+     */

+    private AresPackageImpl() {

+        super(eNS_URI, AresFactory.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 AresPackage#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 AresPackage init() {

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

+

+        // Obtain or create and register package

+        AresPackageImpl theAresPackage = (AresPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof AresPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new AresPackageImpl());

+

+        isInited = true;

+

+        // Initialize simple dependencies

+        AParPackage.eINSTANCE.eClass();

+        ATestPackage.eINSTANCE.eClass();

+

+        // Create package meta-data objects

+        theAresPackage.createPackageContents();

+

+        // Initialize created meta-data

+        theAresPackage.initializePackageContents();

+

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

+        theAresPackage.freeze();

+

+  

+        // Update the registry and return the package

+        EPackage.Registry.INSTANCE.put(AresPackage.eNS_URI, theAresPackage);

+        return theAresPackage;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EClass getRun() {

+        return runEClass;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EReference getRun_Model() {

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EReference getRun_TestModel() {

+        return (EReference)runEClass.getEStructuralFeatures().get(1);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EReference getRun_ParameterModel() {

+        return (EReference)runEClass.getEStructuralFeatures().get(2);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EAttribute getRun_Result() {

+        return (EAttribute)runEClass.getEStructuralFeatures().get(3);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EReference getRun_Parameters() {

+        return (EReference)runEClass.getEStructuralFeatures().get(4);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EReference getRun_Constraints() {

+        return (EReference)runEClass.getEStructuralFeatures().get(5);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EAttribute getRun_Started() {

+        return (EAttribute)runEClass.getEStructuralFeatures().get(6);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EAttribute getRun_Finished() {

+        return (EAttribute)runEClass.getEStructuralFeatures().get(7);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EClass getFailure() {

+        return failureEClass;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EReference getFailure_Constraint() {

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EAttribute getFailure_Issue() {

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EAttribute getFailure_ActualValue() {

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EEnum getResult() {

+        return resultEEnum;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EEnum getIssue() {

+        return issueEEnum;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public AresFactory getAresFactory() {

+        return (AresFactory)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

+        runEClass = createEClass(RUN);

+        createEReference(runEClass, RUN__MODEL);

+        createEReference(runEClass, RUN__TEST_MODEL);

+        createEReference(runEClass, RUN__PARAMETER_MODEL);

+        createEAttribute(runEClass, RUN__RESULT);

+        createEReference(runEClass, RUN__PARAMETERS);

+        createEReference(runEClass, RUN__CONSTRAINTS);

+        createEAttribute(runEClass, RUN__STARTED);

+        createEAttribute(runEClass, RUN__FINISHED);

+

+        failureEClass = createEClass(FAILURE);

+        createEReference(failureEClass, FAILURE__CONSTRAINT);

+        createEAttribute(failureEClass, FAILURE__ISSUE);

+        createEAttribute(failureEClass, FAILURE__ACTUAL_VALUE);

+

+        // Create enums

+        resultEEnum = createEEnum(RESULT);

+        issueEEnum = createEEnum(ISSUE);

+    }

+

+    /**

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

+

+        // Obtain other dependent packages

+        MetaABMPackage theMetaABMPackage = (MetaABMPackage)EPackage.Registry.INSTANCE.getEPackage(MetaABMPackage.eNS_URI);

+        ATestPackage theATestPackage = (ATestPackage)EPackage.Registry.INSTANCE.getEPackage(ATestPackage.eNS_URI);

+        AParPackage theAParPackage = (AParPackage)EPackage.Registry.INSTANCE.getEPackage(AParPackage.eNS_URI);

+

+        // Create type parameters

+

+        // Set bounds for type parameters

+

+        // Add supertypes to classes

+

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

+        initEClass(runEClass, Run.class, "Run", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+        initEReference(getRun_Model(), theMetaABMPackage.getSContinuousSpace(), null, "model", null, 1, 1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEReference(getRun_TestModel(), theATestPackage.getModel(), null, "testModel", null, 1, 1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEReference(getRun_ParameterModel(), theAParPackage.getModel(), null, "parameterModel", null, 0, 1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEAttribute(getRun_Result(), this.getResult(), "result", "", 0, 1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEReference(getRun_Parameters(), theAParPackage.getParameter(), null, "parameters", null, 0, -1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEReference(getRun_Constraints(), theATestPackage.getConstraint(), null, "constraints", null, 0, -1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEAttribute(getRun_Started(), ecorePackage.getEDate(), "started", null, 0, 1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEAttribute(getRun_Finished(), ecorePackage.getEDate(), "finished", null, 0, 1, Run.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+        initEClass(failureEClass, Failure.class, "Failure", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+        initEReference(getFailure_Constraint(), theATestPackage.getConstraint(), null, "constraint", null, 0, 1, Failure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEAttribute(getFailure_Issue(), this.getIssue(), "issue", null, 1, 1, Failure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+        initEAttribute(getFailure_ActualValue(), ecorePackage.getEDouble(), "actualValue", null, 1, 1, Failure.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+        // Initialize enums and add enum literals

+        initEEnum(resultEEnum, Result.class, "Result");

+        addEEnumLiteral(resultEEnum, Result.INCOMPLETE);

+        addEEnumLiteral(resultEEnum, Result.SUCCESS);

+        addEEnumLiteral(resultEEnum, Result.FAILURE);

+

+        initEEnum(issueEEnum, Issue.class, "Issue");

+        addEEnumLiteral(issueEEnum, Issue.BELOW_RANGE);

+        addEEnumLiteral(issueEEnum, Issue.ABOVE_RANGE);

+

+        // Create resource

+        createResource(eNS_URI);

+    }

+

+} //AresPackageImpl

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/FailureImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/FailureImpl.java
new file mode 100644
index 0000000..12e8ad2
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/FailureImpl.java
@@ -0,0 +1,285 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: FailureImpl.java,v 1.1 2009/07/31 21:48:18 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.impl;

+

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+

+import org.eclipse.amp.amf.testing.ares.AresPackage;

+import org.eclipse.amp.amf.testing.ares.Failure;

+import org.eclipse.amp.amf.testing.ares.Issue;

+

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

+

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

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

+

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

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

+

+/**

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

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

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

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.FailureImpl#getConstraint <em>Constraint</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.FailureImpl#getIssue <em>Issue</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.FailureImpl#getActualValue <em>Actual Value</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class FailureImpl extends EObjectImpl implements Failure {

+    /**

+     * The cached value of the '{@link #getConstraint() <em>Constraint</em>}' reference.

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

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

+     * @see #getConstraint()

+     * @generated

+     * @ordered

+     */

+    protected Constraint constraint;

+

+    /**

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

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

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

+     * @see #getIssue()

+     * @generated

+     * @ordered

+     */

+    protected static final Issue ISSUE_EDEFAULT = Issue.BELOW_RANGE;

+

+    /**

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

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

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

+     * @see #getIssue()

+     * @generated

+     * @ordered

+     */

+    protected Issue issue = ISSUE_EDEFAULT;

+

+    /**

+     * The default value of the '{@link #getActualValue() <em>Actual Value</em>}' attribute.

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

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

+     * @see #getActualValue()

+     * @generated

+     * @ordered

+     */

+    protected static final double ACTUAL_VALUE_EDEFAULT = 0.0;

+

+    /**

+     * The cached value of the '{@link #getActualValue() <em>Actual Value</em>}' attribute.

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

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

+     * @see #getActualValue()

+     * @generated

+     * @ordered

+     */

+    protected double actualValue = ACTUAL_VALUE_EDEFAULT;

+

+    /**

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

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

+     * @generated

+     */

+    protected FailureImpl() {

+        super();

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    protected EClass eStaticClass() {

+        return AresPackage.Literals.FAILURE;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Constraint getConstraint() {

+        if (constraint != null && constraint.eIsProxy()) {

+            InternalEObject oldConstraint = (InternalEObject)constraint;

+            constraint = (Constraint)eResolveProxy(oldConstraint);

+            if (constraint != oldConstraint) {

+                if (eNotificationRequired())

+                    eNotify(new ENotificationImpl(this, Notification.RESOLVE, AresPackage.FAILURE__CONSTRAINT, oldConstraint, constraint));

+            }

+        }

+        return constraint;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Constraint basicGetConstraint() {

+        return constraint;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setConstraint(Constraint newConstraint) {

+        Constraint oldConstraint = constraint;

+        constraint = newConstraint;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.FAILURE__CONSTRAINT, oldConstraint, constraint));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Issue getIssue() {

+        return issue;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setIssue(Issue newIssue) {

+        Issue oldIssue = issue;

+        issue = newIssue == null ? ISSUE_EDEFAULT : newIssue;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.FAILURE__ISSUE, oldIssue, issue));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public double getActualValue() {

+        return actualValue;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setActualValue(double newActualValue) {

+        double oldActualValue = actualValue;

+        actualValue = newActualValue;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.FAILURE__ACTUAL_VALUE, oldActualValue, actualValue));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

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

+        switch (featureID) {

+            case AresPackage.FAILURE__CONSTRAINT:

+                if (resolve) return getConstraint();

+                return basicGetConstraint();

+            case AresPackage.FAILURE__ISSUE:

+                return getIssue();

+            case AresPackage.FAILURE__ACTUAL_VALUE:

+                return getActualValue();

+        }

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

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

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

+        switch (featureID) {

+            case AresPackage.FAILURE__CONSTRAINT:

+                setConstraint((Constraint)newValue);

+                return;

+            case AresPackage.FAILURE__ISSUE:

+                setIssue((Issue)newValue);

+                return;

+            case AresPackage.FAILURE__ACTUAL_VALUE:

+                setActualValue((Double)newValue);

+                return;

+        }

+        super.eSet(featureID, newValue);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    public void eUnset(int featureID) {

+        switch (featureID) {

+            case AresPackage.FAILURE__CONSTRAINT:

+                setConstraint((Constraint)null);

+                return;

+            case AresPackage.FAILURE__ISSUE:

+                setIssue(ISSUE_EDEFAULT);

+                return;

+            case AresPackage.FAILURE__ACTUAL_VALUE:

+                setActualValue(ACTUAL_VALUE_EDEFAULT);

+                return;

+        }

+        super.eUnset(featureID);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    public boolean eIsSet(int featureID) {

+        switch (featureID) {

+            case AresPackage.FAILURE__CONSTRAINT:

+                return constraint != null;

+            case AresPackage.FAILURE__ISSUE:

+                return issue != ISSUE_EDEFAULT;

+            case AresPackage.FAILURE__ACTUAL_VALUE:

+                return actualValue != ACTUAL_VALUE_EDEFAULT;

+        }

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

+        result.append(issue);

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

+        result.append(actualValue);

+        result.append(')');

+        return result.toString();

+    }

+

+} //FailureImpl

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/RunImpl.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/RunImpl.java
new file mode 100644
index 0000000..8ce3ccf
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/impl/RunImpl.java
@@ -0,0 +1,557 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RunImpl.java,v 1.1 2009/07/31 21:48:18 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.impl;

+

+import java.util.Collection;

+import java.util.Date;

+

+import org.eclipse.amp.amf.parameters.aPar.Parameter;

+

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+import org.eclipse.amp.amf.testing.aTest.Model;

+

+import org.eclipse.amp.amf.testing.ares.AresPackage;

+import org.eclipse.amp.amf.testing.ares.Result;

+import org.eclipse.amp.amf.testing.ares.Run;

+

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

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

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

+

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

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

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

+

+import org.metaabm.SContinuousSpace;

+

+/**

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

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

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

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getModel <em>Model</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getTestModel <em>Test Model</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getParameterModel <em>Parameter Model</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getResult <em>Result</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getParameters <em>Parameters</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getConstraints <em>Constraints</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getStarted <em>Started</em>}</li>

+ *   <li>{@link org.eclipse.amp.amf.testing.ares.impl.RunImpl#getFinished <em>Finished</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class RunImpl extends EObjectImpl implements Run {

+    /**

+     * The cached value of the '{@link #getModel() <em>Model</em>}' reference.

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

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

+     * @see #getModel()

+     * @generated

+     * @ordered

+     */

+    protected SContinuousSpace model;

+

+    /**

+     * The cached value of the '{@link #getTestModel() <em>Test Model</em>}' reference.

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

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

+     * @see #getTestModel()

+     * @generated

+     * @ordered

+     */

+    protected Model testModel;

+

+    /**

+     * The cached value of the '{@link #getParameterModel() <em>Parameter Model</em>}' reference.

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

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

+     * @see #getParameterModel()

+     * @generated

+     * @ordered

+     */

+    protected org.eclipse.amp.amf.parameters.aPar.Model parameterModel;

+

+    /**

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

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

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

+     * @see #getResult()

+     * @generated

+     * @ordered

+     */

+    protected static final Result RESULT_EDEFAULT = Result.INCOMPLETE;

+

+    /**

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

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

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

+     * @see #getResult()

+     * @generated

+     * @ordered

+     */

+    protected Result result = RESULT_EDEFAULT;

+

+    /**

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

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

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

+     * @see #getParameters()

+     * @generated

+     * @ordered

+     */

+    protected EList<Parameter> parameters;

+

+    /**

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

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

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

+     * @see #getConstraints()

+     * @generated

+     * @ordered

+     */

+    protected EList<Constraint> constraints;

+

+    /**

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

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

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

+     * @see #getStarted()

+     * @generated

+     * @ordered

+     */

+    protected static final Date STARTED_EDEFAULT = null;

+

+    /**

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

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

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

+     * @see #getStarted()

+     * @generated

+     * @ordered

+     */

+    protected Date started = STARTED_EDEFAULT;

+

+    /**

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

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

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

+     * @see #getFinished()

+     * @generated

+     * @ordered

+     */

+    protected static final Date FINISHED_EDEFAULT = null;

+

+    /**

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

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

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

+     * @see #getFinished()

+     * @generated

+     * @ordered

+     */

+    protected Date finished = FINISHED_EDEFAULT;

+

+    /**

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

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

+     * @generated

+     */

+    protected RunImpl() {

+        super();

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    protected EClass eStaticClass() {

+        return AresPackage.Literals.RUN;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public SContinuousSpace getModel() {

+        if (model != null && model.eIsProxy()) {

+            InternalEObject oldModel = (InternalEObject)model;

+            model = (SContinuousSpace)eResolveProxy(oldModel);

+            if (model != oldModel) {

+                if (eNotificationRequired())

+                    eNotify(new ENotificationImpl(this, Notification.RESOLVE, AresPackage.RUN__MODEL, oldModel, model));

+            }

+        }

+        return model;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public SContinuousSpace basicGetModel() {

+        return model;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setModel(SContinuousSpace newModel) {

+        SContinuousSpace oldModel = model;

+        model = newModel;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.RUN__MODEL, oldModel, model));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Model getTestModel() {

+        if (testModel != null && testModel.eIsProxy()) {

+            InternalEObject oldTestModel = (InternalEObject)testModel;

+            testModel = (Model)eResolveProxy(oldTestModel);

+            if (testModel != oldTestModel) {

+                if (eNotificationRequired())

+                    eNotify(new ENotificationImpl(this, Notification.RESOLVE, AresPackage.RUN__TEST_MODEL, oldTestModel, testModel));

+            }

+        }

+        return testModel;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Model basicGetTestModel() {

+        return testModel;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setTestModel(Model newTestModel) {

+        Model oldTestModel = testModel;

+        testModel = newTestModel;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.RUN__TEST_MODEL, oldTestModel, testModel));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public org.eclipse.amp.amf.parameters.aPar.Model getParameterModel() {

+        if (parameterModel != null && parameterModel.eIsProxy()) {

+            InternalEObject oldParameterModel = (InternalEObject)parameterModel;

+            parameterModel = (org.eclipse.amp.amf.parameters.aPar.Model)eResolveProxy(oldParameterModel);

+            if (parameterModel != oldParameterModel) {

+                if (eNotificationRequired())

+                    eNotify(new ENotificationImpl(this, Notification.RESOLVE, AresPackage.RUN__PARAMETER_MODEL, oldParameterModel, parameterModel));

+            }

+        }

+        return parameterModel;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public org.eclipse.amp.amf.parameters.aPar.Model basicGetParameterModel() {

+        return parameterModel;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setParameterModel(org.eclipse.amp.amf.parameters.aPar.Model newParameterModel) {

+        org.eclipse.amp.amf.parameters.aPar.Model oldParameterModel = parameterModel;

+        parameterModel = newParameterModel;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.RUN__PARAMETER_MODEL, oldParameterModel, parameterModel));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Result getResult() {

+        return result;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setResult(Result newResult) {

+        Result oldResult = result;

+        result = newResult == null ? RESULT_EDEFAULT : newResult;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.RUN__RESULT, oldResult, result));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EList<Parameter> getParameters() {

+        if (parameters == null) {

+            parameters = new EObjectContainmentEList<Parameter>(Parameter.class, this, AresPackage.RUN__PARAMETERS);

+        }

+        return parameters;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public EList<Constraint> getConstraints() {

+        if (constraints == null) {

+            constraints = new EObjectResolvingEList<Constraint>(Constraint.class, this, AresPackage.RUN__CONSTRAINTS);

+        }

+        return constraints;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Date getStarted() {

+        return started;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setStarted(Date newStarted) {

+        Date oldStarted = started;

+        started = newStarted;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.RUN__STARTED, oldStarted, started));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public Date getFinished() {

+        return finished;

+    }

+

+    /**

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

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

+     * @generated

+     */

+    public void setFinished(Date newFinished) {

+        Date oldFinished = finished;

+        finished = newFinished;

+        if (eNotificationRequired())

+            eNotify(new ENotificationImpl(this, Notification.SET, AresPackage.RUN__FINISHED, oldFinished, finished));

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

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

+        switch (featureID) {

+            case AresPackage.RUN__PARAMETERS:

+                return ((InternalEList<?>)getParameters()).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 AresPackage.RUN__MODEL:

+                if (resolve) return getModel();

+                return basicGetModel();

+            case AresPackage.RUN__TEST_MODEL:

+                if (resolve) return getTestModel();

+                return basicGetTestModel();

+            case AresPackage.RUN__PARAMETER_MODEL:

+                if (resolve) return getParameterModel();

+                return basicGetParameterModel();

+            case AresPackage.RUN__RESULT:

+                return getResult();

+            case AresPackage.RUN__PARAMETERS:

+                return getParameters();

+            case AresPackage.RUN__CONSTRAINTS:

+                return getConstraints();

+            case AresPackage.RUN__STARTED:

+                return getStarted();

+            case AresPackage.RUN__FINISHED:

+                return getFinished();

+        }

+        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 AresPackage.RUN__MODEL:

+                setModel((SContinuousSpace)newValue);

+                return;

+            case AresPackage.RUN__TEST_MODEL:

+                setTestModel((Model)newValue);

+                return;

+            case AresPackage.RUN__PARAMETER_MODEL:

+                setParameterModel((org.eclipse.amp.amf.parameters.aPar.Model)newValue);

+                return;

+            case AresPackage.RUN__RESULT:

+                setResult((Result)newValue);

+                return;

+            case AresPackage.RUN__PARAMETERS:

+                getParameters().clear();

+                getParameters().addAll((Collection<? extends Parameter>)newValue);

+                return;

+            case AresPackage.RUN__CONSTRAINTS:

+                getConstraints().clear();

+                getConstraints().addAll((Collection<? extends Constraint>)newValue);

+                return;

+            case AresPackage.RUN__STARTED:

+                setStarted((Date)newValue);

+                return;

+            case AresPackage.RUN__FINISHED:

+                setFinished((Date)newValue);

+                return;

+        }

+        super.eSet(featureID, newValue);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    public void eUnset(int featureID) {

+        switch (featureID) {

+            case AresPackage.RUN__MODEL:

+                setModel((SContinuousSpace)null);

+                return;

+            case AresPackage.RUN__TEST_MODEL:

+                setTestModel((Model)null);

+                return;

+            case AresPackage.RUN__PARAMETER_MODEL:

+                setParameterModel((org.eclipse.amp.amf.parameters.aPar.Model)null);

+                return;

+            case AresPackage.RUN__RESULT:

+                setResult(RESULT_EDEFAULT);

+                return;

+            case AresPackage.RUN__PARAMETERS:

+                getParameters().clear();

+                return;

+            case AresPackage.RUN__CONSTRAINTS:

+                getConstraints().clear();

+                return;

+            case AresPackage.RUN__STARTED:

+                setStarted(STARTED_EDEFAULT);

+                return;

+            case AresPackage.RUN__FINISHED:

+                setFinished(FINISHED_EDEFAULT);

+                return;

+        }

+        super.eUnset(featureID);

+    }

+

+    /**

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

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

+     * @generated

+     */

+    @Override

+    public boolean eIsSet(int featureID) {

+        switch (featureID) {

+            case AresPackage.RUN__MODEL:

+                return model != null;

+            case AresPackage.RUN__TEST_MODEL:

+                return testModel != null;

+            case AresPackage.RUN__PARAMETER_MODEL:

+                return parameterModel != null;

+            case AresPackage.RUN__RESULT:

+                return result != RESULT_EDEFAULT;

+            case AresPackage.RUN__PARAMETERS:

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

+            case AresPackage.RUN__CONSTRAINTS:

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

+            case AresPackage.RUN__STARTED:

+                return STARTED_EDEFAULT == null ? started != null : !STARTED_EDEFAULT.equals(started);

+            case AresPackage.RUN__FINISHED:

+                return FINISHED_EDEFAULT == null ? finished != null : !FINISHED_EDEFAULT.equals(finished);

+        }

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

+        result.append(result);

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

+        result.append(started);

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

+        result.append(finished);

+        result.append(')');

+        return result.toString();

+    }

+

+} //RunImpl

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/util/AresAdapterFactory.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/util/AresAdapterFactory.java
new file mode 100644
index 0000000..45dc269
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/util/AresAdapterFactory.java
@@ -0,0 +1,142 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: AresAdapterFactory.java,v 1.1 2009/07/31 21:48:20 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.util;

+

+import org.eclipse.amp.amf.testing.ares.*;

+

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

+

+/**

+ * <!-- 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.amp.amf.testing.ares.AresPackage

+ * @generated

+ */

+public class AresAdapterFactory extends AdapterFactoryImpl {

+    /**

+     * The cached model package.

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

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

+     * @generated

+     */

+    protected static AresPackage modelPackage;

+

+    /**

+     * Creates an instance of the adapter factory.

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

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

+     * @generated

+     */

+    public AresAdapterFactory() {

+        if (modelPackage == null) {

+            modelPackage = AresPackage.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 AresSwitch<Adapter> modelSwitch =

+        new AresSwitch<Adapter>() {

+            @Override

+            public Adapter caseRun(Run object) {

+                return createRunAdapter();

+            }

+            @Override

+            public Adapter caseFailure(Failure object) {

+                return createFailureAdapter();

+            }

+            @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.amp.amf.testing.ares.Run <em>Run</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.amp.amf.testing.ares.Run

+     * @generated

+     */

+    public Adapter createRunAdapter() {

+        return null;

+    }

+

+    /**

+     * Creates a new adapter for an object of class '{@link org.eclipse.amp.amf.testing.ares.Failure <em>Failure</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.amp.amf.testing.ares.Failure

+     * @generated

+     */

+    public Adapter createFailureAdapter() {

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

+    }

+

+} //AresAdapterFactory

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/util/AresSwitch.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/util/AresSwitch.java
new file mode 100644
index 0000000..93b54b3
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/util/AresSwitch.java
@@ -0,0 +1,151 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: AresSwitch.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.util;

+

+import java.util.List;

+

+import org.eclipse.amp.amf.testing.ares.*;

+

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

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

+

+/**

+ * <!-- 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.amp.amf.testing.ares.AresPackage

+ * @generated

+ */

+public class AresSwitch<T> {

+    /**

+     * The cached model package

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

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

+     * @generated

+     */

+    protected static AresPackage modelPackage;

+

+    /**

+     * Creates an instance of the switch.

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

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

+     * @generated

+     */

+    public AresSwitch() {

+        if (modelPackage == null) {

+            modelPackage = AresPackage.eINSTANCE;

+        }

+    }

+

+    /**

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

+     */

+    public T doSwitch(EObject theEObject) {

+        return doSwitch(theEObject.eClass(), theEObject);

+    }

+

+    /**

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

+     */

+    protected T doSwitch(EClass theEClass, EObject theEObject) {

+        if (theEClass.eContainer() == modelPackage) {

+            return doSwitch(theEClass.getClassifierID(), theEObject);

+        }

+        else {

+            List<EClass> eSuperTypes = theEClass.getESuperTypes();

+            return

+                eSuperTypes.isEmpty() ?

+                    defaultCase(theEObject) :

+                    doSwitch(eSuperTypes.get(0), theEObject);

+        }

+    }

+

+    /**

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

+     */

+    protected T doSwitch(int classifierID, EObject theEObject) {

+        switch (classifierID) {

+            case AresPackage.RUN: {

+                Run run = (Run)theEObject;

+                T result = caseRun(run);

+                if (result == null) result = defaultCase(theEObject);

+                return result;

+            }

+            case AresPackage.FAILURE: {

+                Failure failure = (Failure)theEObject;

+                T result = caseFailure(failure);

+                if (result == null) result = defaultCase(theEObject);

+                return result;

+            }

+            default: return defaultCase(theEObject);

+        }

+    }

+

+    /**

+     * Returns the result of interpreting the object as an instance of '<em>Run</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>Run</em>'.

+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+     * @generated

+     */

+    public T caseRun(Run object) {

+        return null;

+    }

+

+    /**

+     * Returns the result of interpreting the object as an instance of '<em>Failure</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>Failure</em>'.

+     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+     * @generated

+     */

+    public T caseFailure(Failure 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

+     */

+    public T defaultCase(EObject object) {

+        return null;

+    }

+

+} //AresSwitch

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/validation/FailureValidator.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/validation/FailureValidator.java
new file mode 100644
index 0000000..d5dd6b6
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/validation/FailureValidator.java
@@ -0,0 +1,25 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: FailureValidator.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.validation;

+

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+

+import org.eclipse.amp.amf.testing.ares.Issue;

+

+/**

+ * A sample validator interface for {@link org.eclipse.amp.amf.testing.ares.Failure}.

+ * This doesn't really do anything, and it's not a real EMF artifact.

+ * It was generated by the org.eclipse.emf.examples.generator.validator plug-in to illustrate how EMF's code generator can be extended.

+ * This can be disabled with -vmargs -Dorg.eclipse.emf.examples.generator.validator=false.

+ */

+public interface FailureValidator {

+    boolean validate();

+

+    boolean validateConstraint(Constraint value);

+    boolean validateIssue(Issue value);

+    boolean validateActualValue(double value);

+}

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/validation/RunValidator.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/validation/RunValidator.java
new file mode 100644
index 0000000..f192cad
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/ares/validation/RunValidator.java
@@ -0,0 +1,39 @@
+/**

+ * <copyright>

+ * </copyright>

+ *

+ * $Id: RunValidator.java,v 1.1 2009/07/31 21:48:19 mparker Exp $

+ */

+package org.eclipse.amp.amf.testing.ares.validation;

+

+import java.util.Date;

+

+import org.eclipse.amp.amf.parameters.aPar.Parameter;

+

+import org.eclipse.amp.amf.testing.aTest.Constraint;

+import org.eclipse.amp.amf.testing.aTest.Model;

+

+import org.eclipse.amp.amf.testing.ares.Result;

+

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

+

+import org.metaabm.SContinuousSpace;

+

+/**

+ * A sample validator interface for {@link org.eclipse.amp.amf.testing.ares.Run}.

+ * This doesn't really do anything, and it's not a real EMF artifact.

+ * It was generated by the org.eclipse.emf.examples.generator.validator plug-in to illustrate how EMF's code generator can be extended.

+ * This can be disabled with -vmargs -Dorg.eclipse.emf.examples.generator.validator=false.

+ */

+public interface RunValidator {

+    boolean validate();

+

+    boolean validateModel(SContinuousSpace value);

+    boolean validateTestModel(Model value);

+    boolean validateParameterModel(org.eclipse.amp.amf.parameters.aPar.Model value);

+    boolean validateResult(Result value);

+    boolean validateParameters(EList<Parameter> value);

+    boolean validateConstraints(EList<Constraint> value);

+    boolean validateStarted(Date value);

+    boolean validateFinished(Date value);

+}

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/formatting/ATestFormatter.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/formatting/ATestFormatter.java
new file mode 100644
index 0000000..a7179bf
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/formatting/ATestFormatter.java
@@ -0,0 +1,25 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.amp.amf.testing.formatting;
+
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
+ * on how and when to use it 
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+public class ATestFormatter extends AbstractDeclarativeFormatter {
+	
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+		org.eclipse.amp.amf.testing.services.ATestGrammarAccess f = (org.eclipse.amp.amf.testing.services.ATestGrammarAccess) getGrammarAccess();
+
+		//...
+	}
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/scoping/ATestImportResolver.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/scoping/ATestImportResolver.java
new file mode 100644
index 0000000..2c05dc2
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/scoping/ATestImportResolver.java
@@ -0,0 +1,48 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

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

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+

+package org.eclipse.amp.amf.testing.scoping;

+

+import static org.eclipse.amp.amf.parameters.scoping.AParImportResolver.convertURI;

+

+import org.eclipse.amp.amf.parameters.scoping.AParImportResolver;

+import org.eclipse.amp.amf.testing.aTest.Tests;

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

+

+/**

+ * 

+ * @author mparker

+ * 

+ */

+public class ATestImportResolver extends AParImportResolver {

+    /**

+     * @param object

+     * @return

+     * @see org.eclipse.xtext.scoping.impl.ImportUriResolver#resolve(org.eclipse.emf.ecore.EObject)

+     */

+    public String resolve(EObject object) {

+        if (object instanceof Tests) {

+            Tests model = (Tests) object;

+            model.setImportURI(convertURI(model));

+        }

+        return super.resolve(object);

+    }

+

+    public static String convertURI(Tests tests) {

+        return convertURI(tests, tests.getImportURI());

+    }

+

+}

diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/scoping/ATestScopeProvider.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/scoping/ATestScopeProvider.java
new file mode 100644
index 0000000..b639176
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/scoping/ATestScopeProvider.java
@@ -0,0 +1,94 @@
+/*
+ * generated by Xtext
+ */
+package org.eclipse.amp.amf.testing.scoping;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.amp.amf.parameters.AParInterpreter;
+import org.eclipse.amp.amf.parameters.scoping.AParScopeProvider;
+import org.eclipse.amp.amf.testing.aTest.Constraint;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.xtext.scoping.IScope;
+import org.eclipse.xtext.scoping.IScopedElement;
+import org.eclipse.xtext.scoping.impl.ScopedElement;
+import org.eclipse.xtext.scoping.impl.SimpleScope;
+import org.eclipse.xtext.xtend.scoping.Scope;
+import org.metaabm.MetaABMPackage;
+import org.metaabm.SAgent;
+import org.metaabm.SContext;
+import org.metaabm.SState;
+import org.metaabm.SStateValue;
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#scoping
+ * on how and when to use it
+ *
+ */
+public class ATestScopeProvider extends AParScopeProvider {
+
+    SContext context;
+
+    /**
+     * @param object
+     * @param reference
+     * @return
+     * @see org.eclipse.xtext.scoping.impl.DefaultScopeProvider#getScope(org.eclipse.emf.ecore.EObject,
+     *      org.eclipse.emf.ecore.EReference)
+     */
+    public IScope getScope(EObject object, EReference reference) {
+        if (context == null) {
+            ResourceSet resourceSet = object.eResource().getResourceSet();
+            URI testFileURI = object.eResource().getURI();
+            testFileURI = testFileURI.trimFileExtension().appendFileExtension("apar");
+            Resource aparAnalog = resourceSet.getResource(testFileURI, true);
+            if (aparAnalog == null) {
+                StatusManager.getManager().handle(
+                                                  new Status(Status.WARNING, "org.eclipse.amp.amf.parameters",
+                                                  "Couldn't locate engine context."));
+            } else {
+                AParInterpreter interpreter = new AParInterpreter(ResourcesPlugin.getWorkspace().getRoot()
+                                                                  .getFile(new Path(testFileURI.toPlatformString(true))));
+                context = interpreter.getTargetModel();
+            }
+        }
+        if (object instanceof Constraint) {
+            Constraint constraint = (Constraint) object;
+            List<IScopedElement> allElems = new ArrayList<IScopedElement>();
+            if (reference.getEType() == MetaABMPackage.eINSTANCE.getSAgent()) {
+                for (SAgent agent : context.getAgents()) {
+                    allElems.add(ScopedElement.create(agent.getLabel(), agent));
+                }
+            } else if (reference.getEType() == MetaABMPackage.eINSTANCE.getSAttribute()) {
+                if (constraint.getAgent() != null) {
+                    findAttributes(constraint.getAgent(), allElems, "");
+                } else {
+                    return Scope.NULLSCOPE;
+                }
+            } else if (reference.getEType() == MetaABMPackage.eINSTANCE.getSStateValue()) {
+                if (constraint.getAttribute() instanceof SState) {
+                    SState state = (SState) constraint.getAttribute();
+                    for (SStateValue value : state.getOptions()) {
+                        allElems.add(ScopedElement.create(value.getLabel(), value));
+                    }
+                } else {
+                    return Scope.NULLSCOPE;
+                }
+            }
+            SimpleScope attrScope = new SimpleScope(allElems);
+            return attrScope;
+        }
+        return super.getScope(object, reference);
+    }
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/validation/ATestJavaValidator.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/validation/ATestJavaValidator.java
new file mode 100644
index 0000000..35da960
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/src/org/eclipse/amp/amf/testing/validation/ATestJavaValidator.java
@@ -0,0 +1,13 @@
+package org.eclipse.amp.amf.testing.validation;
+ 
+
+public class ATestJavaValidator extends AbstractATestJavaValidator {
+
+//	@Check
+//	public void checkTypeNameStartsWithCapital(Type type) {
+//		if (!Character.isUpperCase(type.getName().charAt(0))) {
+//			warning("Name should start with a capital", MyDslPackage.TYPE__NAME);
+//		}
+//	}
+
+}
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/text/description.txt b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/text/description.txt
new file mode 100644
index 0000000..de8a1fc
--- /dev/null
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing/text/description.txt
@@ -0,0 +1,32 @@
+Model Ares

+

+This model description is not a real EMF artifact. It was generated by the

+org.eclipse.emf.examples.generator.validator plug-in to illustrate how EMF's

+code generator can be extended.

+This can be disabled with -vmargs -Dorg.eclipse.emf.examples.generator.validator=false.

+

+Package ares <http://eclipse.org/amp/ares>

+

+  Class Run

+    Reference model : SContinuousSpace<<1..1>>

+    Reference testModel : Model<<1..1>>

+    Reference parameterModel : Model

+    Attribute result : Result

+    Reference parameters : Parameter<<0..*>>

+    Reference constraints : Constraint<<0..*>>

+    Attribute started : EDate

+    Attribute finished : EDate

+

+  Class Failure

+    Reference constraint : Constraint

+    Attribute issue : Issue<<1..1>>

+    Attribute actualValue : EDouble<<1..1>>

+

+  Enum Result

+    Literal Incomplete = 1

+    Literal Success = 2

+    Literal Failure = 3

+

+  Enum Issue

+    Literal BelowRange = 10

+    Literal AboveRange = 15