Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-01-28 13:56:35 +0000
committerEd Willink2016-02-02 15:51:44 +0000
commit861fe2727694f73d1479412512ad9e86c6c9d75f (patch)
tree6cdaa79fb06b7b67a5891a06216ffc3e9e940c4d
parentb31ccaad20743becf6110d1b8d10f18e4d8cd301 (diff)
downloadorg.eclipse.qvtd-861fe2727694f73d1479412512ad9e86c6c9d75f.tar.gz
org.eclipse.qvtd-861fe2727694f73d1479412512ad9e86c6c9d75f.tar.xz
org.eclipse.qvtd-861fe2727694f73d1479412512ad9e86c6c9d75f.zip
[486722] Migrate QVTr tests
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java10
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTcRelations.java3
-rw-r--r--tests/org.eclipse.qvtd.build.qvtrtoqvtc.tests/src/org/eclipse/qvtd/build/qvtrtoqvtc/tests/QvtrToQvtcTests.java2
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/META-INF/MANIFEST.MF8
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/AllQVTrelationTests.java7
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java296
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/.gitignore5
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqMM.ecore64
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqToStm.qvtras385
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/StmcMM.ecore60
10 files changed, 832 insertions, 8 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java
index b48c4b196..1398632c3 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java
@@ -17,7 +17,9 @@ import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.utilities.XMIUtil;
import org.eclipse.qvtd.compiler.internal.etl.mtc.QVTuConfiguration;
+import org.eclipse.qvtd.compiler.internal.qvtr2qvtc.QvtrToQvtcTransformation;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
@@ -50,10 +52,10 @@ public class QVTrCompilerChain extends AbstractCompilerChain
URI qvtctURI = prefixURI.appendFileExtension("ecore.oclas");
Resource cResource = createResource(qvtcURI);
Resource qvtcTraceResource = createResource(qvtctURI);
-//FIXME QvtrToQvtc t = new QvtrToQvtc(environmentFactory, rResource, cResource, qvtcTraceResource);
-// t.prepare();
-// t.execute();
- // t.saveTrace(qvtcTraceResource, XMIUtil.createSaveOptions());
+ QvtrToQvtcTransformation t = new QvtrToQvtcTransformation(environmentFactory, rResource, cResource, qvtcTraceResource);
+ t.prepare();
+ t.execute();
+// t.saveTrace(qvtcTraceResource, XMIUtil.createSaveOptions());
assertNoResourceErrors("Trace save", qvtcTraceResource);
// t.saveCore(cResource, XMIUtil.createSaveOptions());
assertNoResourceErrors("Core save", cResource);
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTcRelations.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTcRelations.java
index 7fe4528e6..e54a35bb1 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTcRelations.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTcRelations.java
@@ -1127,6 +1127,9 @@ public class QVTr2QVTcRelations {
ve1.setType(tcv.getType());
a.setSlotExpression(ve1);
Property tp = getProperty(dv.getName(), tcv.getType());
+ if (tp == null) {
+ tp = getProperty(dv.getName(), tcv.getType());
+ }
assert tp != null : "Property " + dv.getName() + ". not found in trace class " + tcv.getType().getName();
a.setTargetProperty(tp);
ve2.setReferredVariable(mdv);
diff --git a/tests/org.eclipse.qvtd.build.qvtrtoqvtc.tests/src/org/eclipse/qvtd/build/qvtrtoqvtc/tests/QvtrToQvtcTests.java b/tests/org.eclipse.qvtd.build.qvtrtoqvtc.tests/src/org/eclipse/qvtd/build/qvtrtoqvtc/tests/QvtrToQvtcTests.java
index 5f7feb370..ab40c4f7f 100644
--- a/tests/org.eclipse.qvtd.build.qvtrtoqvtc.tests/src/org/eclipse/qvtd/build/qvtrtoqvtc/tests/QvtrToQvtcTests.java
+++ b/tests/org.eclipse.qvtd.build.qvtrtoqvtc.tests/src/org/eclipse/qvtd/build/qvtrtoqvtc/tests/QvtrToQvtcTests.java
@@ -26,7 +26,7 @@ import org.junit.Test;
public class QvtrToQvtcTests extends LoadTestCase {
- private static URI TESTS_BASE_URI = URI.createPlatformResourceURI("/org.eclipse.qvtd.build.qvtrtoqvtc.tests/bin/org/eclipse/qvtd/build/qvtrtoqvtc/tests/", true);
+ private static URI TESTS_BASE_URI = URI.createPlatformResourceURI("/org.eclipse.qvtd.build.qvtrtoqvtc.tests/bin/org/eclipse/qvtd/build/qvtrtoqvtc/tests", true);
/* (non-Javadoc)
* @see org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase#setUp()
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/META-INF/MANIFEST.MF
index 034e4a193..9f2737fea 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/META-INF/MANIFEST.MF
@@ -7,8 +7,12 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.qvtd.xtext.qvtbase.tests;bundle-version="[0.13.0,0.14.0)";visibility:=reexport,
- org.eclipse.qvtd.xtext.qvtrelation;bundle-version="[0.13.0,0.14.0)";visibility:=reexport,
+ org.eclipse.qvtd.xtext.qvtrelation.ui;bundle-version="[0.13.0,0.14.0)";visibility:=reexport,
org.eclipse.qvt;bundle-version="[0.13.0,0.14.0)",
org.eclipse.qvtd.examples.qvtrelation.modelmorf;bundle-version="[0.13.0,0.14.0)",
- org.eclipse.qvtd.examples.qvtrelation.reltocore;bundle-version="[0.13.0,0.14.0)"
+ org.eclipse.qvtd.examples.qvtrelation.reltocore;bundle-version="[0.13.0,0.14.0)",
+ org.eclipse.qvtd.pivot.qvtimperative;bundle-version="[0.13.0,0.14.0)",
+ org.eclipse.qvtd.compiler;bundle-version="[0.13.0,0.14.0)",
+ org.eclipse.qvtd.codegen;bundle-version="[0.13.0,0.14.0)",
+ org.eclipse.qvtd.xtext.qvtimperative.tests;bundle-version="[0.13.0,0.14.0)"
Export-Package: org.eclipse.qvtd.xtext.qvtrelation.tests
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/AllQVTrelationTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/AllQVTrelationTests.java
index 4808801a1..7a8afcf68 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/AllQVTrelationTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/AllQVTrelationTests.java
@@ -14,6 +14,8 @@ package org.eclipse.qvtd.xtext.qvtrelation.tests;
import java.util.Arrays;
+import org.eclipse.emf.common.EMFPlugin;
+
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
@@ -30,7 +32,7 @@ public class AllQVTrelationTests extends TestCase
}
public static Test suite() {
- TestSuite result = new TestSuite("QVTr Editor Support");
+ TestSuite result = new TestSuite("All QVTrelation Tests");
result.addTestSuite(LoadTests.class);
// if (EMFPlugin.IS_ECLIPSE_RUNNING) {
// result.addTestSuite(EditorTests.class);
@@ -38,6 +40,9 @@ public class AllQVTrelationTests extends TestCase
// else { // Bug 370824 Bug 371394 causes this to fail on Hudson
// result.addTestSuite(UsageTests.class);
// }
+ if (!EMFPlugin.IS_ECLIPSE_RUNNING) { // FIXME should work as plugin test too
+ result.addTestSuite(QVTrCompilerTests.class);
+ }
return result;
}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
new file mode 100644
index 000000000..59be47075
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2016 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.qvtd.xtext.qvtrelation.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
+import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+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.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.examples.codegen.dynamic.OCL2JavaFileObject;
+import org.eclipse.ocl.pivot.evaluation.tx.Transformer;
+import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
+import org.eclipse.ocl.pivot.model.OCLstdlib;
+import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
+import org.eclipse.qvtd.codegen.qvti.QVTiCodeGenOptions;
+import org.eclipse.qvtd.codegen.qvti.java.QVTiCodeGenerator;
+import org.eclipse.qvtd.compiler.AbstractCompilerChain;
+import org.eclipse.qvtd.compiler.QVTrCompilerChain;
+import org.eclipse.qvtd.pivot.qvtbase.Transformation;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
+import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
+import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
+import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
+import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
+import org.eclipse.qvtd.xtext.qvtimperative.tests.ModelNormalizer;
+import org.eclipse.qvtd.xtext.qvtimperative.tests.QVTiTestUtil;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests that QVTc files can be compiled and executed.
+ */
+public class QVTrCompilerTests extends LoadTestCase
+{
+ private static URI TESTS_BASE_URI = URI.createPlatformResourceURI("/org.eclipse.qvtd.xtext.qvtrelation.tests/bin/org/eclipse/qvtd/xtext/qvtrelation/tests", true);
+
+ protected static class MyQVT extends QVTimperative
+ {
+ protected final @NonNull String testFolderName;
+ protected final @NonNull URI testFolderURI;
+ protected final @NonNull URI samplesBaseUri;
+ private QVTrCompilerChain compilerChain = null;
+ private BasicQVTiExecutor interpretedExecutor = null;
+ private QVTiTransformationExecutor generatedExecutor = null;
+ private Set<@NonNull String> nsURIs = new HashSet<@NonNull String>();
+
+ public MyQVT(@NonNull String testFolderName, @NonNull EPackage... eInstances) {
+ super(new QVTiEnvironmentFactory(getProjectMap(), null));
+ this.testFolderName = testFolderName;
+ this.testFolderURI = TESTS_BASE_URI.appendSegment(testFolderName);
+ this.samplesBaseUri = testFolderURI.appendSegment("samples");
+ //
+ // Explicitly install the eInstances that would normally make it into the ProjectMap from extension point registrations.
+ // Test models are not registered via extension point so we have to do this manually.
+ //
+ ResourceSetImpl resourceSet = (ResourceSetImpl) getResourceSet();
+ for (EPackage eInstance : eInstances) {
+ nsURIs.add(eInstance.getNsURI());
+ resourceSet.getURIResourceMap().put(testFolderURI.appendSegment(eInstance.getName()+".ecore"), eInstance.eResource());
+ }
+ }
+
+ public @NonNull Transformation compileTransformation(@NonNull String testFileName, @NonNull String outputName) throws Exception {
+ Map<@NonNull String, @NonNull Map<AbstractCompilerChain.Key<?>, Object>> options = new HashMap<@NonNull String, @NonNull Map<AbstractCompilerChain.Key<?>, Object>>();
+ compilerChain = new QVTrCompilerChain(getEnvironmentFactory(), testFolderURI.appendSegment(testFileName), options);
+ compilerChain.setOption(AbstractCompilerChain.DEFAULT_STEP, AbstractCompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions);
+ return compilerChain.compile(outputName);
+ }
+
+ public @NonNull Class<? extends Transformer> createGeneratedClass(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
+ ResourceSet resourceSet = getResourceSet();
+ resourceSet.getPackageRegistry().put(GenModelPackage.eNS_URI, GenModelPackage.eINSTANCE);
+ for (String genModelFile : genModelFiles) {
+ URI genModelURI = testFolderURI.appendSegment(genModelFile);
+ loadGenModel(genModelURI);
+ }
+ QVTiCodeGenerator cg = new QVTiCodeGenerator(getEnvironmentFactory(), asTransformation);
+ QVTiCodeGenOptions options = cg.getOptions();
+ options.setUseNullAnnotations(true);
+ options.setPackagePrefix("cg");
+ cg.generateClassFile();
+ cg.saveSourceFile("../org.eclipse.qvtd.xtext.qvtcore.tests/test-gen/");
+ File explicitClassPath = new File("../org.eclipse.qvtd.xtext.qvtcore.tests/bin");
+ String qualifiedClassName = cg.getQualifiedName();
+ String javaCodeSource = cg.generateClassFile();
+ OCL2JavaFileObject.saveClass(explicitClassPath.toString(), qualifiedClassName, javaCodeSource);
+ @SuppressWarnings("unchecked")
+ Class<? extends Transformer> txClass = (Class<? extends Transformer>) OCL2JavaFileObject.loadExplicitClass(explicitClassPath, qualifiedClassName);
+ if (txClass == null) {
+ TestCase.fail("Failed to compile transformation");
+ throw new UnsupportedOperationException();
+ }
+ return txClass;
+ }
+
+ public void createGeneratedExecutor(@NonNull Transformation asTransformation, @NonNull String @NonNull... genModelFiles) throws Exception {
+ Class<? extends Transformer> txClass = createGeneratedClass(asTransformation, genModelFiles);
+ createGeneratedExecutor(txClass);
+ }
+
+ public QVTiTransformationExecutor createGeneratedExecutor(Class<? extends Transformer> txClass) throws Exception {
+ return generatedExecutor = new QVTiTransformationExecutor(getEnvironmentFactory(), txClass);
+ }
+
+ public @NonNull BasicQVTiExecutor createInterpretedExecutor(@NonNull Transformation asTransformation) throws Exception {
+ interpretedExecutor = new QVTiIncrementalExecutor(getEnvironmentFactory(), asTransformation, QVTiIncrementalExecutor.Mode.LAZY);
+ return interpretedExecutor;
+ }
+
+ public void createModel(@NonNull String modelName, @NonNull String modelFile) {
+ URI modelURI = samplesBaseUri.appendSegment(modelFile);
+ interpretedExecutor.createModel(modelName, modelURI, null);
+ }
+
+ @Override
+ public synchronized void dispose() {
+ super.dispose();
+ if (interpretedExecutor != null) {
+ interpretedExecutor.dispose();
+ }
+ if (compilerChain != null) {
+ compilerChain.dispose();
+ }
+ /**
+ * Remove the eInstances from the EPackage.Registry.INSTANCE so that global registrations from the calling test
+ * do not confuse subsequent tests that may want to use dynamic models.
+ */
+ for (String nsURI : nsURIs) {
+ EPackage.Registry.INSTANCE.remove(nsURI);
+ }
+ }
+
+ public void executeTransformation() throws Exception {
+ if (interpretedExecutor != null) {
+ interpretedExecutor.execute();
+ interpretedExecutor.saveModels(TestsXMLUtil.defaultSavingOptions);
+ }
+ else {
+ generatedExecutor.getTransformer().run();
+ }
+ }
+
+ @Override
+ public @NonNull QVTiEnvironmentFactory getEnvironmentFactory() {
+ return (QVTiEnvironmentFactory) super.getEnvironmentFactory();
+ }
+
+ public @NonNull Map<Object, Object> getSaveOptions() {
+ return TestsXMLUtil.defaultSavingOptions;
+ }
+
+ private void loadGenModel(@NonNull URI genModelURI) {
+ ResourceSet resourceSet = getResourceSet();
+ MetamodelManagerInternal metamodelManager = getMetamodelManager();
+ Resource csGenResource = resourceSet.getResource(genModelURI, true);
+ for (EObject eObject : csGenResource.getContents()) {
+ if (eObject instanceof GenModel) {
+ GenModel genModel = (GenModel)eObject;
+ genModel.reconcile();
+ metamodelManager.addGenModel(genModel);
+ }
+ }
+ }
+
+ public void loadInput(@NonNull String modelName, @NonNull String modelFile) {
+ URI modelURI = samplesBaseUri.appendSegment(modelFile);
+ if (interpretedExecutor != null) {
+ interpretedExecutor.loadModel(modelName, modelURI);
+ }
+ else {
+ Resource inputResource = getResourceSet().getResource(modelURI, true);
+ generatedExecutor.getTransformer().addRootObjects(modelName, ClassUtil.nonNullState(inputResource.getContents()));
+ }
+ }
+
+ public void saveOutput(@NonNull String modelName, @NonNull String modelFile, @Nullable String expectedFile, @Nullable ModelNormalizer normalizer) throws IOException, InterruptedException {
+ URI modelURI = samplesBaseUri.appendSegment(modelFile);
+ URI referenceModelURI = samplesBaseUri.appendSegment(expectedFile);
+ ResourceSet resourceSet = getResourceSet();
+ Resource outputResource;
+ if (interpretedExecutor != null) {
+ outputResource = interpretedExecutor.saveModel(modelName, modelURI, null, getSaveOptions());
+ }
+ else {
+ outputResource = resourceSet.createResource(modelURI);
+ outputResource.getContents().addAll(generatedExecutor.getTransformer().getRootObjects(modelName));
+ outputResource.save(getSaveOptions());
+ }
+ Resource referenceResource = resourceSet.getResource(referenceModelURI, true);
+ assert referenceResource != null;
+ if (normalizer != null) {
+ normalizer.normalize(referenceResource);
+ normalizer.normalize(outputResource);
+ }
+ assertSameModel(referenceResource, outputResource);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase#setUp()
+ */
+ @Before
+ public void setUp() throws Exception {
+
+ BaseLinkingService.DEBUG_RETRY.setState(true);
+ super.setUp();
+ OCLstdlib.install();
+ QVTrTestUtil.doQVTrelationSetup();
+ QVTiTestUtil.doQVTimperativeSetup();
+// QVTcorePivotStandaloneSetup.doSetup();
+// QVTimperativePivotStandaloneSetup.doSetup();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase#tearDown()
+ */
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @Test
+ public void testQVTrCompiler_SeqToStm() throws Exception {
+// AbstractTransformer.INVOCATIONS.setState(true);
+ MyQVT myQVT = new MyQVT("seq2stm");
+// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
+ try {
+ Transformation asTransformation = myQVT.compileTransformation("SeqToStm", "stm");
+ myQVT.createInterpretedExecutor(asTransformation);
+ myQVT.loadInput("seqDgm", "Families.xmi");
+ myQVT.createModel(QVTimperativeUtil.MIDDLE_DOMAIN_NAME, "Families2Persons_trace.xmi");
+ myQVT.createModel("stm", "Persons_Interpreted.xmi");
+ myQVT.executeTransformation();
+ myQVT.saveOutput("stm", "Persons_Interpreted.xmi", "Persons_expected.xmi", null);
+ }
+ finally {
+ myQVT.dispose();
+ }
+ }
+
+/* @Test
+ public void testQVTrCompiler_Families2Persons_CG() throws Exception {
+// AbstractTransformer.INVOCATIONS.setState(true);
+// Scheduler.EDGE_ORDER.setState(true);
+// Scheduler.REGION_DEPTH.setState(true);
+// Scheduler.REGION_ORDER.setState(true);
+// Scheduler.REGION_TRAVERSAL.setState(true);
+// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true);
+ MyQVT myQVT = new MyQVT("families2persons", Families2PersonsPackage.eINSTANCE, FamiliesPackage.eINSTANCE, PersonsPackage.eINSTANCE);
+// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
+ try {
+ Transformation asTransformation = myQVT.compileTransformation("Families2Persons", "person");
+ Class<? extends Transformer> txClass = myQVT.createGeneratedClass(asTransformation, "Families2Persons.genmodel");
+ //
+ myQVT.createGeneratedExecutor(txClass);
+ myQVT.loadInput("family", "FamiliesBig.xmi");
+ myQVT.executeTransformation();
+ myQVT.saveOutput("person", "PersonsBig_CG.xmi", "PersonsBig_expected.xmi", Families2PersonsNormalizer.INSTANCE);
+ //
+ myQVT.createGeneratedExecutor(txClass);
+ myQVT.loadInput("family", "Families.xmi");
+ myQVT.executeTransformation();
+ myQVT.saveOutput("person", "Persons_CG.xmi", "Persons_expected.xmi", Families2PersonsNormalizer.INSTANCE);
+ }
+ finally {
+ myQVT.dispose();
+ }
+ }*/
+}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/.gitignore b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/.gitignore
new file mode 100644
index 000000000..d231be9c4
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/.gitignore
@@ -0,0 +1,5 @@
+/SeqToStm.ecore.oclas
+/SeqToStm.qvtcas
+/SeqToStm.qvtm.qvtcas
+/SeqToStm.qvtp.qvtias
+/SeqToStm.qvtu.qvtcas
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqMM.ecore b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqMM.ecore
new file mode 100644
index 000000000..e2cfe0bb3
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqMM.ecore
@@ -0,0 +1,64 @@
+<?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="SeqMM" nsURI="SeqMM">
+ <eClassifiers xsi:type="ecore:EClass" name="Dummy">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="hasInteraction" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//Interaction" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="containedState" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//State" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Interaction">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="lifeline" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//LifeLine" containment="true" eOpposite="#//LifeLine/interaction"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="message" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//Message" containment="true" eOpposite="#//Message/interaction"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LifeLine">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="msgEvent" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//MessageEvent" containment="true"
+ eOpposite="#//MessageEvent/lifeline"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="state" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//State" eOpposite="#//State/lifeline"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="interaction" ordered="false"
+ lowerBound="1" eType="#//Interaction" eOpposite="#//Interaction/lifeline"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Message">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="messageId" ordered="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="interaction" ordered="false"
+ lowerBound="1" eType="#//Interaction" eOpposite="#//Interaction/message"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="event" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//MessageEvent" eOpposite="#//MessageEvent/message"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="State">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="messageevent" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//MessageEvent" eOpposite="#//MessageEvent/state"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="lifeline" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//LifeLine" eOpposite="#//LifeLine/state"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Event"/>
+ <eClassifiers xsi:type="ecore:EClass" name="MessageEvent" eSuperTypes="#//Event">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" ordered="false" lowerBound="1"
+ eType="#//MessageEventType" defaultValueLiteral="Send"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="prev" ordered="false" lowerBound="1"
+ eType="#//MessageEvent"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="next" ordered="false" lowerBound="1"
+ eType="#//MessageEvent"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="message" ordered="false"
+ lowerBound="1" eType="#//Message" eOpposite="#//Message/event"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="lifeline" ordered="false"
+ lowerBound="1" eType="#//LifeLine" eOpposite="#//LifeLine/msgEvent"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="state" ordered="false"
+ lowerBound="1" eType="#//State" eOpposite="#//State/messageevent"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="MessageEventType">
+ <eLiterals name="Send"/>
+ <eLiterals name="Receive"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqToStm.qvtras b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqToStm.qvtras
new file mode 100644
index 000000000..94b610508
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/SeqToStm.qvtras
@@ -0,0 +1,385 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<qvtr:RelationModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:pivot="http://www.eclipse.org/ocl/2015/Pivot" xmlns:qvtr="http://www.eclipse.org/qvt/2015/QVTrelation"
+ xmlns:qvtt="http://www.eclipse.org/qvt/2015/QVTtemplate" xsi:schemaLocation="http://www.eclipse.org/ocl/2015/Pivot java://org.eclipse.ocl.pivot.PivotPackage http://www.eclipse.org/qvt/2015/QVTrelation java://org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage http://www.eclipse.org/qvt/2015/QVTtemplate java://org.eclipse.qvtd.pivot.qvttemplate.QVTtemplatePackage"
+ name="SeqToStm.qvtr" externalURI="platform:/resource/org.eclipse.qvtd.build.qvtrtoqvtc.tests/src/org/eclipse/qvtd/build/qvtrtoqvtc/tests/seqtostm/SeqToStm.qvtr">
+ <ownedComments body="*****************************************************************************&#xA;Copyright (c) 2007,2008 Tata Consultancy Services and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;&#xA;Contributors:&#xA;TCS - initial implementation for ModelMorf&#xA;E.D.Willink - alignment with evolved specification&#xA;*****************************************************************************"/>
+ <ownedImports name="SeqMM" importedNamespace="pivot:Package SeqMM.ecore.oclas#P.SeqMM">
+ <ownedComments body="*****************************************************************************&#xA;Copyright (c) 2007,2008 Tata Consultancy Services and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;&#xA;Contributors:&#xA;TCS - initial implementation for ModelMorf&#xA;E.D.Willink - alignment with evolved specification&#xA;*****************************************************************************"/>
+ </ownedImports>
+ <ownedImports name="StmcMM" importedNamespace="pivot:Package StmcMM.ecore.oclas#P.StmcMM"/>
+ <ownedPackages xmi:id="P." name="">
+ <ownedClasses xsi:type="qvtr:RelationalTransformation" xmi:id="T..SeqToStm" name="SeqToStm"
+ superClasses="http://www.eclipse.org/ocl/2015/Library.oclas#T.ocl.OclElement">
+ <modelParameter xmi:id="qT..SeqToStm.seqDgm" name="seqDgm" usedPackage="SeqMM.ecore.oclas#P.SeqMM"/>
+ <modelParameter xmi:id="qT..SeqToStm.stm" name="stm" usedPackage="StmcMM.ecore.oclas#P.StmcMM"/>
+ <rule xsi:type="qvtr:Relation" name="InteractionToStateMachine" isTopLevel="true">
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.InteractionToStateMachine.seqDgm"
+ isCheckable="true" isEnforceable="false" typedModel="#qT..SeqToStm.seqDgm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.0/@variable.1">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.0/@variable.1"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.Interaction">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.Interaction.name">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.0/@variable.0"/>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.InteractionToStateMachine.stm"
+ isCheckable="true" isEnforceable="true" typedModel="#qT..SeqToStm.stm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.0/@variable.2">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.0/@variable.2"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.StateMachine">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.StateMachine.name">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.0/@variable.0"/>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <variable name="sn" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"/>
+ <variable name="i" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"/>
+ <variable name="s" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"/>
+ </rule>
+ <rule xsi:type="qvtr:Relation" name="StateToState" isTopLevel="true">
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.StateToState.seqDgm"
+ isCheckable="true" isEnforceable="false" typedModel="#qT..SeqToStm.seqDgm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.1">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.1"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.State">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.State.name">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.0"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.State.lifeline">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.LifeLine"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.2"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.LifeLine">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.LifeLine.interaction">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.3"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.Interaction"/>
+ </part>
+ </value>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.StateToState.stm"
+ isCheckable="true" isEnforceable="true" typedModel="#qT..SeqToStm.stm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.4">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.4"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.State">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.State.name">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.0"/>
+ </part>
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.State.owner">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.5"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.StateMachine"/>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <variable name="sn" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"/>
+ <variable name="st1" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"/>
+ <variable name="l" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.LifeLine"/>
+ <variable name="i" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"/>
+ <variable name="st2" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"/>
+ <variable name="s" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"/>
+ <when>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.0">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.3"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.1/@variable.5"/>
+ </conditionExpression>
+ </predicate>
+ </when>
+ </rule>
+ <rule xsi:type="qvtr:Relation" name="MessageToTransition" isTopLevel="true">
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.MessageToTransition.seqDgm"
+ isCheckable="true" isEnforceable="false" typedModel="#qT..SeqToStm.seqDgm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.1">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.1"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.Message">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.Message.messageId">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.0"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.Message.event">
+ <value xsi:type="qvtt:CollectionTemplateExp" type="#//@ownedPackages.1/@ownedClasses.0"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.2"
+ referredCollectionType="http://www.eclipse.org/ocl/2015/Orphanage#//@ownedClasses.30"
+ rest="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.7">
+ <member xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.3"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.type">
+ <value xsi:type="pivot:EnumLiteralExp" type="pivot:Enumeration SeqMM.ecore.oclas#T.SeqMM.MessageEventType"
+ referredLiteral="SeqMM.ecore.oclas#//@ownedPackages.0/@ownedClasses.7/@ownedLiterals.0"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.state">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.4"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.State"/>
+ </part>
+ </member>
+ <member xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.5"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.type">
+ <value xsi:type="pivot:EnumLiteralExp" type="pivot:Enumeration SeqMM.ecore.oclas#T.SeqMM.MessageEventType"
+ referredLiteral="SeqMM.ecore.oclas#//@ownedPackages.0/@ownedClasses.7/@ownedLiterals.1"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.state">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.6"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.State"/>
+ </part>
+ </member>
+ </value>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.Message.interaction">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.8"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.Interaction"/>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.MessageToTransition.stm"
+ isCheckable="true" isEnforceable="true" typedModel="#qT..SeqToStm.stm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.9">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.9"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.Transition">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Transition.name">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.0"/>
+ </part>
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Transition.fromState">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.10"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.State"/>
+ </part>
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Transition.toState">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.11"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.State"/>
+ </part>
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Transition.action">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.SendMsg"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.12"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.SendMsg">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.SendMsg.message">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Message"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.13"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.Message">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Message.messageId">
+ <value xsi:type="pivot:VariableExp" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.0"/>
+ </part>
+ </value>
+ </part>
+ </value>
+ </part>
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Transition.owner">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.14"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.StateMachine"/>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <variable name="mid" isRequired="false" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#String"/>
+ <variable name="m1" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"/>
+ <variable name="eSet" type="#//@ownedPackages.1/@ownedClasses.0"/>
+ <variable name="send" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"/>
+ <variable name="ist1" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"/>
+ <variable name="receive" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"/>
+ <variable name="ist2" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"/>
+ <variable isImplicit="true"/>
+ <variable name="i" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"/>
+ <variable name="tr" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"/>
+ <variable name="fst" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"/>
+ <variable name="tst" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"/>
+ <variable name="sm" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.SendMsg"/>
+ <variable name="m2" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Message"/>
+ <variable name="s" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"/>
+ <when>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.0">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Interaction"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.8"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.StateMachine"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.14"/>
+ </conditionExpression>
+ </predicate>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.1">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.4"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.10"/>
+ </conditionExpression>
+ </predicate>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.1">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.6"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.2/@variable.11"/>
+ </conditionExpression>
+ </predicate>
+ </when>
+ </rule>
+ <rule xsi:type="qvtr:Relation" name="MessageSequenceToTransitionSequence" isTopLevel="true">
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.MessageSequenceToTransitionSequence.seqDgm"
+ isCheckable="true" isEnforceable="false" typedModel="#qT..SeqToStm.seqDgm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.0">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.0"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.type">
+ <value xsi:type="pivot:EnumLiteralExp" type="pivot:Enumeration SeqMM.ecore.oclas#T.SeqMM.MessageEventType"
+ referredLiteral="SeqMM.ecore.oclas#//@ownedPackages.0/@ownedClasses.7/@ownedLiterals.1"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.message">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.1"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.Message"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.state">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.2"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.State"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.next">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.3"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.type">
+ <value xsi:type="pivot:EnumLiteralExp" type="pivot:Enumeration SeqMM.ecore.oclas#T.SeqMM.MessageEventType"
+ referredLiteral="SeqMM.ecore.oclas#//@ownedPackages.0/@ownedClasses.7/@ownedLiterals.0"/>
+ </part>
+ <part referredProperty="SeqMM.ecore.oclas#p.SeqMM.MessageEvent.message">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.4"
+ referredClass="SeqMM.ecore.oclas#T.SeqMM.Message"/>
+ </part>
+ </value>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <domain xsi:type="qvtr:RelationDomain" xmi:id="qD..SeqToStm.MessageSequenceToTransitionSequence.stm"
+ isCheckable="true" isEnforceable="true" typedModel="#qT..SeqToStm.stm"
+ rootVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.5">
+ <pattern>
+ <templateExpression xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.5"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.Transition">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.Transition.toState">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.6"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.State">
+ <part referredProperty="StmcMM.ecore.oclas#p.StmcMM.State.outTransition">
+ <value xsi:type="qvtt:ObjectTemplateExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"
+ bindsTo="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.7"
+ referredClass="StmcMM.ecore.oclas#T.StmcMM.Transition"/>
+ </part>
+ </value>
+ </part>
+ </templateExpression>
+ </pattern>
+ </domain>
+ <variable name="ev1" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"/>
+ <variable name="m1" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"/>
+ <variable name="est" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"/>
+ <variable name="ev2" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"/>
+ <variable name="m2" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"/>
+ <variable name="tr1" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"/>
+ <variable name="tst" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"/>
+ <variable name="tr2" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"/>
+ <when>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.1">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.State"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.2"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.State"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.6"/>
+ </conditionExpression>
+ </predicate>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.2">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.1"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.5"/>
+ </conditionExpression>
+ </predicate>
+ <predicate>
+ <conditionExpression xsi:type="qvtr:RelationCallExp" type="pivot:PrimitiveType http://www.eclipse.org/ocl/2015/Library.oclas#Boolean"
+ referredRelation="#//@ownedPackages.0/@ownedClasses.0/@rule.2">
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class SeqMM.ecore.oclas#T.SeqMM.Message"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.4"/>
+ <argument xsi:type="pivot:VariableExp" type="pivot:Class StmcMM.ecore.oclas#T.StmcMM.Transition"
+ referredVariable="#//@ownedPackages.0/@ownedClasses.0/@rule.3/@variable.7"/>
+ </conditionExpression>
+ </predicate>
+ </when>
+ </rule>
+ <ownedKey identifies="StmcMM.ecore.oclas#T.StmcMM.StateMachine" part="StmcMM.ecore.oclas#p.StmcMM.StateMachine.name"/>
+ <ownedKey identifies="StmcMM.ecore.oclas#T.StmcMM.State" part="StmcMM.ecore.oclas#p.StmcMM.State.name StmcMM.ecore.oclas#p.StmcMM.State.owner"/>
+ <ownedKey identifies="StmcMM.ecore.oclas#T.StmcMM.Transition" part="StmcMM.ecore.oclas#p.StmcMM.Transition.name StmcMM.ecore.oclas#p.StmcMM.Transition.owner StmcMM.ecore.oclas#p.StmcMM.Transition.fromState StmcMM.ecore.oclas#p.StmcMM.Transition.toState"/>
+ <ownedKey identifies="StmcMM.ecore.oclas#T.StmcMM.SendMsg" part="StmcMM.ecore.oclas#p.StmcMM.SendMsg.message"/>
+ <ownedKey identifies="StmcMM.ecore.oclas#T.StmcMM.Message" part="StmcMM.ecore.oclas#p.StmcMM.Message.messageId"/>
+ </ownedClasses>
+ </ownedPackages>
+ <ownedPackages xmi:id="P.$$" name="$$" URI="http://www.eclipse.org/ocl/2015/Orphanage"
+ nsPrefix="orphanage">
+ <ownedClasses xsi:type="pivot:SetType" name="Set" superClasses="#//@ownedPackages.1/@ownedClasses.1"
+ elementType="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <ownedBindings>
+ <ownedSubstitutions actual="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ formal="http://www.eclipse.org/ocl/2015/Library.oclas#t.ocl..SetT"/>
+ </ownedBindings>
+ </ownedClasses>
+ <ownedClasses xsi:type="pivot:CollectionType" name="UniqueCollection" superClasses="#//@ownedPackages.1/@ownedClasses.2"
+ elementType="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <ownedBindings>
+ <ownedSubstitutions actual="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ formal="http://www.eclipse.org/ocl/2015/Library.oclas#t.ocl..UniqueCollectionT"/>
+ </ownedBindings>
+ </ownedClasses>
+ <ownedClasses xsi:type="pivot:CollectionType" name="Collection" superClasses="http://www.eclipse.org/ocl/2015/Library.oclas#T.ocl.OclAny"
+ elementType="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent">
+ <ownedBindings>
+ <ownedSubstitutions actual="pivot:Class SeqMM.ecore.oclas#T.SeqMM.MessageEvent"
+ formal="http://www.eclipse.org/ocl/2015/Library.oclas#t.ocl..CollectionT"/>
+ </ownedBindings>
+ </ownedClasses>
+ </ownedPackages>
+</qvtr:RelationModel>
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/StmcMM.ecore b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/StmcMM.ecore
new file mode 100644
index 000000000..a9cbfd565
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/seq2stm/StmcMM.ecore
@@ -0,0 +1,60 @@
+<?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="StmcMM" nsURI="StmcMM">
+ <eClassifiers xsi:type="ecore:EClass" name="Dummy">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="containsStateMachine" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//StateMachine" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="containsMessage" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//Message" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StateMachine">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="state" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//State" containment="true" eOpposite="#//State/owner"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="transition" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//Transition" containment="true" eOpposite="#//Transition/owner"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="State">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="owner" ordered="false"
+ lowerBound="1" eType="#//StateMachine" eOpposite="#//StateMachine/state"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="inTransition" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//Transition" eOpposite="#//Transition/toState"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="outTransition" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//Transition" eOpposite="#//Transition/fromState"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Transition">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="guard" ordered="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="owner" ordered="false"
+ lowerBound="1" eType="#//StateMachine" eOpposite="#//StateMachine/transition"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="toState" ordered="false"
+ lowerBound="1" eType="#//State" eOpposite="#//State/inTransition"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="fromState" ordered="false"
+ lowerBound="1" eType="#//State" eOpposite="#//State/outTransition"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="trigger" ordered="false"
+ lowerBound="1" eType="#//Event" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="action" ordered="false"
+ lowerBound="1" eType="#//Action" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Event">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Action">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Message">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="messageId" ordered="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SendMsg" eSuperTypes="#//Action">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="message" ordered="false"
+ lowerBound="1" eType="#//Message"/>
+ </eClassifiers>
+</ecore:EPackage>

Back to the top