diff options
author | Ed Willink | 2017-03-03 13:45:00 +0000 |
---|---|---|
committer | Ed Willink | 2017-03-11 10:47:23 +0000 |
commit | 40b1c3c9d15927e27a2a1aea7455b0bc9641e101 (patch) | |
tree | 6ada36d72b830544e9ff4f01a16ae078feed0bc2 | |
parent | a6d7c60b8340107297c5aaeca76dced4bd0c234c (diff) | |
download | org.eclipse.qvtd-40b1c3c9d15927e27a2a1aea7455b0bc9641e101.tar.gz org.eclipse.qvtd-40b1c3c9d15927e27a2a1aea7455b0bc9641e101.tar.xz org.eclipse.qvtd-40b1c3c9d15927e27a2a1aea7455b0bc9641e101.zip |
[512737] Add MiToSiSimpleWithKeys example
3 files changed, 179 insertions, 0 deletions
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 index f70b77bb2..311ca8c26 100644 --- 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 @@ -500,6 +500,7 @@ public class QVTrCompilerTests extends LoadTestCase // AbstractTransformer.EXCEPTIONS.setState(true); // AbstractTransformer.INVOCATIONS.setState(true); // QVTm2QVTp.PARTITIONING.setState(true); + // QVTr2QVTc.SYNTHESIS.setState(true); MyQVT myQVT = new MyQVT("mitosi"); try { Class<? extends Transformer> txClass = myQVT.buildTransformation("mitosi", "MiToSiSimple.qvtr", "java", @@ -525,6 +526,40 @@ public class QVTrCompilerTests extends LoadTestCase } @Test + public void testQVTrCompiler_MiToSiSimpleWithKeys_CG() throws Exception { + ToStringVisitor.SHOW_ALL_MULTIPLICITIES = true; + // Splitter.GROUPS.setState(true); + // Splitter.RESULT.setState(true); + // Splitter.STAGES.setState(true); + // AbstractTransformer.EXCEPTIONS.setState(true); + // AbstractTransformer.INVOCATIONS.setState(true); + // QVTm2QVTp.PARTITIONING.setState(true); + MyQVT myQVT = new MyQVT("mitosi"); + try { + Class<? extends Transformer> txClass = myQVT.buildTransformation("mitosi", "MiToSiSimpleWithKeys.qvtr", "java", + "http://www.eclipse.org/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys", false); + // Class<? extends Transformer> txClass = MiToSiSimpleWithKeys.class; + // + // myQVT.assertRegionCount(BasicMappingRegionImpl.class, 0); + // myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0); + // myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0); + // myQVT.assertRegionCount(MicroMappingRegionImpl.class, 8); + myQVT.createGeneratedExecutor(txClass); + myQVT.loadInput("uml", "transportuml.xml"); + myQVT.executeTransformation(); + myQVT.saveOutput("java", "transportjava_CG.xml", "transportjava.xml", null); + // + // myQVT.createGeneratedExecutor(txClass); + // myQVT.loadInput("seqDgm", "SeqUM.xmi"); + // myQVT.executeTransformation(); + // myQVT.saveOutput("stm", "StmcUM_CG.xmi", "StmcUM_expected.xmi", null); + } + finally { + myQVT.dispose(); + } + } + + @Test public void testQVTrCompiler_SeqToStm() throws Exception { // AbstractTransformer.EXCEPTIONS.setState(true); // AbstractTransformer.INVOCATIONS.setState(true); diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr new file mode 100644 index 000000000..6382ea516 --- /dev/null +++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr @@ -0,0 +1,143 @@ +/******************************************************************************* + * Copyright (c) 2007,2008 Tata Consultancy Services 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: + * TCS - initial implementation for ModelMorf + * E.D.Willink - alignment with evolved specification + *******************************************************************************/ +import ecoreMM : 'http://www.eclipse.org/emf/2002/Ecore'; +import umlmmmi : 'umlMM.emof'::umlmmmi; +import javammsi : 'javaMM.emof'::javammsi; + +/* + * This variant of MiToSiSimple has gratuitous keys. These should not damage execution + * but at the time of writing they caused a scheduling failure. + */ +transformation MiToSiSimpleWithKeys(uml:{umlmmmi,ecoreMM}, java:javammsi) +{ + key umlmmmi::Class {containingPackage, name}; + key javammsi::Class {containingPackage, name}; + key javammsi::Interface {containingPackage, name}; + + /** + * Return true if this class or a transitive super-class is marked as DomainRoot. + */ + query isClass(c : umlmmmi::Class) : Boolean { + c->closure(supers)->exists(type = 'DomainRoot') + } + + /** + * Create a Package for each Package. + */ + top relation PackageToPackage + { + n : String; + domain uml p1:Package { + name = n + }; + enforce domain java p2:Package { + name = n + }; + } + + /** + * Create a Class for each isClass() class. + */ + top relation ClassToClass + { + n : String; + domain uml c1:Class { + containingPackage = p1:Package{}, + name = n + } + {isClass(c1)}; + enforce domain java c2:Class { + containingPackage = p2:Package{}, + name = n + }; + when { + PackageToPackage(p1, p2); + } + } + + /** + * Create an Interface for each non-isClass() class. + */ + top relation ClassToInterface + { + n : String; + domain uml c1:Class { + containingPackage = p1:Package{}, + name = n + } + {not isClass(c1)}; + enforce domain java c2:Interface { + containingPackage = p2:Package{}, + name = n + }; + when { + PackageToPackage(p1, p2); + } + } + + /** + * Define a Class::extends relationship for each class with a super-class + */ + top relation ClassExtends + { + c1sup: umlmmmi::Class; + c2sup: javammsi::Class; + domain uml c1:Class { + supers = s1:Set(Class){c1sup ++ _} + }; + enforce domain java c2:Class { + extends = s2:Set(Class){c2sup ++ _} + }; + when { + ClassToClass(c1, c2); + ClassToClass(c1sup, c2sup); + } + } + + /** + * Define a Class::implements relationship for each class with a super-interface + */ + top relation ClassImplements + { + c1sup: umlmmmi::Class; + c2sup: javammsi::Interface; + domain uml c1:Class { + supers = s1:Set(Class){c1sup ++ _} + }; + enforce domain java c2:Class { + implements = s2:Set(Interface){c2sup ++ _} + }; + when { + ClassToClass(c1, c2); + ClassToInterface(c1sup, c2sup); + } + } + + /** + * Define a Interface::extends relationship for each interface with a super-interface + */ + top relation InterfaceExtends + { + c1sup: umlmmmi::Class; + c2sup: javammsi::Interface; + domain uml c1:Class { + supers = s1:Set(Class){c1sup ++ _} + }; + enforce domain java c2:Interface { + extends = s2:Set(Interface){c2sup ++ _} + }; + when { + ClassToInterface(c1, c2); + ClassToInterface(c1sup, c2sup); + } + } +} diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore index 00d78e966..fa6a158bc 100644 --- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore +++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore @@ -1,2 +1,3 @@ /_MiToSi/ /_MiToSiSimple/ +/_MiToSiSimpleWithKeys/ |