Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-04-25 19:51:34 +0000
committerEd Willink2016-04-25 19:51:34 +0000
commitbc87ce12af2cf524ace59ab44bdd988ba0693c51 (patch)
treece66eb64eb9e6c927a99996e3fa4f1dd9e810529
parent304d5cb29d443bdd0bd3c22bf8a27de126a2c5b4 (diff)
downloadorg.eclipse.qvtd-bc87ce12af2cf524ace59ab44bdd988ba0693c51.tar.gz
org.eclipse.qvtd-bc87ce12af2cf524ace59ab44bdd988ba0693c51.tar.xz
org.eclipse.qvtd-bc87ce12af2cf524ace59ab44bdd988ba0693c51.zip
[bigmde] ATL tests for BigMDE 2016 QVTc paper
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch16
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch16
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch16
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project6
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF12
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore2
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java221
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl51
8 files changed, 337 insertions, 3 deletions
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch
new file mode 100644
index 000000000..91fd8fa1f
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testQVTcCompiler_Families2Persons_ATL"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.doc.bigmde2016.tests.atl.BigMDE2016ATLTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.doc.bigmde2016.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DtestSuiteName=&quot;ATL - BigMDE2016 - Families2Persons (256MB)&quot;&#13;&#10;-ea -Xmx256M"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch
new file mode 100644
index 000000000..923a01afa
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testQVTcCompiler_Families2Persons_ATL"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.doc.bigmde2016.tests.atl.BigMDE2016ATLTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.doc.bigmde2016.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DtestSuiteName=&quot;ATL - BigMDE2016 - Families2Persons (4GB)&quot;&#13;&#10;-ea -Xmx4G"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch
new file mode 100644
index 000000000..16b93e1d8
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testQVTcCompiler_Families2Persons_EMFTVM"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.doc.bigmde2016.tests.atl.BigMDE2016ATLTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.doc.bigmde2016.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DtestSuiteName=&quot;EMFTVM - BigMDE2016 - Families2Persons (4GB)&quot;&#13;&#10;-ea -Xmx4G"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project
index 31a89dc7d..c9ef4cd73 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project
@@ -16,6 +16,11 @@
</arguments>
</buildCommand>
<buildCommand>
+ <name>org.eclipse.m2m.atl.adt.builder.atlBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
<name>org.eclipse.m2m.qvt.oml.project.QVTOBuilder</name>
<arguments>
</arguments>
@@ -27,6 +32,7 @@
</buildCommand>
</buildSpec>
<natures>
+ <nature>org.eclipse.m2m.atl.adt.builder.atlNature</nature>
<nature>org.eclipse.m2m.qvt.oml.project.QVTONature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF
index e1d6f88eb..bbcf401af 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF
@@ -7,11 +7,17 @@ Bundle-ClassPath: .
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
org.eclipse.qvtd.xtext.qvtcore.tests,
- org.eclipse.qvtd.codegen;bundle-version="1.0.0",
- org.eclipse.qvtd.compiler;bundle-version="1.0.0",
+ org.eclipse.qvtd.codegen,
+ org.eclipse.qvtd.compiler,
org.eclipse.m2m.qvt.oml,
org.apache.log4j,
- org.eclipse.m2m.qvt.oml.samples;bundle-version="3.4.0"
+ org.eclipse.m2m.qvt.oml.samples,
+ org.eclipse.m2m.atl.core,
+ org.eclipse.m2m.atl.core.emf,
+ org.eclipse.m2m.atl.engine.emfvm.launch,
+ org.eclipse.m2m.atl.emftvm,
+ org.eclipse.m2m.atl.emftvm.compiler,
+ org.eclipse.m2m.atl.emftvm.launcher
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore
new file mode 100644
index 000000000..f6bfe46eb
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore
@@ -0,0 +1,2 @@
+/Families2Persons.asm
+/Families2Persons.emftvm
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java
new file mode 100644
index 000000000..50e8567d6
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java
@@ -0,0 +1,221 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 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.doc.bigmde2016.tests.atl;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+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.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.m2m.atl.core.IInjector;
+import org.eclipse.m2m.atl.core.emf.EMFInjector;
+import org.eclipse.m2m.atl.core.emf.EMFModel;
+import org.eclipse.m2m.atl.core.emf.EMFModelFactory;
+import org.eclipse.m2m.atl.core.emf.EMFReferenceModel;
+import org.eclipse.m2m.atl.core.launch.ILauncher;
+import org.eclipse.m2m.atl.emftvm.EmftvmFactory;
+import org.eclipse.m2m.atl.emftvm.ExecEnv;
+import org.eclipse.m2m.atl.emftvm.Metamodel;
+import org.eclipse.m2m.atl.emftvm.Model;
+import org.eclipse.m2m.atl.emftvm.impl.resource.EMFTVMResourceFactoryImpl;
+import org.eclipse.m2m.atl.emftvm.util.DefaultModuleResolver;
+import org.eclipse.m2m.atl.emftvm.util.ModuleResolver;
+import org.eclipse.m2m.atl.emftvm.util.TimingData;
+import org.eclipse.m2m.atl.engine.emfvm.launch.EMFVMLauncher;
+import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
+import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.BigMDE2016CGTests;
+import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
+import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestCase;
+
+/**
+ * Source code for ATL results in BigMDE 2016, Eclipse QVTC First Results paper.
+ */
+public class BigMDE2016ATLTests extends TestCase
+{
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ static class NullInputStream extends InputStream {
+ static final NullInputStream INSTANCE = new NullInputStream();
+ private NullInputStream() {}
+ public int read() { return -1; }
+ public int available() { return 0; }
+ }
+
+ @Test
+ public void testQVTcCompiler_Families2Persons_ATL() throws Exception {
+ PrintAndLog logger = new PrintAndLog(getName());
+ logger.printf("%s\n", getName());
+ /*
+ * Initializations
+ */
+ ILauncher transformationLauncher = new EMFVMLauncher();
+ EMFModelFactory modelFactory = new EMFModelFactory();
+ ResourceSet resourceSet = modelFactory.getResourceSet();
+ resourceSet.getPackageRegistry().put(FamiliesPackage.eNS_URI, FamiliesPackage.eINSTANCE);
+ resourceSet.getPackageRegistry().put(PersonsPackage.eNS_URI, PersonsPackage.eINSTANCE);
+ IInjector injector = new EMFInjector();
+ /*
+ * Load metamodels
+ */
+ EMFReferenceModel familiesMetamodel = (EMFReferenceModel)modelFactory.newReferenceModel();
+ injector.inject(familiesMetamodel, FamiliesPackage.eNS_URI);
+ EMFReferenceModel personsMetamodel = (EMFReferenceModel)modelFactory.newReferenceModel();
+ injector.inject(personsMetamodel, PersonsPackage.eNS_URI);
+ try {
+ int[] tests = PrintAndLog.getTestSizes();
+ for (int testSize : tests) {
+ /*
+ * Load models
+ */
+ EMFModel familiesModel = (EMFModel)modelFactory.newModel(familiesMetamodel);
+ Resource familiesResource = resourceSet.createResource(URI.createURI("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi"));
+ try {
+ familiesResource.load(new InputStream() {
+ public int read() { return -1; }
+ public int available() { return 0; }
+ }, null);
+ }
+ catch(Throwable e) {}
+ injector.inject(familiesModel,"src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi");
+ Collection<@NonNull ? extends EObject> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9);
+ familiesResource.getContents().clear();
+ familiesResource.getContents().addAll(rootObjects);
+ EMFModel personsModel = (EMFModel)modelFactory.newModel(personsMetamodel);
+
+ transformationLauncher.initialize(new HashMap<String,Object>());
+ transformationLauncher.addInModel(familiesModel, "IN", "Families");
+ transformationLauncher.addOutModel(personsModel, "OUT", "Persons");
+
+ logger.printf("%9d, ", 10*testSize);
+ BigMDE2016CGTests.garbageCollect();
+ long startTime = System.nanoTime();
+ transformationLauncher.launch(ILauncher.RUN_MODE, new NullProgressMonitor(), new HashMap<String,Object>(),
+ new FileInputStream("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.asm"));
+ long endTime = System.nanoTime();
+ logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
+
+ Resource personsResource = personsModel.getResource();
+ Collection<@NonNull EObject> rootObjects2 = personsResource.getContents();
+ assert rootObjects2.size() == 9*testSize;
+ /*
+ * Unload all models
+ */
+ modelFactory.unload(personsModel);
+ modelFactory.unload(familiesModel);
+ }
+ }
+ finally {
+ /*
+ * Unload all metamodels
+ */
+ modelFactory.unload(familiesMetamodel);
+ modelFactory.unload(personsMetamodel);
+ logger.dispose();
+ }
+ }
+
+ @Test
+ public void testQVTcCompiler_Families2Persons_EMFTVM() throws Exception {
+ PrintAndLog logger = new PrintAndLog(getName());
+ logger.printf("%s\n", getName());
+ try {
+ int[] tests = PrintAndLog.getTestSizes();
+ for (int testSize : tests) {
+
+ ExecEnv env = EmftvmFactory.eINSTANCE.createExecEnv();
+ ResourceSet resourceSet = new ResourceSetImpl();
+ EPackage.Registry.INSTANCE.put(FamiliesPackage.eNS_URI, FamiliesPackage.eINSTANCE);
+ EPackage.Registry.INSTANCE.put(PersonsPackage.eNS_URI, PersonsPackage.eINSTANCE);
+ Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+ Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("emftvm", new EMFTVMResourceFactoryImpl());
+
+ // Load metamodels
+ Metamodel metaModel = EmftvmFactory.eINSTANCE.createMetamodel();
+ metaModel.setResource(resourceSet.getResource(URI.createURI("http://www.eclipse.org/m2m/atl/2011/EMFTVM"), true));
+ env.registerMetaModel("METAMODEL", metaModel);
+ metaModel = EmftvmFactory.eINSTANCE.createMetamodel();
+ metaModel.setResource(resourceSet.getResource(URI.createURI(FamiliesPackage.eNS_URI), true));
+ env.registerMetaModel("Families", metaModel);
+ metaModel = EmftvmFactory.eINSTANCE.createMetamodel();
+ metaModel.setResource(resourceSet.getResource(URI.createURI(PersonsPackage.eNS_URI), true));
+ env.registerMetaModel("Persons", metaModel);
+ Resource familiesResource = resourceSet.createResource(URI.createURI("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi"));
+ try {
+ familiesResource.load(new InputStream() {
+ public int read() { return -1; }
+ public int available() { return 0; }
+ }, null);
+ }
+ catch(Throwable e) {}
+ Model outModel = EmftvmFactory.eINSTANCE.createModel();
+ outModel.setResource(resourceSet.createResource(URI.createFileURI("out.xmi")));
+
+// try {
+// int[] tests = PrintAndLog.getTestSizes();
+// for (int testSize : tests) {
+ // Load models
+ Model inModel = EmftvmFactory.eINSTANCE.createModel();
+ familiesResource.getContents().clear();
+ outModel.getResource().getContents().clear();
+ env.clearModels();
+ BigMDE2016CGTests.garbageCollect();
+ Collection<@NonNull ? extends EObject> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9);
+ familiesResource.getContents().addAll(rootObjects);
+ inModel.setResource(familiesResource);
+ env.registerInputModel("IN", inModel);
+ env.registerOutputModel("OUT", outModel);
+
+ // Load and run module
+ ModuleResolver mr = new DefaultModuleResolver("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/", new ResourceSetImpl());
+ TimingData td = new TimingData();
+ env.loadModule(mr, "Families2Persons");
+ td.finishLoading();
+ logger.printf("%9d, ", 10*testSize);
+ BigMDE2016CGTests.garbageCollect();
+ long startTime = System.nanoTime();
+ env.run(td);
+ long endTime = System.nanoTime();
+ logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
+ td.finish();
+
+ Resource personsResource = outModel.getResource();
+ Collection<@NonNull EObject> rootObjects2 = personsResource.getContents();
+ assert rootObjects2.size() == 9*testSize;
+ }
+ }
+ finally {
+ logger.dispose();
+ }
+ }
+}
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl
new file mode 100644
index 000000000..04a327f9a
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl
@@ -0,0 +1,51 @@
+-- @atlcompiler emftvm
+-- @path Families=/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families.ecore
+-- @path Persons=/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Persons.ecore
+
+module Families2Persons;
+create OUT : Persons from IN : Families;
+
+helper context Families!Member def: familyName : String =
+ if not self.familyFather.oclIsUndefined() then
+ self.familyFather.lastName
+ else
+ if not self.familyMother.oclIsUndefined() then
+ self.familyMother.lastName
+ else
+ if not self.familySon.oclIsUndefined() then
+ self.familySon.lastName
+ else
+ self.familyDaughter.lastName
+ endif
+ endif
+ endif;
+
+helper context Families!Member def: isFemale() : Boolean =
+ if not self.familyMother.oclIsUndefined() then
+ true
+ else
+ if not self.familyDaughter.oclIsUndefined() then
+ true
+ else
+ false
+ endif
+ endif;
+
+rule Member2Male {
+ from
+ s : Families!Member (not s.isFemale())
+ to
+ t : Persons!Male (
+ fullName <- s.firstName + ' ' + s.familyName
+ )
+}
+
+rule Member2Female {
+ from
+ s : Families!Member (s.isFemale())
+ to
+ t : Persons!Female (
+ fullName <- s.firstName + ' ' + s.familyName
+ )
+}
+

Back to the top