aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.classpath7
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.project28
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/META-INF/MANIFEST.MF16
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/build.properties10
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/FamilyTree.xmi3
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.aird159
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.ecore17
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.genmodel33
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.properties4
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.xml17
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilyTree.java38
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreeFactory.java51
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreePackage.java321
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/Member.java102
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilyTreeImpl.java153
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreeFactoryImpl.java109
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreePackageImpl.java251
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/MemberImpl.java334
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeAdapterFactory.java138
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeSwitch.java131
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.classpath8
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.project40
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/META-INF/MANIFEST.MF14
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.FamilyTreeConstraints.java._tracebin0 -> 333 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.MemberIsItsOwnParent.java._tracebin0 -> 3544 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/familyTreeConstraints.vql24
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/build.properties6
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytree.ecore17
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytreeGen.vsconfig23
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated672
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generation.logicproblem190
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/init.partialmodel51
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt1
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml1011
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.pngbin0 -> 93940 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi8
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/plugin.xml7
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.FamilyTreeConstraints.java._tracebin0 -> 333 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.MemberIsItsOwnParent.java._tracebin0 -> 3544 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/FamilyTreeConstraints.java53
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/MemberIsItsOwnParent.java577
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/queries/familyTreeConstraints.vql24
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/run/FamilyTreeGen.java13
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.model/.project2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.model/META-INF/MANIFEST.MF2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.project2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/.project2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/META-INF/MANIFEST.MF4
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/.gitignore2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/queries/.gitignore37
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.RunGenerator.xtendbinbin8707 -> 8709 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.gitignore2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/.gitignore37
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Case_study_A.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv03.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv05.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv06.java164
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv07.java163
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv08.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv10.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv11.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv12.java13
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv13.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv15.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv17.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv20.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv33.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv34.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv35.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv47.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv48.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv49.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_eligAll.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_hasAll.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv05_inRange.java6
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_inRange.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_noType.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_notEI.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incNotOver100.java80
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incOver100.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notNonRes.java5
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notZZ.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv13.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv15.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv47.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_3.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_Dis.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_notDis.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_1.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_2.java2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.RunGenerator.xtendbinbin8707 -> 8709 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.gitignore2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.samples/.project2
95 files changed, 5209 insertions, 53 deletions
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.classpath b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.classpath
new file mode 100644
index 00000000..b862a296
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.classpath
@@ -0,0 +1,7 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<classpath>
3 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
5 <classpathentry kind="src" path="src"/>
6 <classpathentry kind="output" path="bin"/>
7</classpath>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.project b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.project
new file mode 100644
index 00000000..f379b9b4
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.project
@@ -0,0 +1,28 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription>
3 <name>case.study.familyTree.model</name>
4 <comment></comment>
5 <projects>
6 </projects>
7 <buildSpec>
8 <buildCommand>
9 <name>org.eclipse.jdt.core.javabuilder</name>
10 <arguments>
11 </arguments>
12 </buildCommand>
13 <buildCommand>
14 <name>org.eclipse.pde.ManifestBuilder</name>
15 <arguments>
16 </arguments>
17 </buildCommand>
18 <buildCommand>
19 <name>org.eclipse.pde.SchemaBuilder</name>
20 <arguments>
21 </arguments>
22 </buildCommand>
23 </buildSpec>
24 <natures>
25 <nature>org.eclipse.pde.PluginNature</nature>
26 <nature>org.eclipse.jdt.core.javanature</nature>
27 </natures>
28</projectDescription>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.settings/org.eclipse.jdt.core.prefs b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..295926d9
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
1eclipse.preferences.version=1
2org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4org.eclipse.jdt.core.compiler.compliance=1.8
5org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7org.eclipse.jdt.core.compiler.source=1.8
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/META-INF/MANIFEST.MF b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..70360954
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2
3Bundle-Name: %pluginName
4Bundle-SymbolicName: case.study.familyTree.model;singleton:=true
5Bundle-Version: 1.0.0.qualifier
6Bundle-ClassPath: .
7Bundle-Vendor: %providerName
8Bundle-Localization: plugin
9Automatic-Module-Name: case.study.familyTree.model
10Bundle-RequiredExecutionEnvironment: JavaSE-1.8
11Export-Package: familytree,
12 familytree.impl,
13 familytree.util
14Require-Bundle: org.eclipse.core.runtime,
15 org.eclipse.emf.ecore;visibility:=reexport
16Bundle-ActivationPolicy: lazy
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/build.properties b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/build.properties
new file mode 100644
index 00000000..4d3b1827
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/build.properties
@@ -0,0 +1,10 @@
1#
2
3bin.includes = .,\
4 model/,\
5 META-INF/,\
6 plugin.xml,\
7 plugin.properties
8jars.compile.order = .
9source.. = src/
10output.. = bin/
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/FamilyTree.xmi b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/FamilyTree.xmi
new file mode 100644
index 00000000..066b286f
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/FamilyTree.xmi
@@ -0,0 +1,3 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<familytree:FamilyTree xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns:familytree="http://www.example.org/familytree" xsi:schemaLocation="http://www.example.org/familytree familytree.ecore"/>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.aird b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.aird
new file mode 100644
index 00000000..f2980c32
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.aird
@@ -0,0 +1,159 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
3 <viewpoint:DAnalysis uid="_lkFqkDsLEeqkYdt9h49cMw" selectedViews="_mCqc8DsLEeqkYdt9h49cMw" version="14.3.0.201909031200">
4 <semanticResources>familytree.ecore</semanticResources>
5 <ownedViews xmi:type="viewpoint:DView" uid="_mCqc8DsLEeqkYdt9h49cMw">
6 <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
7 <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_mMIiADsLEeqkYdt9h49cMw" name="familytree" repPath="#_mGB6ADsLEeqkYdt9h49cMw">
8 <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
9 <target xmi:type="ecore:EPackage" href="familytree.ecore#/"/>
10 </ownedRepresentationDescriptors>
11 </ownedViews>
12 </viewpoint:DAnalysis>
13 <diagram:DSemanticDiagram uid="_mGB6ADsLEeqkYdt9h49cMw">
14 <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_mMCbYDsLEeqkYdt9h49cMw" source="DANNOTATION_CUSTOMIZATION_KEY">
15 <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_mMDCcDsLEeqkYdt9h49cMw">
16 <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_aZCDMDsSEeqkYdt9h49cMw" sourceArrow="FillDiamond" routingStyle="manhattan">
17 <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
18 <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_aZCDMTsSEeqkYdt9h49cMw" showIcon="false" labelExpression="service:render">
19 <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
20 </centerLabelStyleDescription>
21 <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_aZCDMjsSEeqkYdt9h49cMw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
22 <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
23 </endLabelStyleDescription>
24 </computedStyleDescriptions>
25 </data>
26 </ownedAnnotationEntries>
27 <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_mNJOoDsLEeqkYdt9h49cMw" source="GMF_DIAGRAMS">
28 <data xmi:type="notation:Diagram" xmi:id="_mNJOoTsLEeqkYdt9h49cMw" type="Sirius" element="_mGB6ADsLEeqkYdt9h49cMw" measurementUnit="Pixel">
29 <children xmi:type="notation:Node" xmi:id="_Vt3KADsREeqkYdt9h49cMw" type="2003" element="_Vs0oMDsREeqkYdt9h49cMw">
30 <children xmi:type="notation:Node" xmi:id="_VuD-UDsREeqkYdt9h49cMw" type="5007"/>
31 <children xmi:type="notation:Node" xmi:id="_VuFMcDsREeqkYdt9h49cMw" type="7004">
32 <styles xmi:type="notation:SortingStyle" xmi:id="_VuFMcTsREeqkYdt9h49cMw"/>
33 <styles xmi:type="notation:FilteringStyle" xmi:id="_VuFMcjsREeqkYdt9h49cMw"/>
34 </children>
35 <styles xmi:type="notation:ShapeStyle" xmi:id="_Vt3KATsREeqkYdt9h49cMw" fontName="Segoe UI" fontHeight="8"/>
36 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Vt3KAjsREeqkYdt9h49cMw" x="120" y="144" width="111" height="87"/>
37 </children>
38 <children xmi:type="notation:Node" xmi:id="_aa12gDsREeqkYdt9h49cMw" type="2003" element="_aaZxoDsREeqkYdt9h49cMw">
39 <children xmi:type="notation:Node" xmi:id="_aa3rsDsREeqkYdt9h49cMw" type="5007"/>
40 <children xmi:type="notation:Node" xmi:id="_aa4SwDsREeqkYdt9h49cMw" type="7004">
41 <children xmi:type="notation:Node" xmi:id="_dkHUkDsREeqkYdt9h49cMw" type="3010" element="_djV4gDsREeqkYdt9h49cMw">
42 <styles xmi:type="notation:FontStyle" xmi:id="_dkHUkTsREeqkYdt9h49cMw" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
43 <layoutConstraint xmi:type="notation:Location" xmi:id="_dkHUkjsREeqkYdt9h49cMw"/>
44 </children>
45 <children xmi:type="notation:Node" xmi:id="_7h4v4DsREeqkYdt9h49cMw" type="3010" element="_7hUIIDsREeqkYdt9h49cMw">
46 <styles xmi:type="notation:FontStyle" xmi:id="_7h4v4TsREeqkYdt9h49cMw" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
47 <layoutConstraint xmi:type="notation:Location" xmi:id="_7h4v4jsREeqkYdt9h49cMw"/>
48 </children>
49 <styles xmi:type="notation:SortingStyle" xmi:id="_aa4SwTsREeqkYdt9h49cMw"/>
50 <styles xmi:type="notation:FilteringStyle" xmi:id="_aa4SwjsREeqkYdt9h49cMw"/>
51 </children>
52 <styles xmi:type="notation:ShapeStyle" xmi:id="_aa12gTsREeqkYdt9h49cMw" fontName="Segoe UI" fontHeight="8"/>
53 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aa12gjsREeqkYdt9h49cMw" x="372" y="144" width="147" height="111"/>
54 </children>
55 <styles xmi:type="notation:DiagramStyle" xmi:id="_mNJOojsLEeqkYdt9h49cMw"/>
56 <edges xmi:type="notation:Edge" xmi:id="_aZ6M8DsSEeqkYdt9h49cMw" type="4001" element="_aY6ucDsSEeqkYdt9h49cMw" source="_Vt3KADsREeqkYdt9h49cMw" target="_aa12gDsREeqkYdt9h49cMw">
57 <children xmi:type="notation:Node" xmi:id="_aZ93UDsSEeqkYdt9h49cMw" type="6001">
58 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aZ93UTsSEeqkYdt9h49cMw" x="20" y="7"/>
59 </children>
60 <children xmi:type="notation:Node" xmi:id="_aZ_sgDsSEeqkYdt9h49cMw" type="6002">
61 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aaATkDsSEeqkYdt9h49cMw" x="59" y="10"/>
62 </children>
63 <children xmi:type="notation:Node" xmi:id="_aaBhsDsSEeqkYdt9h49cMw" type="6003">
64 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aaBhsTsSEeqkYdt9h49cMw" x="1" y="10"/>
65 </children>
66 <styles xmi:type="notation:ConnectorStyle" xmi:id="_aZ6M8TsSEeqkYdt9h49cMw" routing="Rectilinear"/>
67 <styles xmi:type="notation:FontStyle" xmi:id="_aZ6M8jsSEeqkYdt9h49cMw" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
68 <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aZ6M8zsSEeqkYdt9h49cMw" points="[0, 0, -143, 0]$[143, 0, 0, 0]"/>
69 <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aaMg0DsSEeqkYdt9h49cMw" id="(1.0,0.1411764705882353)"/>
70 <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aaMg0TsSEeqkYdt9h49cMw" id="(0.0,0.11009174311926606)"/>
71 </edges>
72 <edges xmi:type="notation:Edge" xmi:id="_2qcDUDsSEeqkYdt9h49cMw" type="4001" element="_2p6e4DsSEeqkYdt9h49cMw" source="_aa12gDsREeqkYdt9h49cMw" target="_aa12gDsREeqkYdt9h49cMw">
73 <children xmi:type="notation:Node" xmi:id="_2qdRcDsSEeqkYdt9h49cMw" type="6001">
74 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2qdRcTsSEeqkYdt9h49cMw" y="-10"/>
75 </children>
76 <children xmi:type="notation:Node" xmi:id="_2qdRcjsSEeqkYdt9h49cMw" type="6002">
77 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2qdRczsSEeqkYdt9h49cMw" x="-15" y="-26"/>
78 </children>
79 <children xmi:type="notation:Node" xmi:id="_2qdRdDsSEeqkYdt9h49cMw" type="6003">
80 <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2qd4gDsSEeqkYdt9h49cMw" x="43" y="22"/>
81 </children>
82 <styles xmi:type="notation:ConnectorStyle" xmi:id="_2qcDUTsSEeqkYdt9h49cMw" routing="Rectilinear"/>
83 <styles xmi:type="notation:FontStyle" xmi:id="_2qcDUjsSEeqkYdt9h49cMw" fontName="Segoe UI" fontHeight="8"/>
84 <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2qcDUzsSEeqkYdt9h49cMw" points="[39, 55, 3, 55]$[77, 55, 41, 55]$[77, 149, 41, 149]$[-36, 149, -72, 149]$[-36, 109, -72, 109]"/>
85 <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2qyooDsSEeqkYdt9h49cMw" id="(0.7448275862068966,0.0)"/>
86 <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2qyooTsSEeqkYdt9h49cMw" id="(0.993103448275862,0.0)"/>
87 </edges>
88 </data>
89 </ownedAnnotationEntries>
90 <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Vs0oMDsREeqkYdt9h49cMw" name="FamilyTree" tooltipText="" outgoingEdges="_aY6ucDsSEeqkYdt9h49cMw" width="12" height="10">
91 <target xmi:type="ecore:EClass" href="familytree.ecore#//FamilyTree"/>
92 <semanticElements xmi:type="ecore:EClass" href="familytree.ecore#//FamilyTree"/>
93 <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
94 <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
95 <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
96 <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_VtO34DsREeqkYdt9h49cMw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
97 <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
98 </ownedStyle>
99 <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
100 </ownedDiagramElements>
101 <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_aaZxoDsREeqkYdt9h49cMw" name="Member" tooltipText="" outgoingEdges="_2p6e4DsSEeqkYdt9h49cMw" incomingEdges="_aY6ucDsSEeqkYdt9h49cMw _2p6e4DsSEeqkYdt9h49cMw" width="12" height="10">
102 <target xmi:type="ecore:EClass" href="familytree.ecore#//Member"/>
103 <semanticElements xmi:type="ecore:EClass" href="familytree.ecore#//Member"/>
104 <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
105 <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
106 <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
107 <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_BKuAoDsSEeqkYdt9h49cMw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
108 <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
109 </ownedStyle>
110 <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
111 <ownedElements xmi:type="diagram:DNodeListElement" uid="_djV4gDsREeqkYdt9h49cMw" name="name : EString" tooltipText="">
112 <target xmi:type="ecore:EAttribute" href="familytree.ecore#//Member/name"/>
113 <semanticElements xmi:type="ecore:EAttribute" href="familytree.ecore#//Member/name"/>
114 <ownedStyle xmi:type="diagram:BundledImage" uid="_hCW9ETsREeqkYdt9h49cMw" labelAlignment="LEFT">
115 <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
116 </ownedStyle>
117 <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
118 </ownedElements>
119 <ownedElements xmi:type="diagram:DNodeListElement" uid="_7hUIIDsREeqkYdt9h49cMw" name="age : EInt = 0" tooltipText="">
120 <target xmi:type="ecore:EAttribute" href="familytree.ecore#//Member/age"/>
121 <semanticElements xmi:type="ecore:EAttribute" href="familytree.ecore#//Member/age"/>
122 <ownedStyle xmi:type="diagram:BundledImage" uid="_P9E9gTsZEeqzD6SBN6r2Uw" labelAlignment="LEFT">
123 <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
124 </ownedStyle>
125 <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
126 </ownedElements>
127 </ownedDiagramElements>
128 <ownedDiagramElements xmi:type="diagram:DEdge" uid="_aY6ucDsSEeqkYdt9h49cMw" name="[0..*] members" sourceNode="_Vs0oMDsREeqkYdt9h49cMw" targetNode="_aaZxoDsREeqkYdt9h49cMw">
129 <target xmi:type="ecore:EReference" href="familytree.ecore#//FamilyTree/members"/>
130 <semanticElements xmi:type="ecore:EReference" href="familytree.ecore#//FamilyTree/members"/>
131 <ownedStyle xmi:type="diagram:EdgeStyle" uid="_aZCDMzsSEeqkYdt9h49cMw" description="_aZCDMDsSEeqkYdt9h49cMw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
132 <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_aZCDNTsSEeqkYdt9h49cMw" showIcon="false">
133 <customFeatures>labelSize</customFeatures>
134 </centerLabelStyle>
135 <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_aZCDNDsSEeqkYdt9h49cMw" showIcon="false" labelColor="39,76,114">
136 <customFeatures>labelSize</customFeatures>
137 </endLabelStyle>
138 </ownedStyle>
139 <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
140 </ownedDiagramElements>
141 <ownedDiagramElements xmi:type="diagram:DEdge" uid="_2p6e4DsSEeqkYdt9h49cMw" sourceNode="_aaZxoDsREeqkYdt9h49cMw" targetNode="_aaZxoDsREeqkYdt9h49cMw" beginLabel="[0..2] parents" endLabel="[0..*] children">
142 <target xmi:type="ecore:EReference" href="familytree.ecore#//Member/children"/>
143 <semanticElements xmi:type="ecore:EReference" href="familytree.ecore#//Member/children"/>
144 <semanticElements xmi:type="ecore:EReference" href="familytree.ecore#//Member/parents"/>
145 <ownedStyle xmi:type="diagram:EdgeStyle" uid="_2p9iMDsSEeqkYdt9h49cMw" sourceArrow="InputArrow" routingStyle="manhattan" strokeColor="0,0,0">
146 <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']/@style"/>
147 <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_2p9iMTsSEeqkYdt9h49cMw" showIcon="false"/>
148 <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_2p9iMjsSEeqkYdt9h49cMw" showIcon="false"/>
149 </ownedStyle>
150 <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
151 </ownedDiagramElements>
152 <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
153 <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_mHAKYDsLEeqkYdt9h49cMw"/>
154 <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
155 <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
156 <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
157 <target xmi:type="ecore:EPackage" href="familytree.ecore#/"/>
158 </diagram:DSemanticDiagram>
159</xmi:XMI>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.ecore b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.ecore
new file mode 100644
index 00000000..f2e51f65
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.ecore
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="familytree" nsURI="http://www.example.org/familytree" nsPrefix="familytree">
4 <eClassifiers xsi:type="ecore:EClass" name="FamilyTree">
5 <eStructuralFeatures xsi:type="ecore:EReference" name="members" upperBound="-1"
6 eType="#//Member" containment="true"/>
7 </eClassifiers>
8 <eClassifiers xsi:type="ecore:EClass" name="Member">
9 <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
10 <eStructuralFeatures xsi:type="ecore:EAttribute" name="age" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
11 defaultValueLiteral="0"/>
12 <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
13 eType="#//Member" eOpposite="#//Member/parents"/>
14 <eStructuralFeatures xsi:type="ecore:EReference" name="parents" upperBound="2"
15 eType="#//Member" eOpposite="#//Member/children"/>
16 </eClassifiers>
17</ecore:EPackage>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.genmodel b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.genmodel
new file mode 100644
index 00000000..29f5fc02
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/model/familytree.genmodel
@@ -0,0 +1,33 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<genmodel:GenModel xmi:version="2.0"
3 xmlns:xmi="http://www.omg.org/XMI"
4 xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
5 xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel"
6 modelDirectory="/case.study.familyTree.model/src"
7 modelPluginID="case.study.familyTree.model" modelName="Familytree"
8 rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
9 importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0"
10 copyrightFields="false" operationReflection="true"
11 importOrganizing="true">
12 <foreignModel>familytree.ecore</foreignModel>
13 <genPackages prefix="Familytree"
14 disposableProviderFactory="true" ecorePackage="familytree.ecore#/">
15 <genClasses ecoreClass="familytree.ecore#//FamilyTree">
16 <genFeatures property="None" children="true"
17 createChild="true"
18 ecoreFeature="ecore:EReference familytree.ecore#//FamilyTree/members" />
19 </genClasses>
20 <genClasses ecoreClass="familytree.ecore#//Member">
21 <genFeatures createChild="false"
22 ecoreFeature="ecore:EAttribute familytree.ecore#//Member/name" />
23 <genFeatures createChild="false"
24 ecoreFeature="ecore:EAttribute familytree.ecore#//Member/age" />
25 <genFeatures notify="false" createChild="false"
26 propertySortChoices="true"
27 ecoreFeature="ecore:EReference familytree.ecore#//Member/children" />
28 <genFeatures notify="false" createChild="false"
29 propertySortChoices="true"
30 ecoreFeature="ecore:EReference familytree.ecore#//Member/parents" />
31 </genClasses>
32 </genPackages>
33</genmodel:GenModel>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.properties b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.properties
new file mode 100644
index 00000000..e4710b5f
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.properties
@@ -0,0 +1,4 @@
1#
2
3pluginName = Model
4providerName = www.example.org
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.xml b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.xml
new file mode 100644
index 00000000..a377ea2a
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/plugin.xml
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<?eclipse version="3.0"?>
3
4<!--
5-->
6
7<plugin>
8
9 <extension point="org.eclipse.emf.ecore.generated_package">
10 <!-- @generated familytree -->
11 <package
12 uri="http://www.example.org/familytree"
13 class="familytree.FamilytreePackage"
14 genModel="model/familytree.genmodel"/>
15 </extension>
16
17</plugin>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilyTree.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilyTree.java
new file mode 100644
index 00000000..408373a3
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilyTree.java
@@ -0,0 +1,38 @@
1/**
2 */
3package familytree;
4
5import org.eclipse.emf.common.util.EList;
6
7import org.eclipse.emf.ecore.EObject;
8
9/**
10 * <!-- begin-user-doc -->
11 * A representation of the model object '<em><b>Family Tree</b></em>'.
12 * <!-- end-user-doc -->
13 *
14 * <p>
15 * The following features are supported:
16 * </p>
17 * <ul>
18 * <li>{@link familytree.FamilyTree#getMembers <em>Members</em>}</li>
19 * </ul>
20 *
21 * @see familytree.FamilytreePackage#getFamilyTree()
22 * @model
23 * @generated
24 */
25public interface FamilyTree extends EObject {
26 /**
27 * Returns the value of the '<em><b>Members</b></em>' containment reference list.
28 * The list contents are of type {@link familytree.Member}.
29 * <!-- begin-user-doc -->
30 * <!-- end-user-doc -->
31 * @return the value of the '<em>Members</em>' containment reference list.
32 * @see familytree.FamilytreePackage#getFamilyTree_Members()
33 * @model containment="true"
34 * @generated
35 */
36 EList<Member> getMembers();
37
38} // FamilyTree
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreeFactory.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreeFactory.java
new file mode 100644
index 00000000..534da223
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreeFactory.java
@@ -0,0 +1,51 @@
1/**
2 */
3package familytree;
4
5import org.eclipse.emf.ecore.EFactory;
6
7/**
8 * <!-- begin-user-doc -->
9 * The <b>Factory</b> for the model.
10 * It provides a create method for each non-abstract class of the model.
11 * <!-- end-user-doc -->
12 * @see familytree.FamilytreePackage
13 * @generated
14 */
15public interface FamilytreeFactory extends EFactory {
16 /**
17 * The singleton instance of the factory.
18 * <!-- begin-user-doc -->
19 * <!-- end-user-doc -->
20 * @generated
21 */
22 FamilytreeFactory eINSTANCE = familytree.impl.FamilytreeFactoryImpl.init();
23
24 /**
25 * Returns a new object of class '<em>Family Tree</em>'.
26 * <!-- begin-user-doc -->
27 * <!-- end-user-doc -->
28 * @return a new object of class '<em>Family Tree</em>'.
29 * @generated
30 */
31 FamilyTree createFamilyTree();
32
33 /**
34 * Returns a new object of class '<em>Member</em>'.
35 * <!-- begin-user-doc -->
36 * <!-- end-user-doc -->
37 * @return a new object of class '<em>Member</em>'.
38 * @generated
39 */
40 Member createMember();
41
42 /**
43 * Returns the package supported by this factory.
44 * <!-- begin-user-doc -->
45 * <!-- end-user-doc -->
46 * @return the package supported by this factory.
47 * @generated
48 */
49 FamilytreePackage getFamilytreePackage();
50
51} //FamilytreeFactory
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreePackage.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreePackage.java
new file mode 100644
index 00000000..572a0fe4
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/FamilytreePackage.java
@@ -0,0 +1,321 @@
1/**
2 */
3package familytree;
4
5import org.eclipse.emf.ecore.EAttribute;
6import org.eclipse.emf.ecore.EClass;
7import org.eclipse.emf.ecore.EPackage;
8import org.eclipse.emf.ecore.EReference;
9
10/**
11 * <!-- begin-user-doc -->
12 * The <b>Package</b> for the model.
13 * It contains accessors for the meta objects to represent
14 * <ul>
15 * <li>each class,</li>
16 * <li>each feature of each class,</li>
17 * <li>each operation of each class,</li>
18 * <li>each enum,</li>
19 * <li>and each data type</li>
20 * </ul>
21 * <!-- end-user-doc -->
22 * @see familytree.FamilytreeFactory
23 * @model kind="package"
24 * @generated
25 */
26public interface FamilytreePackage extends EPackage {
27 /**
28 * The package name.
29 * <!-- begin-user-doc -->
30 * <!-- end-user-doc -->
31 * @generated
32 */
33 String eNAME = "familytree";
34
35 /**
36 * The package namespace URI.
37 * <!-- begin-user-doc -->
38 * <!-- end-user-doc -->
39 * @generated
40 */
41 String eNS_URI = "http://www.example.org/familytree";
42
43 /**
44 * The package namespace name.
45 * <!-- begin-user-doc -->
46 * <!-- end-user-doc -->
47 * @generated
48 */
49 String eNS_PREFIX = "familytree";
50
51 /**
52 * The singleton instance of the package.
53 * <!-- begin-user-doc -->
54 * <!-- end-user-doc -->
55 * @generated
56 */
57 FamilytreePackage eINSTANCE = familytree.impl.FamilytreePackageImpl.init();
58
59 /**
60 * The meta object id for the '{@link familytree.impl.FamilyTreeImpl <em>Family Tree</em>}' class.
61 * <!-- begin-user-doc -->
62 * <!-- end-user-doc -->
63 * @see familytree.impl.FamilyTreeImpl
64 * @see familytree.impl.FamilytreePackageImpl#getFamilyTree()
65 * @generated
66 */
67 int FAMILY_TREE = 0;
68
69 /**
70 * The feature id for the '<em><b>Members</b></em>' containment reference list.
71 * <!-- begin-user-doc -->
72 * <!-- end-user-doc -->
73 * @generated
74 * @ordered
75 */
76 int FAMILY_TREE__MEMBERS = 0;
77
78 /**
79 * The number of structural features of the '<em>Family Tree</em>' class.
80 * <!-- begin-user-doc -->
81 * <!-- end-user-doc -->
82 * @generated
83 * @ordered
84 */
85 int FAMILY_TREE_FEATURE_COUNT = 1;
86
87 /**
88 * The number of operations of the '<em>Family Tree</em>' class.
89 * <!-- begin-user-doc -->
90 * <!-- end-user-doc -->
91 * @generated
92 * @ordered
93 */
94 int FAMILY_TREE_OPERATION_COUNT = 0;
95
96 /**
97 * The meta object id for the '{@link familytree.impl.MemberImpl <em>Member</em>}' class.
98 * <!-- begin-user-doc -->
99 * <!-- end-user-doc -->
100 * @see familytree.impl.MemberImpl
101 * @see familytree.impl.FamilytreePackageImpl#getMember()
102 * @generated
103 */
104 int MEMBER = 1;
105
106 /**
107 * The feature id for the '<em><b>Name</b></em>' attribute.
108 * <!-- begin-user-doc -->
109 * <!-- end-user-doc -->
110 * @generated
111 * @ordered
112 */
113 int MEMBER__NAME = 0;
114
115 /**
116 * The feature id for the '<em><b>Age</b></em>' attribute.
117 * <!-- begin-user-doc -->
118 * <!-- end-user-doc -->
119 * @generated
120 * @ordered
121 */
122 int MEMBER__AGE = 1;
123
124 /**
125 * The feature id for the '<em><b>Children</b></em>' reference list.
126 * <!-- begin-user-doc -->
127 * <!-- end-user-doc -->
128 * @generated
129 * @ordered
130 */
131 int MEMBER__CHILDREN = 2;
132
133 /**
134 * The feature id for the '<em><b>Parents</b></em>' reference list.
135 * <!-- begin-user-doc -->
136 * <!-- end-user-doc -->
137 * @generated
138 * @ordered
139 */
140 int MEMBER__PARENTS = 3;
141
142 /**
143 * The number of structural features of the '<em>Member</em>' class.
144 * <!-- begin-user-doc -->
145 * <!-- end-user-doc -->
146 * @generated
147 * @ordered
148 */
149 int MEMBER_FEATURE_COUNT = 4;
150
151 /**
152 * The number of operations of the '<em>Member</em>' class.
153 * <!-- begin-user-doc -->
154 * <!-- end-user-doc -->
155 * @generated
156 * @ordered
157 */
158 int MEMBER_OPERATION_COUNT = 0;
159
160
161 /**
162 * Returns the meta object for class '{@link familytree.FamilyTree <em>Family Tree</em>}'.
163 * <!-- begin-user-doc -->
164 * <!-- end-user-doc -->
165 * @return the meta object for class '<em>Family Tree</em>'.
166 * @see familytree.FamilyTree
167 * @generated
168 */
169 EClass getFamilyTree();
170
171 /**
172 * Returns the meta object for the containment reference list '{@link familytree.FamilyTree#getMembers <em>Members</em>}'.
173 * <!-- begin-user-doc -->
174 * <!-- end-user-doc -->
175 * @return the meta object for the containment reference list '<em>Members</em>'.
176 * @see familytree.FamilyTree#getMembers()
177 * @see #getFamilyTree()
178 * @generated
179 */
180 EReference getFamilyTree_Members();
181
182 /**
183 * Returns the meta object for class '{@link familytree.Member <em>Member</em>}'.
184 * <!-- begin-user-doc -->
185 * <!-- end-user-doc -->
186 * @return the meta object for class '<em>Member</em>'.
187 * @see familytree.Member
188 * @generated
189 */
190 EClass getMember();
191
192 /**
193 * Returns the meta object for the attribute '{@link familytree.Member#getName <em>Name</em>}'.
194 * <!-- begin-user-doc -->
195 * <!-- end-user-doc -->
196 * @return the meta object for the attribute '<em>Name</em>'.
197 * @see familytree.Member#getName()
198 * @see #getMember()
199 * @generated
200 */
201 EAttribute getMember_Name();
202
203 /**
204 * Returns the meta object for the attribute '{@link familytree.Member#getAge <em>Age</em>}'.
205 * <!-- begin-user-doc -->
206 * <!-- end-user-doc -->
207 * @return the meta object for the attribute '<em>Age</em>'.
208 * @see familytree.Member#getAge()
209 * @see #getMember()
210 * @generated
211 */
212 EAttribute getMember_Age();
213
214 /**
215 * Returns the meta object for the reference list '{@link familytree.Member#getChildren <em>Children</em>}'.
216 * <!-- begin-user-doc -->
217 * <!-- end-user-doc -->
218 * @return the meta object for the reference list '<em>Children</em>'.
219 * @see familytree.Member#getChildren()
220 * @see #getMember()
221 * @generated
222 */
223 EReference getMember_Children();
224
225 /**
226 * Returns the meta object for the reference list '{@link familytree.Member#getParents <em>Parents</em>}'.
227 * <!-- begin-user-doc -->
228 * <!-- end-user-doc -->
229 * @return the meta object for the reference list '<em>Parents</em>'.
230 * @see familytree.Member#getParents()
231 * @see #getMember()
232 * @generated
233 */
234 EReference getMember_Parents();
235
236 /**
237 * Returns the factory that creates the instances of the model.
238 * <!-- begin-user-doc -->
239 * <!-- end-user-doc -->
240 * @return the factory that creates the instances of the model.
241 * @generated
242 */
243 FamilytreeFactory getFamilytreeFactory();
244
245 /**
246 * <!-- begin-user-doc -->
247 * Defines literals for the meta objects that represent
248 * <ul>
249 * <li>each class,</li>
250 * <li>each feature of each class,</li>
251 * <li>each operation of each class,</li>
252 * <li>each enum,</li>
253 * <li>and each data type</li>
254 * </ul>
255 * <!-- end-user-doc -->
256 * @generated
257 */
258 interface Literals {
259 /**
260 * The meta object literal for the '{@link familytree.impl.FamilyTreeImpl <em>Family Tree</em>}' class.
261 * <!-- begin-user-doc -->
262 * <!-- end-user-doc -->
263 * @see familytree.impl.FamilyTreeImpl
264 * @see familytree.impl.FamilytreePackageImpl#getFamilyTree()
265 * @generated
266 */
267 EClass FAMILY_TREE = eINSTANCE.getFamilyTree();
268
269 /**
270 * The meta object literal for the '<em><b>Members</b></em>' containment reference list feature.
271 * <!-- begin-user-doc -->
272 * <!-- end-user-doc -->
273 * @generated
274 */
275 EReference FAMILY_TREE__MEMBERS = eINSTANCE.getFamilyTree_Members();
276
277 /**
278 * The meta object literal for the '{@link familytree.impl.MemberImpl <em>Member</em>}' class.
279 * <!-- begin-user-doc -->
280 * <!-- end-user-doc -->
281 * @see familytree.impl.MemberImpl
282 * @see familytree.impl.FamilytreePackageImpl#getMember()
283 * @generated
284 */
285 EClass MEMBER = eINSTANCE.getMember();
286
287 /**
288 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
289 * <!-- begin-user-doc -->
290 * <!-- end-user-doc -->
291 * @generated
292 */
293 EAttribute MEMBER__NAME = eINSTANCE.getMember_Name();
294
295 /**
296 * The meta object literal for the '<em><b>Age</b></em>' attribute feature.
297 * <!-- begin-user-doc -->
298 * <!-- end-user-doc -->
299 * @generated
300 */
301 EAttribute MEMBER__AGE = eINSTANCE.getMember_Age();
302
303 /**
304 * The meta object literal for the '<em><b>Children</b></em>' reference list feature.
305 * <!-- begin-user-doc -->
306 * <!-- end-user-doc -->
307 * @generated
308 */
309 EReference MEMBER__CHILDREN = eINSTANCE.getMember_Children();
310
311 /**
312 * The meta object literal for the '<em><b>Parents</b></em>' reference list feature.
313 * <!-- begin-user-doc -->
314 * <!-- end-user-doc -->
315 * @generated
316 */
317 EReference MEMBER__PARENTS = eINSTANCE.getMember_Parents();
318
319 }
320
321} //FamilytreePackage
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/Member.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/Member.java
new file mode 100644
index 00000000..55a6bd1e
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/Member.java
@@ -0,0 +1,102 @@
1/**
2 */
3package familytree;
4
5import org.eclipse.emf.common.util.EList;
6
7import org.eclipse.emf.ecore.EObject;
8
9/**
10 * <!-- begin-user-doc -->
11 * A representation of the model object '<em><b>Member</b></em>'.
12 * <!-- end-user-doc -->
13 *
14 * <p>
15 * The following features are supported:
16 * </p>
17 * <ul>
18 * <li>{@link familytree.Member#getName <em>Name</em>}</li>
19 * <li>{@link familytree.Member#getAge <em>Age</em>}</li>
20 * <li>{@link familytree.Member#getChildren <em>Children</em>}</li>
21 * <li>{@link familytree.Member#getParents <em>Parents</em>}</li>
22 * </ul>
23 *
24 * @see familytree.FamilytreePackage#getMember()
25 * @model
26 * @generated
27 */
28public interface Member extends EObject {
29 /**
30 * Returns the value of the '<em><b>Name</b></em>' attribute.
31 * <!-- begin-user-doc -->
32 * <!-- end-user-doc -->
33 * @return the value of the '<em>Name</em>' attribute.
34 * @see #setName(String)
35 * @see familytree.FamilytreePackage#getMember_Name()
36 * @model
37 * @generated
38 */
39 String getName();
40
41 /**
42 * Sets the value of the '{@link familytree.Member#getName <em>Name</em>}' attribute.
43 * <!-- begin-user-doc -->
44 * <!-- end-user-doc -->
45 * @param value the new value of the '<em>Name</em>' attribute.
46 * @see #getName()
47 * @generated
48 */
49 void setName(String value);
50
51 /**
52 * Returns the value of the '<em><b>Age</b></em>' attribute.
53 * The default value is <code>"0"</code>.
54 * <!-- begin-user-doc -->
55 * <!-- end-user-doc -->
56 * @return the value of the '<em>Age</em>' attribute.
57 * @see #setAge(int)
58 * @see familytree.FamilytreePackage#getMember_Age()
59 * @model default="0"
60 * @generated
61 */
62 int getAge();
63
64 /**
65 * Sets the value of the '{@link familytree.Member#getAge <em>Age</em>}' attribute.
66 * <!-- begin-user-doc -->
67 * <!-- end-user-doc -->
68 * @param value the new value of the '<em>Age</em>' attribute.
69 * @see #getAge()
70 * @generated
71 */
72 void setAge(int value);
73
74 /**
75 * Returns the value of the '<em><b>Children</b></em>' reference list.
76 * The list contents are of type {@link familytree.Member}.
77 * It is bidirectional and its opposite is '{@link familytree.Member#getParents <em>Parents</em>}'.
78 * <!-- begin-user-doc -->
79 * <!-- end-user-doc -->
80 * @return the value of the '<em>Children</em>' reference list.
81 * @see familytree.FamilytreePackage#getMember_Children()
82 * @see familytree.Member#getParents
83 * @model opposite="parents"
84 * @generated
85 */
86 EList<Member> getChildren();
87
88 /**
89 * Returns the value of the '<em><b>Parents</b></em>' reference list.
90 * The list contents are of type {@link familytree.Member}.
91 * It is bidirectional and its opposite is '{@link familytree.Member#getChildren <em>Children</em>}'.
92 * <!-- begin-user-doc -->
93 * <!-- end-user-doc -->
94 * @return the value of the '<em>Parents</em>' reference list.
95 * @see familytree.FamilytreePackage#getMember_Parents()
96 * @see familytree.Member#getChildren
97 * @model opposite="children" upper="2"
98 * @generated
99 */
100 EList<Member> getParents();
101
102} // Member
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilyTreeImpl.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilyTreeImpl.java
new file mode 100644
index 00000000..07b0a1dd
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilyTreeImpl.java
@@ -0,0 +1,153 @@
1/**
2 */
3package familytree.impl;
4
5import familytree.FamilyTree;
6import familytree.FamilytreePackage;
7import familytree.Member;
8
9import java.util.Collection;
10
11import org.eclipse.emf.common.notify.NotificationChain;
12
13import org.eclipse.emf.common.util.EList;
14
15import org.eclipse.emf.ecore.EClass;
16import org.eclipse.emf.ecore.InternalEObject;
17
18import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
19
20import org.eclipse.emf.ecore.util.EObjectContainmentEList;
21import org.eclipse.emf.ecore.util.InternalEList;
22
23/**
24 * <!-- begin-user-doc -->
25 * An implementation of the model object '<em><b>Family Tree</b></em>'.
26 * <!-- end-user-doc -->
27 * <p>
28 * The following features are implemented:
29 * </p>
30 * <ul>
31 * <li>{@link familytree.impl.FamilyTreeImpl#getMembers <em>Members</em>}</li>
32 * </ul>
33 *
34 * @generated
35 */
36public class FamilyTreeImpl extends MinimalEObjectImpl.Container implements FamilyTree {
37 /**
38 * The cached value of the '{@link #getMembers() <em>Members</em>}' containment reference list.
39 * <!-- begin-user-doc -->
40 * <!-- end-user-doc -->
41 * @see #getMembers()
42 * @generated
43 * @ordered
44 */
45 protected EList<Member> members;
46
47 /**
48 * <!-- begin-user-doc -->
49 * <!-- end-user-doc -->
50 * @generated
51 */
52 protected FamilyTreeImpl() {
53 super();
54 }
55
56 /**
57 * <!-- begin-user-doc -->
58 * <!-- end-user-doc -->
59 * @generated
60 */
61 @Override
62 protected EClass eStaticClass() {
63 return FamilytreePackage.Literals.FAMILY_TREE;
64 }
65
66 /**
67 * <!-- begin-user-doc -->
68 * <!-- end-user-doc -->
69 * @generated
70 */
71 @Override
72 public EList<Member> getMembers() {
73 if (members == null) {
74 members = new EObjectContainmentEList<Member>(Member.class, this, FamilytreePackage.FAMILY_TREE__MEMBERS);
75 }
76 return members;
77 }
78
79 /**
80 * <!-- begin-user-doc -->
81 * <!-- end-user-doc -->
82 * @generated
83 */
84 @Override
85 public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
86 switch (featureID) {
87 case FamilytreePackage.FAMILY_TREE__MEMBERS:
88 return ((InternalEList<?>)getMembers()).basicRemove(otherEnd, msgs);
89 }
90 return super.eInverseRemove(otherEnd, featureID, msgs);
91 }
92
93 /**
94 * <!-- begin-user-doc -->
95 * <!-- end-user-doc -->
96 * @generated
97 */
98 @Override
99 public Object eGet(int featureID, boolean resolve, boolean coreType) {
100 switch (featureID) {
101 case FamilytreePackage.FAMILY_TREE__MEMBERS:
102 return getMembers();
103 }
104 return super.eGet(featureID, resolve, coreType);
105 }
106
107 /**
108 * <!-- begin-user-doc -->
109 * <!-- end-user-doc -->
110 * @generated
111 */
112 @SuppressWarnings("unchecked")
113 @Override
114 public void eSet(int featureID, Object newValue) {
115 switch (featureID) {
116 case FamilytreePackage.FAMILY_TREE__MEMBERS:
117 getMembers().clear();
118 getMembers().addAll((Collection<? extends Member>)newValue);
119 return;
120 }
121 super.eSet(featureID, newValue);
122 }
123
124 /**
125 * <!-- begin-user-doc -->
126 * <!-- end-user-doc -->
127 * @generated
128 */
129 @Override
130 public void eUnset(int featureID) {
131 switch (featureID) {
132 case FamilytreePackage.FAMILY_TREE__MEMBERS:
133 getMembers().clear();
134 return;
135 }
136 super.eUnset(featureID);
137 }
138
139 /**
140 * <!-- begin-user-doc -->
141 * <!-- end-user-doc -->
142 * @generated
143 */
144 @Override
145 public boolean eIsSet(int featureID) {
146 switch (featureID) {
147 case FamilytreePackage.FAMILY_TREE__MEMBERS:
148 return members != null && !members.isEmpty();
149 }
150 return super.eIsSet(featureID);
151 }
152
153} //FamilyTreeImpl
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreeFactoryImpl.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreeFactoryImpl.java
new file mode 100644
index 00000000..bc54d09c
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreeFactoryImpl.java
@@ -0,0 +1,109 @@
1/**
2 */
3package familytree.impl;
4
5import familytree.*;
6
7import org.eclipse.emf.ecore.EClass;
8import org.eclipse.emf.ecore.EObject;
9import org.eclipse.emf.ecore.EPackage;
10
11import org.eclipse.emf.ecore.impl.EFactoryImpl;
12
13import org.eclipse.emf.ecore.plugin.EcorePlugin;
14
15/**
16 * <!-- begin-user-doc -->
17 * An implementation of the model <b>Factory</b>.
18 * <!-- end-user-doc -->
19 * @generated
20 */
21public class FamilytreeFactoryImpl extends EFactoryImpl implements FamilytreeFactory {
22 /**
23 * Creates the default factory implementation.
24 * <!-- begin-user-doc -->
25 * <!-- end-user-doc -->
26 * @generated
27 */
28 public static FamilytreeFactory init() {
29 try {
30 FamilytreeFactory theFamilytreeFactory = (FamilytreeFactory)EPackage.Registry.INSTANCE.getEFactory(FamilytreePackage.eNS_URI);
31 if (theFamilytreeFactory != null) {
32 return theFamilytreeFactory;
33 }
34 }
35 catch (Exception exception) {
36 EcorePlugin.INSTANCE.log(exception);
37 }
38 return new FamilytreeFactoryImpl();
39 }
40
41 /**
42 * Creates an instance of the factory.
43 * <!-- begin-user-doc -->
44 * <!-- end-user-doc -->
45 * @generated
46 */
47 public FamilytreeFactoryImpl() {
48 super();
49 }
50
51 /**
52 * <!-- begin-user-doc -->
53 * <!-- end-user-doc -->
54 * @generated
55 */
56 @Override
57 public EObject create(EClass eClass) {
58 switch (eClass.getClassifierID()) {
59 case FamilytreePackage.FAMILY_TREE: return createFamilyTree();
60 case FamilytreePackage.MEMBER: return createMember();
61 default:
62 throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
63 }
64 }
65
66 /**
67 * <!-- begin-user-doc -->
68 * <!-- end-user-doc -->
69 * @generated
70 */
71 @Override
72 public FamilyTree createFamilyTree() {
73 FamilyTreeImpl familyTree = new FamilyTreeImpl();
74 return familyTree;
75 }
76
77 /**
78 * <!-- begin-user-doc -->
79 * <!-- end-user-doc -->
80 * @generated
81 */
82 @Override
83 public Member createMember() {
84 MemberImpl member = new MemberImpl();
85 return member;
86 }
87
88 /**
89 * <!-- begin-user-doc -->
90 * <!-- end-user-doc -->
91 * @generated
92 */
93 @Override
94 public FamilytreePackage getFamilytreePackage() {
95 return (FamilytreePackage)getEPackage();
96 }
97
98 /**
99 * <!-- begin-user-doc -->
100 * <!-- end-user-doc -->
101 * @deprecated
102 * @generated
103 */
104 @Deprecated
105 public static FamilytreePackage getPackage() {
106 return FamilytreePackage.eINSTANCE;
107 }
108
109} //FamilytreeFactoryImpl
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreePackageImpl.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreePackageImpl.java
new file mode 100644
index 00000000..0980260e
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/FamilytreePackageImpl.java
@@ -0,0 +1,251 @@
1/**
2 */
3package familytree.impl;
4
5import familytree.FamilyTree;
6import familytree.FamilytreeFactory;
7import familytree.FamilytreePackage;
8import familytree.Member;
9
10import org.eclipse.emf.ecore.EAttribute;
11import org.eclipse.emf.ecore.EClass;
12import org.eclipse.emf.ecore.EPackage;
13import org.eclipse.emf.ecore.EReference;
14
15import org.eclipse.emf.ecore.impl.EPackageImpl;
16
17/**
18 * <!-- begin-user-doc -->
19 * An implementation of the model <b>Package</b>.
20 * <!-- end-user-doc -->
21 * @generated
22 */
23public class FamilytreePackageImpl extends EPackageImpl implements FamilytreePackage {
24 /**
25 * <!-- begin-user-doc -->
26 * <!-- end-user-doc -->
27 * @generated
28 */
29 private EClass familyTreeEClass = null;
30
31 /**
32 * <!-- begin-user-doc -->
33 * <!-- end-user-doc -->
34 * @generated
35 */
36 private EClass memberEClass = null;
37
38 /**
39 * Creates an instance of the model <b>Package</b>, registered with
40 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
41 * package URI value.
42 * <p>Note: the correct way to create the package is via the static
43 * factory method {@link #init init()}, which also performs
44 * initialization of the package, or returns the registered package,
45 * if one already exists.
46 * <!-- begin-user-doc -->
47 * <!-- end-user-doc -->
48 * @see org.eclipse.emf.ecore.EPackage.Registry
49 * @see familytree.FamilytreePackage#eNS_URI
50 * @see #init()
51 * @generated
52 */
53 private FamilytreePackageImpl() {
54 super(eNS_URI, FamilytreeFactory.eINSTANCE);
55 }
56
57 /**
58 * <!-- begin-user-doc -->
59 * <!-- end-user-doc -->
60 * @generated
61 */
62 private static boolean isInited = false;
63
64 /**
65 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
66 *
67 * <p>This method is used to initialize {@link FamilytreePackage#eINSTANCE} when that field is accessed.
68 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
69 * <!-- begin-user-doc -->
70 * <!-- end-user-doc -->
71 * @see #eNS_URI
72 * @see #createPackageContents()
73 * @see #initializePackageContents()
74 * @generated
75 */
76 public static FamilytreePackage init() {
77 if (isInited) return (FamilytreePackage)EPackage.Registry.INSTANCE.getEPackage(FamilytreePackage.eNS_URI);
78
79 // Obtain or create and register package
80 Object registeredFamilytreePackage = EPackage.Registry.INSTANCE.get(eNS_URI);
81 FamilytreePackageImpl theFamilytreePackage = registeredFamilytreePackage instanceof FamilytreePackageImpl ? (FamilytreePackageImpl)registeredFamilytreePackage : new FamilytreePackageImpl();
82
83 isInited = true;
84
85 // Create package meta-data objects
86 theFamilytreePackage.createPackageContents();
87
88 // Initialize created meta-data
89 theFamilytreePackage.initializePackageContents();
90
91 // Mark meta-data to indicate it can't be changed
92 theFamilytreePackage.freeze();
93
94 // Update the registry and return the package
95 EPackage.Registry.INSTANCE.put(FamilytreePackage.eNS_URI, theFamilytreePackage);
96 return theFamilytreePackage;
97 }
98
99 /**
100 * <!-- begin-user-doc -->
101 * <!-- end-user-doc -->
102 * @generated
103 */
104 @Override
105 public EClass getFamilyTree() {
106 return familyTreeEClass;
107 }
108
109 /**
110 * <!-- begin-user-doc -->
111 * <!-- end-user-doc -->
112 * @generated
113 */
114 @Override
115 public EReference getFamilyTree_Members() {
116 return (EReference)familyTreeEClass.getEStructuralFeatures().get(0);
117 }
118
119 /**
120 * <!-- begin-user-doc -->
121 * <!-- end-user-doc -->
122 * @generated
123 */
124 @Override
125 public EClass getMember() {
126 return memberEClass;
127 }
128
129 /**
130 * <!-- begin-user-doc -->
131 * <!-- end-user-doc -->
132 * @generated
133 */
134 @Override
135 public EAttribute getMember_Name() {
136 return (EAttribute)memberEClass.getEStructuralFeatures().get(0);
137 }
138
139 /**
140 * <!-- begin-user-doc -->
141 * <!-- end-user-doc -->
142 * @generated
143 */
144 @Override
145 public EAttribute getMember_Age() {
146 return (EAttribute)memberEClass.getEStructuralFeatures().get(1);
147 }
148
149 /**
150 * <!-- begin-user-doc -->
151 * <!-- end-user-doc -->
152 * @generated
153 */
154 @Override
155 public EReference getMember_Children() {
156 return (EReference)memberEClass.getEStructuralFeatures().get(2);
157 }
158
159 /**
160 * <!-- begin-user-doc -->
161 * <!-- end-user-doc -->
162 * @generated
163 */
164 @Override
165 public EReference getMember_Parents() {
166 return (EReference)memberEClass.getEStructuralFeatures().get(3);
167 }
168
169 /**
170 * <!-- begin-user-doc -->
171 * <!-- end-user-doc -->
172 * @generated
173 */
174 @Override
175 public FamilytreeFactory getFamilytreeFactory() {
176 return (FamilytreeFactory)getEFactoryInstance();
177 }
178
179 /**
180 * <!-- begin-user-doc -->
181 * <!-- end-user-doc -->
182 * @generated
183 */
184 private boolean isCreated = false;
185
186 /**
187 * Creates the meta-model objects for the package. This method is
188 * guarded to have no affect on any invocation but its first.
189 * <!-- begin-user-doc -->
190 * <!-- end-user-doc -->
191 * @generated
192 */
193 public void createPackageContents() {
194 if (isCreated) return;
195 isCreated = true;
196
197 // Create classes and their features
198 familyTreeEClass = createEClass(FAMILY_TREE);
199 createEReference(familyTreeEClass, FAMILY_TREE__MEMBERS);
200
201 memberEClass = createEClass(MEMBER);
202 createEAttribute(memberEClass, MEMBER__NAME);
203 createEAttribute(memberEClass, MEMBER__AGE);
204 createEReference(memberEClass, MEMBER__CHILDREN);
205 createEReference(memberEClass, MEMBER__PARENTS);
206 }
207
208 /**
209 * <!-- begin-user-doc -->
210 * <!-- end-user-doc -->
211 * @generated
212 */
213 private boolean isInitialized = false;
214
215 /**
216 * Complete the initialization of the package and its meta-model. This
217 * method is guarded to have no affect on any invocation but its first.
218 * <!-- begin-user-doc -->
219 * <!-- end-user-doc -->
220 * @generated
221 */
222 public void initializePackageContents() {
223 if (isInitialized) return;
224 isInitialized = true;
225
226 // Initialize package
227 setName(eNAME);
228 setNsPrefix(eNS_PREFIX);
229 setNsURI(eNS_URI);
230
231 // Create type parameters
232
233 // Set bounds for type parameters
234
235 // Add supertypes to classes
236
237 // Initialize classes, features, and operations; add parameters
238 initEClass(familyTreeEClass, FamilyTree.class, "FamilyTree", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
239 initEReference(getFamilyTree_Members(), this.getMember(), null, "members", null, 0, -1, FamilyTree.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
240
241 initEClass(memberEClass, Member.class, "Member", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
242 initEAttribute(getMember_Name(), ecorePackage.getEString(), "name", null, 0, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
243 initEAttribute(getMember_Age(), ecorePackage.getEInt(), "age", "0", 0, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
244 initEReference(getMember_Children(), this.getMember(), this.getMember_Parents(), "children", null, 0, -1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
245 initEReference(getMember_Parents(), this.getMember(), this.getMember_Children(), "parents", null, 0, 2, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
246
247 // Create resource
248 createResource(eNS_URI);
249 }
250
251} //FamilytreePackageImpl
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/MemberImpl.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/MemberImpl.java
new file mode 100644
index 00000000..77e423bd
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/impl/MemberImpl.java
@@ -0,0 +1,334 @@
1/**
2 */
3package familytree.impl;
4
5import familytree.FamilytreePackage;
6import familytree.Member;
7
8import java.util.Collection;
9
10import org.eclipse.emf.common.notify.Notification;
11import org.eclipse.emf.common.notify.NotificationChain;
12
13import org.eclipse.emf.common.util.EList;
14
15import org.eclipse.emf.ecore.EClass;
16import org.eclipse.emf.ecore.InternalEObject;
17
18import org.eclipse.emf.ecore.impl.ENotificationImpl;
19import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
20
21import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
22import org.eclipse.emf.ecore.util.InternalEList;
23
24/**
25 * <!-- begin-user-doc -->
26 * An implementation of the model object '<em><b>Member</b></em>'.
27 * <!-- end-user-doc -->
28 * <p>
29 * The following features are implemented:
30 * </p>
31 * <ul>
32 * <li>{@link familytree.impl.MemberImpl#getName <em>Name</em>}</li>
33 * <li>{@link familytree.impl.MemberImpl#getAge <em>Age</em>}</li>
34 * <li>{@link familytree.impl.MemberImpl#getChildren <em>Children</em>}</li>
35 * <li>{@link familytree.impl.MemberImpl#getParents <em>Parents</em>}</li>
36 * </ul>
37 *
38 * @generated
39 */
40public class MemberImpl extends MinimalEObjectImpl.Container implements Member {
41 /**
42 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
43 * <!-- begin-user-doc -->
44 * <!-- end-user-doc -->
45 * @see #getName()
46 * @generated
47 * @ordered
48 */
49 protected static final String NAME_EDEFAULT = null;
50
51 /**
52 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
53 * <!-- begin-user-doc -->
54 * <!-- end-user-doc -->
55 * @see #getName()
56 * @generated
57 * @ordered
58 */
59 protected String name = NAME_EDEFAULT;
60
61 /**
62 * The default value of the '{@link #getAge() <em>Age</em>}' attribute.
63 * <!-- begin-user-doc -->
64 * <!-- end-user-doc -->
65 * @see #getAge()
66 * @generated
67 * @ordered
68 */
69 protected static final int AGE_EDEFAULT = 0;
70
71 /**
72 * The cached value of the '{@link #getAge() <em>Age</em>}' attribute.
73 * <!-- begin-user-doc -->
74 * <!-- end-user-doc -->
75 * @see #getAge()
76 * @generated
77 * @ordered
78 */
79 protected int age = AGE_EDEFAULT;
80
81 /**
82 * The cached value of the '{@link #getChildren() <em>Children</em>}' reference list.
83 * <!-- begin-user-doc -->
84 * <!-- end-user-doc -->
85 * @see #getChildren()
86 * @generated
87 * @ordered
88 */
89 protected EList<Member> children;
90
91 /**
92 * The cached value of the '{@link #getParents() <em>Parents</em>}' reference list.
93 * <!-- begin-user-doc -->
94 * <!-- end-user-doc -->
95 * @see #getParents()
96 * @generated
97 * @ordered
98 */
99 protected EList<Member> parents;
100
101 /**
102 * <!-- begin-user-doc -->
103 * <!-- end-user-doc -->
104 * @generated
105 */
106 protected MemberImpl() {
107 super();
108 }
109
110 /**
111 * <!-- begin-user-doc -->
112 * <!-- end-user-doc -->
113 * @generated
114 */
115 @Override
116 protected EClass eStaticClass() {
117 return FamilytreePackage.Literals.MEMBER;
118 }
119
120 /**
121 * <!-- begin-user-doc -->
122 * <!-- end-user-doc -->
123 * @generated
124 */
125 @Override
126 public String getName() {
127 return name;
128 }
129
130 /**
131 * <!-- begin-user-doc -->
132 * <!-- end-user-doc -->
133 * @generated
134 */
135 @Override
136 public void setName(String newName) {
137 String oldName = name;
138 name = newName;
139 if (eNotificationRequired())
140 eNotify(new ENotificationImpl(this, Notification.SET, FamilytreePackage.MEMBER__NAME, oldName, name));
141 }
142
143 /**
144 * <!-- begin-user-doc -->
145 * <!-- end-user-doc -->
146 * @generated
147 */
148 @Override
149 public int getAge() {
150 return age;
151 }
152
153 /**
154 * <!-- begin-user-doc -->
155 * <!-- end-user-doc -->
156 * @generated
157 */
158 @Override
159 public void setAge(int newAge) {
160 int oldAge = age;
161 age = newAge;
162 if (eNotificationRequired())
163 eNotify(new ENotificationImpl(this, Notification.SET, FamilytreePackage.MEMBER__AGE, oldAge, age));
164 }
165
166 /**
167 * <!-- begin-user-doc -->
168 * <!-- end-user-doc -->
169 * @generated
170 */
171 @Override
172 public EList<Member> getChildren() {
173 if (children == null) {
174 children = new EObjectWithInverseResolvingEList.ManyInverse<Member>(Member.class, this, FamilytreePackage.MEMBER__CHILDREN, FamilytreePackage.MEMBER__PARENTS);
175 }
176 return children;
177 }
178
179 /**
180 * <!-- begin-user-doc -->
181 * <!-- end-user-doc -->
182 * @generated
183 */
184 @Override
185 public EList<Member> getParents() {
186 if (parents == null) {
187 parents = new EObjectWithInverseResolvingEList.ManyInverse<Member>(Member.class, this, FamilytreePackage.MEMBER__PARENTS, FamilytreePackage.MEMBER__CHILDREN);
188 }
189 return parents;
190 }
191
192 /**
193 * <!-- begin-user-doc -->
194 * <!-- end-user-doc -->
195 * @generated
196 */
197 @SuppressWarnings("unchecked")
198 @Override
199 public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
200 switch (featureID) {
201 case FamilytreePackage.MEMBER__CHILDREN:
202 return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
203 case FamilytreePackage.MEMBER__PARENTS:
204 return ((InternalEList<InternalEObject>)(InternalEList<?>)getParents()).basicAdd(otherEnd, msgs);
205 }
206 return super.eInverseAdd(otherEnd, featureID, msgs);
207 }
208
209 /**
210 * <!-- begin-user-doc -->
211 * <!-- end-user-doc -->
212 * @generated
213 */
214 @Override
215 public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
216 switch (featureID) {
217 case FamilytreePackage.MEMBER__CHILDREN:
218 return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
219 case FamilytreePackage.MEMBER__PARENTS:
220 return ((InternalEList<?>)getParents()).basicRemove(otherEnd, msgs);
221 }
222 return super.eInverseRemove(otherEnd, featureID, msgs);
223 }
224
225 /**
226 * <!-- begin-user-doc -->
227 * <!-- end-user-doc -->
228 * @generated
229 */
230 @Override
231 public Object eGet(int featureID, boolean resolve, boolean coreType) {
232 switch (featureID) {
233 case FamilytreePackage.MEMBER__NAME:
234 return getName();
235 case FamilytreePackage.MEMBER__AGE:
236 return getAge();
237 case FamilytreePackage.MEMBER__CHILDREN:
238 return getChildren();
239 case FamilytreePackage.MEMBER__PARENTS:
240 return getParents();
241 }
242 return super.eGet(featureID, resolve, coreType);
243 }
244
245 /**
246 * <!-- begin-user-doc -->
247 * <!-- end-user-doc -->
248 * @generated
249 */
250 @SuppressWarnings("unchecked")
251 @Override
252 public void eSet(int featureID, Object newValue) {
253 switch (featureID) {
254 case FamilytreePackage.MEMBER__NAME:
255 setName((String)newValue);
256 return;
257 case FamilytreePackage.MEMBER__AGE:
258 setAge((Integer)newValue);
259 return;
260 case FamilytreePackage.MEMBER__CHILDREN:
261 getChildren().clear();
262 getChildren().addAll((Collection<? extends Member>)newValue);
263 return;
264 case FamilytreePackage.MEMBER__PARENTS:
265 getParents().clear();
266 getParents().addAll((Collection<? extends Member>)newValue);
267 return;
268 }
269 super.eSet(featureID, newValue);
270 }
271
272 /**
273 * <!-- begin-user-doc -->
274 * <!-- end-user-doc -->
275 * @generated
276 */
277 @Override
278 public void eUnset(int featureID) {
279 switch (featureID) {
280 case FamilytreePackage.MEMBER__NAME:
281 setName(NAME_EDEFAULT);
282 return;
283 case FamilytreePackage.MEMBER__AGE:
284 setAge(AGE_EDEFAULT);
285 return;
286 case FamilytreePackage.MEMBER__CHILDREN:
287 getChildren().clear();
288 return;
289 case FamilytreePackage.MEMBER__PARENTS:
290 getParents().clear();
291 return;
292 }
293 super.eUnset(featureID);
294 }
295
296 /**
297 * <!-- begin-user-doc -->
298 * <!-- end-user-doc -->
299 * @generated
300 */
301 @Override
302 public boolean eIsSet(int featureID) {
303 switch (featureID) {
304 case FamilytreePackage.MEMBER__NAME:
305 return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
306 case FamilytreePackage.MEMBER__AGE:
307 return age != AGE_EDEFAULT;
308 case FamilytreePackage.MEMBER__CHILDREN:
309 return children != null && !children.isEmpty();
310 case FamilytreePackage.MEMBER__PARENTS:
311 return parents != null && !parents.isEmpty();
312 }
313 return super.eIsSet(featureID);
314 }
315
316 /**
317 * <!-- begin-user-doc -->
318 * <!-- end-user-doc -->
319 * @generated
320 */
321 @Override
322 public String toString() {
323 if (eIsProxy()) return super.toString();
324
325 StringBuilder result = new StringBuilder(super.toString());
326 result.append(" (name: ");
327 result.append(name);
328 result.append(", age: ");
329 result.append(age);
330 result.append(')');
331 return result.toString();
332 }
333
334} //MemberImpl
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeAdapterFactory.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeAdapterFactory.java
new file mode 100644
index 00000000..6412c40f
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeAdapterFactory.java
@@ -0,0 +1,138 @@
1/**
2 */
3package familytree.util;
4
5import familytree.*;
6
7import org.eclipse.emf.common.notify.Adapter;
8import org.eclipse.emf.common.notify.Notifier;
9
10import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
11
12import org.eclipse.emf.ecore.EObject;
13
14/**
15 * <!-- begin-user-doc -->
16 * The <b>Adapter Factory</b> for the model.
17 * It provides an adapter <code>createXXX</code> method for each class of the model.
18 * <!-- end-user-doc -->
19 * @see familytree.FamilytreePackage
20 * @generated
21 */
22public class FamilytreeAdapterFactory extends AdapterFactoryImpl {
23 /**
24 * The cached model package.
25 * <!-- begin-user-doc -->
26 * <!-- end-user-doc -->
27 * @generated
28 */
29 protected static FamilytreePackage modelPackage;
30
31 /**
32 * Creates an instance of the adapter factory.
33 * <!-- begin-user-doc -->
34 * <!-- end-user-doc -->
35 * @generated
36 */
37 public FamilytreeAdapterFactory() {
38 if (modelPackage == null) {
39 modelPackage = FamilytreePackage.eINSTANCE;
40 }
41 }
42
43 /**
44 * Returns whether this factory is applicable for the type of the object.
45 * <!-- begin-user-doc -->
46 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
47 * <!-- end-user-doc -->
48 * @return whether this factory is applicable for the type of the object.
49 * @generated
50 */
51 @Override
52 public boolean isFactoryForType(Object object) {
53 if (object == modelPackage) {
54 return true;
55 }
56 if (object instanceof EObject) {
57 return ((EObject)object).eClass().getEPackage() == modelPackage;
58 }
59 return false;
60 }
61
62 /**
63 * The switch that delegates to the <code>createXXX</code> methods.
64 * <!-- begin-user-doc -->
65 * <!-- end-user-doc -->
66 * @generated
67 */
68 protected FamilytreeSwitch<Adapter> modelSwitch =
69 new FamilytreeSwitch<Adapter>() {
70 @Override
71 public Adapter caseFamilyTree(FamilyTree object) {
72 return createFamilyTreeAdapter();
73 }
74 @Override
75 public Adapter caseMember(Member object) {
76 return createMemberAdapter();
77 }
78 @Override
79 public Adapter defaultCase(EObject object) {
80 return createEObjectAdapter();
81 }
82 };
83
84 /**
85 * Creates an adapter for the <code>target</code>.
86 * <!-- begin-user-doc -->
87 * <!-- end-user-doc -->
88 * @param target the object to adapt.
89 * @return the adapter for the <code>target</code>.
90 * @generated
91 */
92 @Override
93 public Adapter createAdapter(Notifier target) {
94 return modelSwitch.doSwitch((EObject)target);
95 }
96
97
98 /**
99 * Creates a new adapter for an object of class '{@link familytree.FamilyTree <em>Family Tree</em>}'.
100 * <!-- begin-user-doc -->
101 * This default implementation returns null so that we can easily ignore cases;
102 * it's useful to ignore a case when inheritance will catch all the cases anyway.
103 * <!-- end-user-doc -->
104 * @return the new adapter.
105 * @see familytree.FamilyTree
106 * @generated
107 */
108 public Adapter createFamilyTreeAdapter() {
109 return null;
110 }
111
112 /**
113 * Creates a new adapter for an object of class '{@link familytree.Member <em>Member</em>}'.
114 * <!-- begin-user-doc -->
115 * This default implementation returns null so that we can easily ignore cases;
116 * it's useful to ignore a case when inheritance will catch all the cases anyway.
117 * <!-- end-user-doc -->
118 * @return the new adapter.
119 * @see familytree.Member
120 * @generated
121 */
122 public Adapter createMemberAdapter() {
123 return null;
124 }
125
126 /**
127 * Creates a new adapter for the default case.
128 * <!-- begin-user-doc -->
129 * This default implementation returns null.
130 * <!-- end-user-doc -->
131 * @return the new adapter.
132 * @generated
133 */
134 public Adapter createEObjectAdapter() {
135 return null;
136 }
137
138} //FamilytreeAdapterFactory
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeSwitch.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeSwitch.java
new file mode 100644
index 00000000..75bbce3d
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.model/src/familytree/util/FamilytreeSwitch.java
@@ -0,0 +1,131 @@
1/**
2 */
3package familytree.util;
4
5import familytree.*;
6
7import org.eclipse.emf.ecore.EObject;
8import org.eclipse.emf.ecore.EPackage;
9
10import org.eclipse.emf.ecore.util.Switch;
11
12/**
13 * <!-- begin-user-doc -->
14 * The <b>Switch</b> for the model's inheritance hierarchy.
15 * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
16 * to invoke the <code>caseXXX</code> method for each class of the model,
17 * starting with the actual class of the object
18 * and proceeding up the inheritance hierarchy
19 * until a non-null result is returned,
20 * which is the result of the switch.
21 * <!-- end-user-doc -->
22 * @see familytree.FamilytreePackage
23 * @generated
24 */
25public class FamilytreeSwitch<T> extends Switch<T> {
26 /**
27 * The cached model package
28 * <!-- begin-user-doc -->
29 * <!-- end-user-doc -->
30 * @generated
31 */
32 protected static FamilytreePackage modelPackage;
33
34 /**
35 * Creates an instance of the switch.
36 * <!-- begin-user-doc -->
37 * <!-- end-user-doc -->
38 * @generated
39 */
40 public FamilytreeSwitch() {
41 if (modelPackage == null) {
42 modelPackage = FamilytreePackage.eINSTANCE;
43 }
44 }
45
46 /**
47 * Checks whether this is a switch for the given package.
48 * <!-- begin-user-doc -->
49 * <!-- end-user-doc -->
50 * @param ePackage the package in question.
51 * @return whether this is a switch for the given package.
52 * @generated
53 */
54 @Override
55 protected boolean isSwitchFor(EPackage ePackage) {
56 return ePackage == modelPackage;
57 }
58
59 /**
60 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
61 * <!-- begin-user-doc -->
62 * <!-- end-user-doc -->
63 * @return the first non-null result returned by a <code>caseXXX</code> call.
64 * @generated
65 */
66 @Override
67 protected T doSwitch(int classifierID, EObject theEObject) {
68 switch (classifierID) {
69 case FamilytreePackage.FAMILY_TREE: {
70 FamilyTree familyTree = (FamilyTree)theEObject;
71 T result = caseFamilyTree(familyTree);
72 if (result == null) result = defaultCase(theEObject);
73 return result;
74 }
75 case FamilytreePackage.MEMBER: {
76 Member member = (Member)theEObject;
77 T result = caseMember(member);
78 if (result == null) result = defaultCase(theEObject);
79 return result;
80 }
81 default: return defaultCase(theEObject);
82 }
83 }
84
85 /**
86 * Returns the result of interpreting the object as an instance of '<em>Family Tree</em>'.
87 * <!-- begin-user-doc -->
88 * This implementation returns null;
89 * returning a non-null result will terminate the switch.
90 * <!-- end-user-doc -->
91 * @param object the target of the switch.
92 * @return the result of interpreting the object as an instance of '<em>Family Tree</em>'.
93 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
94 * @generated
95 */
96 public T caseFamilyTree(FamilyTree object) {
97 return null;
98 }
99
100 /**
101 * Returns the result of interpreting the object as an instance of '<em>Member</em>'.
102 * <!-- begin-user-doc -->
103 * This implementation returns null;
104 * returning a non-null result will terminate the switch.
105 * <!-- end-user-doc -->
106 * @param object the target of the switch.
107 * @return the result of interpreting the object as an instance of '<em>Member</em>'.
108 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
109 * @generated
110 */
111 public T caseMember(Member object) {
112 return null;
113 }
114
115 /**
116 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
117 * <!-- begin-user-doc -->
118 * This implementation returns null;
119 * returning a non-null result will terminate the switch, but this is the last case anyway.
120 * <!-- end-user-doc -->
121 * @param object the target of the switch.
122 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
123 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
124 * @generated
125 */
126 @Override
127 public T defaultCase(EObject object) {
128 return null;
129 }
130
131} //FamilytreeSwitch
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.classpath b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.classpath
new file mode 100644
index 00000000..4cc715d5
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.classpath
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<classpath>
3 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
5 <classpathentry kind="src" path="src"/>
6 <classpathentry kind="src" path="src-gen"/>
7 <classpathentry kind="output" path="bin"/>
8</classpath>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.project b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.project
new file mode 100644
index 00000000..98c56323
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.project
@@ -0,0 +1,40 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription>
3 <name>case.study.familyTree.run</name>
4 <comment></comment>
5 <projects>
6 </projects>
7 <buildSpec>
8 <buildCommand>
9 <name>org.eclipse.viatra.query.tooling.ui.projectbuilder</name>
10 <arguments>
11 </arguments>
12 </buildCommand>
13 <buildCommand>
14 <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
15 <arguments>
16 </arguments>
17 </buildCommand>
18 <buildCommand>
19 <name>org.eclipse.jdt.core.javabuilder</name>
20 <arguments>
21 </arguments>
22 </buildCommand>
23 <buildCommand>
24 <name>org.eclipse.pde.ManifestBuilder</name>
25 <arguments>
26 </arguments>
27 </buildCommand>
28 <buildCommand>
29 <name>org.eclipse.pde.SchemaBuilder</name>
30 <arguments>
31 </arguments>
32 </buildCommand>
33 </buildSpec>
34 <natures>
35 <nature>org.eclipse.pde.PluginNature</nature>
36 <nature>org.eclipse.jdt.core.javanature</nature>
37 <nature>org.eclipse.viatra.query.projectnature</nature>
38 <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
39 </natures>
40</projectDescription>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.settings/org.eclipse.jdt.core.prefs b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..295926d9
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
1eclipse.preferences.version=1
2org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4org.eclipse.jdt.core.compiler.compliance=1.8
5org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7org.eclipse.jdt.core.compiler.source=1.8
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/META-INF/MANIFEST.MF b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..3f4abc65
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2
3Bundle-Name: case.study.familyTree.run
4Bundle-SymbolicName: case.study.familyTree.run;singleton:=true
5Bundle-Version: 0.0.1.qualifier
6Export-Package: queries
7Require-Bundle: org.eclipse.emf.ecore,
8 org.eclipse.viatra.query.runtime,
9 org.eclipse.viatra.query.runtime.rete,
10 org.eclipse.viatra.query.runtime.localsearch,
11 org.eclipse.xtext.xbase.lib,
12 case.study.familyTree.model;bundle-version="1.0.0"
13Import-Package: hu.bme.mit.inf.dslreasoner.application.execution,
14 org.apache.log4j
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.FamilyTreeConstraints.java._trace b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.FamilyTreeConstraints.java._trace
new file mode 100644
index 00000000..80158bd8
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.FamilyTreeConstraints.java._trace
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.MemberIsItsOwnParent.java._trace b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.MemberIsItsOwnParent.java._trace
new file mode 100644
index 00000000..1b0dca98
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/.MemberIsItsOwnParent.java._trace
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/familyTreeConstraints.vql b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/familyTreeConstraints.vql
new file mode 100644
index 00000000..1b9b6659
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/queries/familyTreeConstraints.vql
@@ -0,0 +1,24 @@
1package queries
2
3import "http://www.example.org/familytree"
4
5@Constraint(message="memberIsItsOwnParent", severity="error", key={m})
6pattern memberIsItsOwnParent(m: Member) = {
7 FamilyTree.members(_, m);
8 Member.parents(m, p);
9 m == p;
10}
11
12//@Constraint(message="parentTooYoung", severity="error", key={m, p})
13//pattern parentTooYoung(m: Member, p: Member) = {
14// FamilyTree.members(_, m);
15// Member.parents(m, p);
16// Member.age(m, mAge);
17// Member.age(p, pAge);
18// check (mAge <= (pAge + 12));
19//}
20
21
22
23
24
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/build.properties b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/build.properties
new file mode 100644
index 00000000..efae4b07
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/build.properties
@@ -0,0 +1,6 @@
1bin.includes = META-INF/,\
2 .
3source.. = src/,\
4 src-gen/,\
5 src-gen/
6output.. = bin/
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytree.ecore b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytree.ecore
new file mode 100644
index 00000000..f2e51f65
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytree.ecore
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="familytree" nsURI="http://www.example.org/familytree" nsPrefix="familytree">
4 <eClassifiers xsi:type="ecore:EClass" name="FamilyTree">
5 <eStructuralFeatures xsi:type="ecore:EReference" name="members" upperBound="-1"
6 eType="#//Member" containment="true"/>
7 </eClassifiers>
8 <eClassifiers xsi:type="ecore:EClass" name="Member">
9 <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
10 <eStructuralFeatures xsi:type="ecore:EAttribute" name="age" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
11 defaultValueLiteral="0"/>
12 <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
13 eType="#//Member" eOpposite="#//Member/parents"/>
14 <eStructuralFeatures xsi:type="ecore:EReference" name="parents" upperBound="2"
15 eType="#//Member" eOpposite="#//Member/children"/>
16 </eClassifiers>
17</ecore:EPackage>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytreeGen.vsconfig b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytreeGen.vsconfig
new file mode 100644
index 00000000..140523bf
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/inputs/familytreeGen.vsconfig
@@ -0,0 +1,23 @@
1import epackage "inputs/familytree.ecore"
2import viatra "src/queries/familyTreeConstraints.vql"
3
4generate {
5 metamodel = { package familytree }
6 constraints = { package queries}
7 solver = ViatraSolver
8 scope = {
9 #node = 6,
10 #int = {1,2,3,4,5}
11 }
12
13 config = {
14 runtime = 10000,
15 log-level = normal
16 }
17
18 runs = 1
19
20 debug = "outputs/debug"
21 log = "outputs/log.txt"
22 output = "outputs/models"
23} \ No newline at end of file
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated
new file mode 100644
index 00000000..bbaa6a26
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated
@@ -0,0 +1,672 @@
1import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
2import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
3import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
4
5//////////
6// 0. Util
7//////////
8private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
9 PartialInterpretation.problem(interpretation,problem);
10}
11
12/////////////////////////
13// 0.1 Existence
14/////////////////////////
15/** [[exist(element)]]=1 */
16private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17 find interpretation(problem,interpretation);
18 LogicProblem.elements(problem,element);
19} or {
20 find interpretation(problem,interpretation);
21 PartialInterpretation.newElements(interpretation,element);
22}
23
24/** [[exist(element)]]>=1/2 */
25private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26 find mustExist(problem,interpretation,element);
27} or {
28 find interpretation(problem,interpretation);
29 neg find elementCloseWorld(element);
30 PartialInterpretation.openWorldElements(interpretation,element);
31}
32
33private pattern elementCloseWorld(element:DefinedElement) {
34 PartialInterpretation.openWorldElements(i,element);
35 PartialInterpretation.maxNewElements(i,0);
36} or {
37 Scope.targetTypeInterpretation(scope,interpretation);
38 PartialTypeInterpratation.elements(interpretation,element);
39 Scope.maxNewElements(scope,0);
40}
41
42////////////////////////
43// 0.2 Equivalence
44////////////////////////
45pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement)
46// For non-primitive type. Boolean types always must equivalent or cannot equivalent
47{
48 find mayExist(problem,interpretation,a);
49 find mayExist(problem,interpretation,b);
50 a == b;
51} or {
52 find mayExist(problem,interpretation,a);
53 find mayExist(problem,interpretation,b);
54 IntegerElement(a);
55 IntegerElement(b);
56 PrimitiveElement.valueSet(a,false);
57} or {
58 find mayExist(problem,interpretation,a);
59 find mayExist(problem,interpretation,b);
60 IntegerElement(a);
61 IntegerElement(b);
62 PrimitiveElement.valueSet(b,false);
63} or {
64 find mayExist(problem,interpretation,a);
65 find mayExist(problem,interpretation,b);
66 RealElement(a);
67 RealElement(b);
68 PrimitiveElement.valueSet(a,false);
69} or {
70 find mayExist(problem,interpretation,a);
71 find mayExist(problem,interpretation,b);
72 RealElement(a);
73 RealElement(b);
74 PrimitiveElement.valueSet(b,false);
75} or {
76 find mayExist(problem,interpretation,a);
77 find mayExist(problem,interpretation,b);
78 RealElement(a);
79 IntegerElement(b);
80 PrimitiveElement.valueSet(a,false);
81} or {
82 find mayExist(problem,interpretation,a);
83 find mayExist(problem,interpretation,b);
84 RealElement(a);
85 IntegerElement(b);
86 PrimitiveElement.valueSet(b,false);
87} or {
88 find mayExist(problem,interpretation,a);
89 find mayExist(problem,interpretation,b);
90 IntegerElement(a);
91 RealElement(b);
92 PrimitiveElement.valueSet(a,false);
93} or {
94 find mayExist(problem,interpretation,a);
95 find mayExist(problem,interpretation,b);
96 IntegerElement(a);
97 RealElement(b);
98 PrimitiveElement.valueSet(b,false);
99} or {
100 find mayExist(problem,interpretation,a);
101 find mayExist(problem,interpretation,b);
102 StringElement(a);
103 StringElement(b);
104 PrimitiveElement.valueSet(a,false);
105} or {
106 find mayExist(problem,interpretation,a);
107 find mayExist(problem,interpretation,b);
108 StringElement(a);
109 StringElement(b);
110 PrimitiveElement.valueSet(b,false);
111}
112
113pattern mustEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
114// For non-primitive and Boolean primitive type
115 find mustExist(problem,interpretation,a);
116 find mustExist(problem,interpretation,b);
117 a == b;
118} or {
119 find mustExist(problem,interpretation,a);
120 find mustExist(problem,interpretation,b);
121 PrimitiveElement.valueSet(a,true);
122 PrimitiveElement.valueSet(b,true);
123 IntegerElement.value(a,value);
124 IntegerElement.value(b,value);
125} or {
126 find mustExist(problem,interpretation,a);
127 find mustExist(problem,interpretation,b);
128 PrimitiveElement.valueSet(a,true);
129 PrimitiveElement.valueSet(b,true);
130 RealElement.value(a,value);
131 RealElement.value(b,value);
132} or {
133 find mustExist(problem,interpretation,a);
134 find mustExist(problem,interpretation,b);
135 PrimitiveElement.valueSet(a,true);
136 PrimitiveElement.valueSet(b,true);
137 RealElement.value(a,value);
138 IntegerElement.value(b,value);
139} or {
140 find mustExist(problem,interpretation,a);
141 find mustExist(problem,interpretation,b);
142 PrimitiveElement.valueSet(a,true);
143 PrimitiveElement.valueSet(b,true);
144 IntegerElement.value(a,value);
145 RealElement.value(b,value);
146} or {
147 find mustExist(problem,interpretation,a);
148 find mustExist(problem,interpretation,b);
149 PrimitiveElement.valueSet(a,true);
150 PrimitiveElement.valueSet(b,true);
151 StringElement.value(a,value);
152 StringElement.value(b,value);
153}
154
155//////////
156// 1. Problem-Specific Base Indexers
157//////////
158// 1.1 Type Indexers
159//////////
160// 1.1.1 Required Patterns by TypeIndexer
161//////////
162private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
163 find interpretation(problem,interpretation);
164 LogicProblem.types(problem,type);
165 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
166 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
167}
168
169private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
170 find interpretation(problem,interpretation);
171 LogicProblem.types(problem,type);
172 TypeDefinition.elements(type,element);
173} or {
174 find interpretation(problem,interpretation);
175 find typeInterpretation(problem,interpretation,type,typeInterpretation);
176 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
177}
178
179private pattern isPrimitive(element: PrimitiveElement) {
180 PrimitiveElement(element);
181}
182//////////
183// 1.1.2 primitive Type Indexers
184//////////
185// Currently unused. Refer primitive types as:
186// > PrimitiveElement(element)
187// specific types are referred as:
188// > BooleanElement(variableName)
189// > IntegerElement(variableName)
190// > RealElement(variableName)
191// > StringElement(variableName)
192// And their value as
193// > BooleanElement.value(variableName,value)
194// > IntegerElement.value(variableName,value)
195// > RealElement.value(variableName,value)
196// > StringElement.value(variableName,value)
197// Whether a value is set is defined by:
198// > PrimitiveElement.valueSet(variableName,isFilled);
199//////////
200// 1.1.3 domain-specific Type Indexers
201//////////
202/**
203 * An element must be an instance of type "FamilyTree class".
204 */
205private pattern mustInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
206 Type.name(type,"FamilyTree class");
207 find directInstanceOf(problem,interpretation,element,type);
208}
209private pattern scopeDisallowsNewFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation) {
210 find interpretation(problem,interpretation);
211 PartialInterpretation.scopes(interpretation,scope);
212 Scope.targetTypeInterpretation(scope,typeInterpretation);
213 Scope.maxNewElements(scope,0);
214 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
215 Type.name(type,"FamilyTree class");
216}
217
218/**
219 * An element may be an instance of type "FamilyTree class".
220 */
221private pattern mayInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
222{
223 find interpretation(problem,interpretation);
224 PartialInterpretation.newElements(interpretation,element);
225 neg find mustInstanceOfMember_class(problem,interpretation,element);
226 neg find scopeDisallowsNewFamilyTree_class(problem, interpretation);
227 neg find isPrimitive(element);
228} or {
229 find interpretation(problem,interpretation);
230 PartialInterpretation.openWorldElements(interpretation,element);
231 neg find mustInstanceOfMember_class(problem,interpretation,element);
232 neg find scopeDisallowsNewFamilyTree_class(problem, interpretation);
233 neg find isPrimitive(element);
234} or
235{ find mustInstanceOfFamilyTree_class(problem,interpretation,element); }
236/**
237 * An element must be an instance of type "Member class".
238 */
239private pattern mustInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
240 Type.name(type,"Member class");
241 find directInstanceOf(problem,interpretation,element,type);
242}
243private pattern scopeDisallowsNewMember_class(problem:LogicProblem, interpretation:PartialInterpretation) {
244 find interpretation(problem,interpretation);
245 PartialInterpretation.scopes(interpretation,scope);
246 Scope.targetTypeInterpretation(scope,typeInterpretation);
247 Scope.maxNewElements(scope,0);
248 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
249 Type.name(type,"Member class");
250}
251
252/**
253 * An element may be an instance of type "Member class".
254 */
255private pattern mayInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
256{
257 find interpretation(problem,interpretation);
258 PartialInterpretation.newElements(interpretation,element);
259 neg find mustInstanceOfFamilyTree_class(problem,interpretation,element);
260 neg find scopeDisallowsNewMember_class(problem, interpretation);
261 neg find isPrimitive(element);
262} or {
263 find interpretation(problem,interpretation);
264 PartialInterpretation.openWorldElements(interpretation,element);
265 neg find mustInstanceOfFamilyTree_class(problem,interpretation,element);
266 neg find scopeDisallowsNewMember_class(problem, interpretation);
267 neg find isPrimitive(element);
268} or
269{ find mustInstanceOfMember_class(problem,interpretation,element); }
270
271//////////
272// 1.2 Relation Declaration Indexers
273//////////
274/**
275 * Matcher for detecting tuples t where []members reference FamilyTree(source,target)
276 */
277private pattern mustInRelationmembers_reference_FamilyTree(
278 problem:LogicProblem, interpretation:PartialInterpretation,
279 source: DefinedElement, target:DefinedElement)
280{
281 find interpretation(problem,interpretation);
282 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
283 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"members reference FamilyTree");
284 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
285 BinaryElementRelationLink.param1(link,source);
286 BinaryElementRelationLink.param2(link,target);
287}
288/**
289 * Matcher for detecting tuples t where <>members reference FamilyTree(source,target)
290 */
291private pattern mayInRelationmembers_reference_FamilyTree(
292 problem:LogicProblem, interpretation:PartialInterpretation,
293 source: DefinedElement, target:DefinedElement)
294{
295 find interpretation(problem,interpretation);
296 // The two endpoint of the link have to exist
297 find mayExist(problem, interpretation, source);
298 find mayExist(problem, interpretation, target);
299 // Type consistency
300 find mayInstanceOfFamilyTree_class(problem,interpretation,source);
301 find mayInstanceOfMember_class(problem,interpretation,target);
302 // The reference is containment, then a new reference cannot be create if:
303 // 1. Multiple parents
304 neg find mustContains4(problem,interpretation,_,target);
305 // 2. Circle in the containment hierarchy
306 neg find mustTransitiveContains(source,target);
307} or {
308 find mustInRelationmembers_reference_FamilyTree(problem,interpretation,source,target);
309}
310/**
311 * Matcher for detecting tuples t where []children reference Member(source,target)
312 */
313private pattern mustInRelationchildren_reference_Member(
314 problem:LogicProblem, interpretation:PartialInterpretation,
315 source: DefinedElement, target:DefinedElement)
316{
317 find interpretation(problem,interpretation);
318 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
319 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"children reference Member");
320 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
321 BinaryElementRelationLink.param1(link,source);
322 BinaryElementRelationLink.param2(link,target);
323}
324/**
325 * Matcher for detecting tuples t where <>children reference Member(source,target)
326 */
327private pattern mayInRelationchildren_reference_Member(
328 problem:LogicProblem, interpretation:PartialInterpretation,
329 source: DefinedElement, target:DefinedElement)
330{
331 find interpretation(problem,interpretation);
332 // The two endpoint of the link have to exist
333 find mayExist(problem, interpretation, source);
334 find mayExist(problem, interpretation, target);
335 // Type consistency
336 find mayInstanceOfMember_class(problem,interpretation,source);
337 find mayInstanceOfMember_class(problem,interpretation,target);
338 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
339 // the upper bound of the opposite reference multiplicity should be considered.
340 numberOfExistingOppositeReferences == count find mustInRelationparents_reference_Member(problem,interpretation,target,_);
341 check(numberOfExistingOppositeReferences < 2);
342} or {
343 find mustInRelationchildren_reference_Member(problem,interpretation,source,target);
344}
345/**
346 * Matcher for detecting tuples t where []parents reference Member(source,target)
347 */
348private pattern mustInRelationparents_reference_Member(
349 problem:LogicProblem, interpretation:PartialInterpretation,
350 source: DefinedElement, target:DefinedElement)
351{
352 find interpretation(problem,interpretation);
353 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
354 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parents reference Member");
355 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
356 BinaryElementRelationLink.param1(link,source);
357 BinaryElementRelationLink.param2(link,target);
358}
359/**
360 * Matcher for detecting tuples t where <>parents reference Member(source,target)
361 */
362private pattern mayInRelationparents_reference_Member(
363 problem:LogicProblem, interpretation:PartialInterpretation,
364 source: DefinedElement, target:DefinedElement)
365{
366 find interpretation(problem,interpretation);
367 // The two endpoint of the link have to exist
368 find mayExist(problem, interpretation, source);
369 find mayExist(problem, interpretation, target);
370 // Type consistency
371 find mayInstanceOfMember_class(problem,interpretation,source);
372 find mayInstanceOfMember_class(problem,interpretation,target);
373 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
374 // the upper bound of the multiplicity should be considered.
375 numberOfExistingReferences == count find mustInRelationparents_reference_Member(problem,interpretation,source,_);
376 check(numberOfExistingReferences < 2);
377} or {
378 find mustInRelationparents_reference_Member(problem,interpretation,source,target);
379}
380/**
381 * Matcher for detecting tuples t where []name attribute Member(source,target)
382 */
383private pattern mustInRelationname_attribute_Member(
384 problem:LogicProblem, interpretation:PartialInterpretation,
385 source: DefinedElement, target:DefinedElement)
386{
387 find interpretation(problem,interpretation);
388 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
389 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute Member");
390 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
391 BinaryElementRelationLink.param1(link,source);
392 BinaryElementRelationLink.param2(link,target);
393}
394/**
395 * Matcher for detecting tuples t where <>name attribute Member(source,target)
396 */
397private pattern mayInRelationname_attribute_Member(
398 problem:LogicProblem, interpretation:PartialInterpretation,
399 source: DefinedElement, target:DefinedElement)
400{
401 find interpretation(problem,interpretation);
402 // The two endpoint of the link have to exist
403 find mayExist(problem, interpretation, source);
404 find mayExist(problem, interpretation, target);
405 // Type consistency
406 find mayInstanceOfMember_class(problem,interpretation,source);
407 StringElement(target);
408 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
409 // the upper bound of the multiplicity should be considered.
410 numberOfExistingReferences == count find mustInRelationname_attribute_Member(problem,interpretation,source,_);
411 check(numberOfExistingReferences < 1);
412} or {
413 find mustInRelationname_attribute_Member(problem,interpretation,source,target);
414}
415/**
416 * Matcher for detecting tuples t where []age attribute Member(source,target)
417 */
418private pattern mustInRelationage_attribute_Member(
419 problem:LogicProblem, interpretation:PartialInterpretation,
420 source: DefinedElement, target:DefinedElement)
421{
422 find interpretation(problem,interpretation);
423 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
424 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"age attribute Member");
425 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
426 BinaryElementRelationLink.param1(link,source);
427 BinaryElementRelationLink.param2(link,target);
428}
429/**
430 * Matcher for detecting tuples t where <>age attribute Member(source,target)
431 */
432private pattern mayInRelationage_attribute_Member(
433 problem:LogicProblem, interpretation:PartialInterpretation,
434 source: DefinedElement, target:DefinedElement)
435{
436 find interpretation(problem,interpretation);
437 // The two endpoint of the link have to exist
438 find mayExist(problem, interpretation, source);
439 find mayExist(problem, interpretation, target);
440 // Type consistency
441 find mayInstanceOfMember_class(problem,interpretation,source);
442 IntegerElement(target);
443 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
444 // the upper bound of the multiplicity should be considered.
445 numberOfExistingReferences == count find mustInRelationage_attribute_Member(problem,interpretation,source,_);
446 check(numberOfExistingReferences < 1);
447} or {
448 find mustInRelationage_attribute_Member(problem,interpretation,source,target);
449}
450
451//////////
452// 1.3 Relation Definition Indexers
453//////////
454// Must, May and Current queries for pattern queries memberIsItsOwnParent
455private pattern mustInRelation_pattern_queries_memberIsItsOwnParent(
456 problem:LogicProblem, interpretation:PartialInterpretation,
457 var_m)
458{
459 find interpretation(problem,interpretation);
460 find mustInstanceOfMember_class(problem,interpretation,var_m);
461 // m is exported
462 find mustInstanceOfFamilyTree_class(problem,interpretation,var__0);
463 find mustInRelationmembers_reference_FamilyTree(problem,interpretation,var__0,var_virtual0);
464 find mustInstanceOfMember_class(problem,interpretation,var_virtual0);
465 find mustEquivalent(problem, interpretation, var_virtual0, var_m);
466 find mustInstanceOfMember_class(problem,interpretation,var_m);
467 find mustInRelationparents_reference_Member(problem,interpretation,var_m,var_virtual1);
468 find mustInstanceOfMember_class(problem,interpretation,var_virtual1);
469 find mustEquivalent(problem, interpretation, var_virtual1, var_p);
470 find mustEquivalent(problem, interpretation, var_m, var_p);
471}
472private pattern mayInRelation_pattern_queries_memberIsItsOwnParent(
473 problem:LogicProblem, interpretation:PartialInterpretation,
474 var_m)
475{
476 find interpretation(problem,interpretation);
477 find mayInstanceOfMember_class(problem,interpretation,var_m);
478 // m is exported
479 find mayInstanceOfFamilyTree_class(problem,interpretation,var__0);
480 find mayInRelationmembers_reference_FamilyTree(problem,interpretation,var__0,var_virtual0);
481 find mayInstanceOfMember_class(problem,interpretation,var_virtual0);
482 find mayEquivalent(problem, interpretation, var_virtual0, var_m);
483 find mayInstanceOfMember_class(problem,interpretation,var_m);
484 find mayInRelationparents_reference_Member(problem,interpretation,var_m,var_virtual1);
485 find mayInstanceOfMember_class(problem,interpretation,var_virtual1);
486 find mayEquivalent(problem, interpretation, var_virtual1, var_p);
487 find mayEquivalent(problem, interpretation, var_m, var_p);
488}
489private pattern currentInRelation_pattern_queries_memberIsItsOwnParent(
490 problem:LogicProblem, interpretation:PartialInterpretation,
491 var_m)
492{
493 find interpretation(problem,interpretation);
494 find mustInstanceOfMember_class(problem,interpretation,var_m);
495 // m is exported
496 find mustInstanceOfFamilyTree_class(problem,interpretation,var__0);
497 find mustInRelationmembers_reference_FamilyTree(problem,interpretation,var__0,var_virtual0);
498 find mustInstanceOfMember_class(problem,interpretation,var_virtual0);
499 find mustEquivalent(problem, interpretation, var_virtual0, var_m);
500 find mustInstanceOfMember_class(problem,interpretation,var_m);
501 find mustInRelationparents_reference_Member(problem,interpretation,var_m,var_virtual1);
502 find mustInstanceOfMember_class(problem,interpretation,var_virtual1);
503 find mustEquivalent(problem, interpretation, var_virtual1, var_p);
504 find mustEquivalent(problem, interpretation, var_m, var_p);
505}
506
507//////////
508// 1.4 Containment Indexer
509//////////
510private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
511 find mustContains4(_,_,source,target);
512}
513
514private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
515 source: DefinedElement, target: DefinedElement)
516 { find mustInRelationmembers_reference_FamilyTree(problem,interpretation,source,target); }
517
518private pattern mustTransitiveContains(source,target) {
519 find mustContains2+(source,target);
520}
521
522//////////
523// 2. Invalidation Indexers
524//////////
525// 2.1 Invalidated by WF Queries
526//////////
527pattern invalidatedBy_pattern_queries_memberIsItsOwnParent(problem:LogicProblem, interpretation:PartialInterpretation,
528 var_m)
529{
530 find mustInRelation_pattern_queries_memberIsItsOwnParent(problem,interpretation,var_m);
531}
532
533//////////
534// 3. Unfinishedness Indexers
535//////////
536// 3.1 Unfinishedness Measured by Multiplicity
537//////////
538
539//////////
540// 3.2 Unfinishedness Measured by WF Queries
541//////////
542pattern unfinishedBy_pattern_queries_memberIsItsOwnParent(problem:LogicProblem, interpretation:PartialInterpretation,
543 var_m)
544{
545 find currentInRelation_pattern_queries_memberIsItsOwnParent(problem,interpretation,var_m);
546}
547
548//////////
549// 4. Refinement Indexers
550//////////
551// 4.1 Object constructors
552//////////
553private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
554{
555 find interpretation(problem,interpretation);
556 find mustInstanceOfFamilyTree_class(problem,interpretation,root);
557 find mustExist(problem, interpretation, root);
558}or{
559 find interpretation(problem,interpretation);
560 find mustInstanceOfMember_class(problem,interpretation,root);
561 find mustExist(problem, interpretation, root);
562}
563pattern createObject_FamilyTree_class(
564 problem:LogicProblem, interpretation:PartialInterpretation,
565 typeInterpretation:PartialComplexTypeInterpretation)
566{
567 find interpretation(problem,interpretation);
568 neg find hasElementInContainment(problem,interpretation);
569 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
570 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FamilyTree class");
571 find mayInstanceOfFamilyTree_class(problem,interpretation,newObject);
572 find mayExist(problem, interpretation, newObject);
573 neg find mustExist(problem, interpretation, newObject);
574}
575pattern createObject_Member_class_by_members_reference_FamilyTree(
576 problem:LogicProblem, interpretation:PartialInterpretation,
577 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
578 container:DefinedElement)
579{
580 find interpretation(problem,interpretation);
581 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
582 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Member class");
583 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
584 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"members reference FamilyTree");
585 find mustInstanceOfFamilyTree_class(problem,interpretation,container);
586 find mayInstanceOfMember_class(problem,interpretation,newObject);
587 find mayInRelationmembers_reference_FamilyTree(problem,interpretation,container,newObject);
588 find mustExist(problem, interpretation, container);
589 neg find mustExist(problem, interpretation, newObject);
590}
591pattern createObject_Member_class(
592 problem:LogicProblem, interpretation:PartialInterpretation,
593 typeInterpretation:PartialComplexTypeInterpretation)
594{
595 find interpretation(problem,interpretation);
596 neg find hasElementInContainment(problem,interpretation);
597 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
598 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Member class");
599 find mayInstanceOfMember_class(problem,interpretation,newObject);
600 find mayExist(problem, interpretation, newObject);
601 neg find mustExist(problem, interpretation, newObject);
602}
603
604//////////
605// 4.2 Type refinement
606//////////
607pattern refineTypeTo_FamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
608 find interpretation(problem,interpretation);
609 PartialInterpretation.newElements(interpretation,element);
610 find mayInstanceOfFamilyTree_class(problem,interpretation,element);
611 neg find mustInstanceOfFamilyTree_class(problem,interpretation,element);
612 neg find mustInstanceOfMember_class(problem,interpretation,element);
613}
614pattern refineTypeTo_Member_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
615 find interpretation(problem,interpretation);
616 PartialInterpretation.newElements(interpretation,element);
617 find mayInstanceOfMember_class(problem,interpretation,element);
618 neg find mustInstanceOfFamilyTree_class(problem,interpretation,element);
619 neg find mustInstanceOfMember_class(problem,interpretation,element);
620}
621
622//////////
623// 4.3 Relation refinement
624//////////
625pattern refineRelation_children_reference_Member_and_parents_reference_Member(
626 problem:LogicProblem, interpretation:PartialInterpretation,
627 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
628 from: DefinedElement, to: DefinedElement)
629{
630 find interpretation(problem,interpretation);
631 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
632 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"children reference Member");
633 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
634 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"parents reference Member");
635 find mustExist(problem, interpretation, from);
636 find mustExist(problem, interpretation, to);
637 find mustInstanceOfMember_class(problem,interpretation,from);
638 find mustInstanceOfMember_class(problem,interpretation,to);
639 find mayInRelationchildren_reference_Member(problem,interpretation,from,to);
640 neg find mustInRelationchildren_reference_Member(problem,interpretation,from,to);
641}
642pattern refineRelation_name_attribute_Member(
643 problem:LogicProblem, interpretation:PartialInterpretation,
644 relationIterpretation:PartialRelationInterpretation,
645 from: DefinedElement, to: DefinedElement)
646{
647 find interpretation(problem,interpretation);
648 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
649 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute Member");
650 find mustExist(problem, interpretation, from);
651 find mustExist(problem, interpretation, to);
652 find mustInstanceOfMember_class(problem,interpretation,from);
653 StringElement(to);
654 find mayInRelationname_attribute_Member(problem,interpretation,from,to);
655 neg find mustInRelationname_attribute_Member(problem,interpretation,from,to);
656}
657pattern refineRelation_age_attribute_Member(
658 problem:LogicProblem, interpretation:PartialInterpretation,
659 relationIterpretation:PartialRelationInterpretation,
660 from: DefinedElement, to: DefinedElement)
661{
662 find interpretation(problem,interpretation);
663 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
664 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"age attribute Member");
665 find mustExist(problem, interpretation, from);
666 find mustExist(problem, interpretation, to);
667 find mustInstanceOfMember_class(problem,interpretation,from);
668 IntegerElement(to);
669 find mayInRelationage_attribute_Member(problem,interpretation,from,to);
670 neg find mustInRelationage_attribute_Member(problem,interpretation,from,to);
671}
672
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generation.logicproblem b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generation.logicproblem
new file mode 100644
index 00000000..dd3b15b1
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generation.logicproblem
@@ -0,0 +1,190 @@
1<?xml version="1.0" encoding="ASCII"?>
2<language:LogicProblem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore2logicannotations="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language/ecore2logicannotation" xmlns:language="http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" xmlns:language_1="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" xmlns:viatra2logicannotations="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language/viatra2logicannotation">
3 <types xsi:type="language_1:TypeDeclaration" name="FamilyTree class"/>
4 <types xsi:type="language_1:TypeDeclaration" name="Member class"/>
5 <assertions name="upperMultiplicity parents Member" annotations="//@annotations.0">
6 <value xsi:type="language_1:Forall">
7 <quantifiedVariables name="src">
8 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
9 </quantifiedVariables>
10 <quantifiedVariables name="trg 1">
11 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
12 </quantifiedVariables>
13 <quantifiedVariables name="trg 2">
14 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
15 </quantifiedVariables>
16 <quantifiedVariables name="trg 3">
17 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
18 </quantifiedVariables>
19 <expression xsi:type="language_1:Impl">
20 <leftOperand xsi:type="language_1:And">
21 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
22 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.0"/>
23 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.1"/>
24 </operands>
25 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
26 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.0"/>
27 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.2"/>
28 </operands>
29 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
30 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.0"/>
31 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.3"/>
32 </operands>
33 </leftOperand>
34 <rightOperand xsi:type="language_1:Not">
35 <operand xsi:type="language_1:Distinct">
36 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.1"/>
37 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.2"/>
38 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.3"/>
39 </operand>
40 </rightOperand>
41 </expression>
42 </value>
43 </assertions>
44 <assertions name="oppositeReference children Member" annotations="//@annotations.1">
45 <value xsi:type="language_1:Forall">
46 <quantifiedVariables name="src">
47 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
48 </quantifiedVariables>
49 <quantifiedVariables name="trg">
50 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
51 </quantifiedVariables>
52 <expression xsi:type="language_1:Iff">
53 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.1">
54 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/>
55 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.1"/>
56 </leftOperand>
57 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
58 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.1"/>
59 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/>
60 </rightOperand>
61 </expression>
62 </value>
63 </assertions>
64 <assertions name="upperMultiplicity name Member" annotations="//@annotations.2">
65 <value xsi:type="language_1:Forall">
66 <quantifiedVariables name="src">
67 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
68 </quantifiedVariables>
69 <quantifiedVariables name="trg 1">
70 <range xsi:type="language_1:StringTypeReference"/>
71 </quantifiedVariables>
72 <quantifiedVariables name="trg 2">
73 <range xsi:type="language_1:StringTypeReference"/>
74 </quantifiedVariables>
75 <expression xsi:type="language_1:Impl">
76 <leftOperand xsi:type="language_1:And">
77 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3">
78 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/>
79 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.1"/>
80 </operands>
81 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3">
82 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/>
83 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.2"/>
84 </operands>
85 </leftOperand>
86 <rightOperand xsi:type="language_1:Not">
87 <operand xsi:type="language_1:Distinct">
88 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.1"/>
89 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.2"/>
90 </operand>
91 </rightOperand>
92 </expression>
93 </value>
94 </assertions>
95 <assertions name="upperMultiplicity age Member" annotations="//@annotations.3">
96 <value xsi:type="language_1:Forall">
97 <quantifiedVariables name="src">
98 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
99 </quantifiedVariables>
100 <quantifiedVariables name="trg 1">
101 <range xsi:type="language_1:IntTypeReference"/>
102 </quantifiedVariables>
103 <quantifiedVariables name="trg 2">
104 <range xsi:type="language_1:IntTypeReference"/>
105 </quantifiedVariables>
106 <expression xsi:type="language_1:Impl">
107 <leftOperand xsi:type="language_1:And">
108 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4">
109 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/>
110 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.1"/>
111 </operands>
112 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4">
113 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/>
114 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.2"/>
115 </operands>
116 </leftOperand>
117 <rightOperand xsi:type="language_1:Not">
118 <operand xsi:type="language_1:Distinct">
119 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.1"/>
120 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.2"/>
121 </operand>
122 </rightOperand>
123 </expression>
124 </value>
125 </assertions>
126 <assertions name="errorpattern queries memberIsItsOwnParent" annotations="//@annotations.5">
127 <value xsi:type="language_1:Forall">
128 <quantifiedVariables name="p0">
129 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
130 </quantifiedVariables>
131 <expression xsi:type="language_1:Not">
132 <operand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.5">
133 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/>
134 </operand>
135 </expression>
136 </value>
137 </assertions>
138 <relations xsi:type="language_1:RelationDeclaration" name="members reference FamilyTree">
139 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
140 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
141 </relations>
142 <relations xsi:type="language_1:RelationDeclaration" name="children reference Member">
143 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
144 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
145 </relations>
146 <relations xsi:type="language_1:RelationDeclaration" name="parents reference Member">
147 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
148 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
149 </relations>
150 <relations xsi:type="language_1:RelationDeclaration" name="name attribute Member">
151 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
152 <parameters xsi:type="language_1:StringTypeReference"/>
153 </relations>
154 <relations xsi:type="language_1:RelationDeclaration" name="age attribute Member">
155 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
156 <parameters xsi:type="language_1:IntTypeReference"/>
157 </relations>
158 <relations xsi:type="language_1:RelationDefinition" name="pattern queries memberIsItsOwnParent" annotations="//@annotations.4">
159 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
160 <variables name="parameter m">
161 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
162 </variables>
163 <value xsi:type="language_1:Or">
164 <operands xsi:type="language_1:Exists">
165 <quantifiedVariables name="variable 0">
166 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
167 </quantifiedVariables>
168 <expression xsi:type="language_1:And">
169 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
170 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.5/@value/@operands.0/@quantifiedVariables.0"/>
171 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.5/@variables.0"/>
172 </operands>
173 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
174 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.5/@variables.0"/>
175 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.5/@variables.0"/>
176 </operands>
177 </expression>
178 </operands>
179 </value>
180 </relations>
181 <containmentHierarchies typesOrderedInHierarchy="//@types.0 //@types.1" containmentRelations="//@relations.0"/>
182 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.0" relation="//@relations.2" upper="2"/>
183 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.1" inverseA="//@relations.1" inverseB="//@relations.2"/>
184 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.2" relation="//@relations.3" upper="1"/>
185 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.3" relation="//@relations.4" upper="1"/>
186 <annotations xsi:type="viatra2logicannotations:TransfomedViatraQuery" target="//@relations.5" patternFullyQualifiedName="queries.memberIsItsOwnParent">
187 <variableTrace targetLogicVariable="//@relations.5/@value/@operands.0/@quantifiedVariables.0"/>
188 </annotations>
189 <annotations xsi:type="viatra2logicannotations:TransformedViatraWellformednessConstraint" target="//@assertions.4" query="//@annotations.4"/>
190</language:LogicProblem>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/init.partialmodel b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/init.partialmodel
new file mode 100644
index 00000000..949d6b64
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/init.partialmodel
@@ -0,0 +1,51 @@
1<?xml version="1.0" encoding="ASCII"?>
2<partialinterpretation:PartialInterpretation xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:language="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" xmlns:partialinterpretation="http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" minNewElements="6" maxNewElements="6">
3 <problem href="outputs/debug/generation.logicproblem#/"/>
4 <partialrelationinterpretation>
5 <interpretationOf href="outputs/debug/generation.logicproblem#//@relations.0"/>
6 <param1 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.0/@parameters.0"/>
7 <param2 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.0/@parameters.1"/>
8 </partialrelationinterpretation>
9 <partialrelationinterpretation>
10 <interpretationOf href="outputs/debug/generation.logicproblem#//@relations.1"/>
11 <param1 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.1/@parameters.0"/>
12 <param2 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.1/@parameters.1"/>
13 </partialrelationinterpretation>
14 <partialrelationinterpretation>
15 <interpretationOf href="outputs/debug/generation.logicproblem#//@relations.2"/>
16 <param1 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.2/@parameters.0"/>
17 <param2 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.2/@parameters.1"/>
18 </partialrelationinterpretation>
19 <partialrelationinterpretation>
20 <interpretationOf href="outputs/debug/generation.logicproblem#//@relations.3"/>
21 <param1 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.3/@parameters.0"/>
22 <param2 xsi:type="language:StringTypeReference" href="outputs/debug/generation.logicproblem#//@relations.3/@parameters.1"/>
23 </partialrelationinterpretation>
24 <partialrelationinterpretation>
25 <interpretationOf href="outputs/debug/generation.logicproblem#//@relations.4"/>
26 <param1 xsi:type="language:ComplexTypeReference" href="outputs/debug/generation.logicproblem#//@relations.4/@parameters.0"/>
27 <param2 xsi:type="language:IntTypeReference" href="outputs/debug/generation.logicproblem#//@relations.4/@parameters.1"/>
28 </partialrelationinterpretation>
29 <newElements xsi:type="partialinterpretation:BooleanElement" name="true" valueSet="true" value="true"/>
30 <newElements xsi:type="partialinterpretation:BooleanElement" name="false" valueSet="true"/>
31 <newElements xsi:type="partialinterpretation:IntegerElement" name="1" valueSet="true" value="1"/>
32 <newElements xsi:type="partialinterpretation:IntegerElement" name="2" valueSet="true" value="2"/>
33 <newElements xsi:type="partialinterpretation:IntegerElement" name="3" valueSet="true" value="3"/>
34 <newElements xsi:type="partialinterpretation:IntegerElement" name="4" valueSet="true" value="4"/>
35 <newElements xsi:type="partialinterpretation:IntegerElement" name="5" valueSet="true" value="5"/>
36 <partialtypeinterpratation xsi:type="partialinterpretation:PartialBooleanInterpretation" elements="//@newElements.0 //@newElements.1"/>
37 <partialtypeinterpratation xsi:type="partialinterpretation:PartialIntegerInterpretation" elements="//@newElements.2 //@newElements.3 //@newElements.4 //@newElements.5 //@newElements.6"/>
38 <partialtypeinterpratation xsi:type="partialinterpretation:PartialRealInterpretation" elements="//@openWorldElements.0"/>
39 <partialtypeinterpratation xsi:type="partialinterpretation:PartialStringInterpretation" elements="//@openWorldElements.1"/>
40 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.0">
41 <interpretationOf href="outputs/debug/generation.logicproblem#//@types.0"/>
42 </partialtypeinterpratation>
43 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.1">
44 <interpretationOf href="outputs/debug/generation.logicproblem#//@types.1"/>
45 </partialtypeinterpratation>
46 <openWorldElements xsi:type="partialinterpretation:RealElement" name="New Reals"/>
47 <openWorldElements xsi:type="partialinterpretation:StringElement" name="New Strings"/>
48 <openWorldElements name="New Objects"/>
49 <scopes targetTypeInterpretation="//@partialtypeinterpratation.4"/>
50 <scopes targetTypeInterpretation="//@partialtypeinterpratation.5"/>
51</partialinterpretation:PartialInterpretation>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt
new file mode 100644
index 00000000..6186ec60
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt
@@ -0,0 +1 @@
Model generation finished
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml
new file mode 100644
index 00000000..0182add9
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml
@@ -0,0 +1,1011 @@
1graph
2[
3 node
4 [
5 id 0
6 graphics
7 [
8 w 41.800000000000004
9 h 26
10 type "rectangle"
11 fill "#FFFFFF"
12 fill2 "#FFFFFF"
13 outline "#000000"
14 ]
15 LabelGraphics
16 [
17 text "true"
18 outline "#000000"
19 fill "#FFFFFF"
20 fontSize 16
21 fontName "Monospace"
22 autoSizePolicy "node_width"
23 anchor "t"
24 borderDistance 0.0
25 ]
26 LabelGraphics
27 [
28 text "
29 "
30 fontSize 14
31 fontName "Consolas"
32 alignment "left"
33 anchor "tl"
34 borderDistance 6
35 ]
36 ]
37
38 node
39 [
40 id 1
41 graphics
42 [
43 w 50.6
44 h 26
45 type "rectangle"
46 fill "#FFFFFF"
47 fill2 "#FFFFFF"
48 outline "#000000"
49 ]
50 LabelGraphics
51 [
52 text "false"
53 outline "#000000"
54 fill "#FFFFFF"
55 fontSize 16
56 fontName "Monospace"
57 autoSizePolicy "node_width"
58 anchor "t"
59 borderDistance 0.0
60 ]
61 LabelGraphics
62 [
63 text "
64 "
65 fontSize 14
66 fontName "Consolas"
67 alignment "left"
68 anchor "tl"
69 borderDistance 6
70 ]
71 ]
72
73 node
74 [
75 id 2
76 graphics
77 [
78 w 15.400000000000002
79 h 26
80 type "rectangle"
81 fill "#FFFFFF"
82 fill2 "#FFFFFF"
83 outline "#000000"
84 ]
85 LabelGraphics
86 [
87 text "1"
88 outline "#000000"
89 fill "#FFFFFF"
90 fontSize 16
91 fontName "Monospace"
92 autoSizePolicy "node_width"
93 anchor "t"
94 borderDistance 0.0
95 ]
96 LabelGraphics
97 [
98 text "
99 "
100 fontSize 14
101 fontName "Consolas"
102 alignment "left"
103 anchor "tl"
104 borderDistance 6
105 ]
106 ]
107
108 node
109 [
110 id 3
111 graphics
112 [
113 w 15.400000000000002
114 h 26
115 type "rectangle"
116 fill "#FFFFFF"
117 fill2 "#FFFFFF"
118 outline "#000000"
119 ]
120 LabelGraphics
121 [
122 text "2"
123 outline "#000000"
124 fill "#FFFFFF"
125 fontSize 16
126 fontName "Monospace"
127 autoSizePolicy "node_width"
128 anchor "t"
129 borderDistance 0.0
130 ]
131 LabelGraphics
132 [
133 text "
134 "
135 fontSize 14
136 fontName "Consolas"
137 alignment "left"
138 anchor "tl"
139 borderDistance 6
140 ]
141 ]
142
143 node
144 [
145 id 4
146 graphics
147 [
148 w 15.400000000000002
149 h 26
150 type "rectangle"
151 fill "#FFFFFF"
152 fill2 "#FFFFFF"
153 outline "#000000"
154 ]
155 LabelGraphics
156 [
157 text "3"
158 outline "#000000"
159 fill "#FFFFFF"
160 fontSize 16
161 fontName "Monospace"
162 autoSizePolicy "node_width"
163 anchor "t"
164 borderDistance 0.0
165 ]
166 LabelGraphics
167 [
168 text "
169 "
170 fontSize 14
171 fontName "Consolas"
172 alignment "left"
173 anchor "tl"
174 borderDistance 6
175 ]
176 ]
177
178 node
179 [
180 id 5
181 graphics
182 [
183 w 15.400000000000002
184 h 26
185 type "rectangle"
186 fill "#FFFFFF"
187 fill2 "#FFFFFF"
188 outline "#000000"
189 ]
190 LabelGraphics
191 [
192 text "4"
193 outline "#000000"
194 fill "#FFFFFF"
195 fontSize 16
196 fontName "Monospace"
197 autoSizePolicy "node_width"
198 anchor "t"
199 borderDistance 0.0
200 ]
201 LabelGraphics
202 [
203 text "
204 "
205 fontSize 14
206 fontName "Consolas"
207 alignment "left"
208 anchor "tl"
209 borderDistance 6
210 ]
211 ]
212
213 node
214 [
215 id 6
216 graphics
217 [
218 w 15.400000000000002
219 h 26
220 type "rectangle"
221 fill "#FFFFFF"
222 fill2 "#FFFFFF"
223 outline "#000000"
224 ]
225 LabelGraphics
226 [
227 text "5"
228 outline "#000000"
229 fill "#FFFFFF"
230 fontSize 16
231 fontName "Monospace"
232 autoSizePolicy "node_width"
233 anchor "t"
234 borderDistance 0.0
235 ]
236 LabelGraphics
237 [
238 text "
239 "
240 fontSize 14
241 fontName "Consolas"
242 alignment "left"
243 anchor "tl"
244 borderDistance 6
245 ]
246 ]
247
248 node
249 [
250 id 7
251 graphics
252 [
253 w 138.60000000000002
254 h 40
255 type "rectangle"
256 fill "#FFFFFF"
257 fill2 "#FFFFFF"
258 outline "#000000"
259 ]
260 LabelGraphics
261 [
262 text "null"
263 outline "#000000"
264 fill "#FFFFFF"
265 fontSize 16
266 fontName "Monospace"
267 autoSizePolicy "node_width"
268 anchor "t"
269 borderDistance 0.0
270 ]
271 LabelGraphics
272 [
273 text "
274 FamilyTree class
275 "
276 fontSize 14
277 fontName "Consolas"
278 alignment "left"
279 anchor "tl"
280 borderDistance 6
281 ]
282 ]
283
284 node
285 [
286 id 8
287 graphics
288 [
289 w 107.80000000000001
290 h 40
291 type "rectangle"
292 fill "#FFFFFF"
293 fill2 "#FFFFFF"
294 outline "#000000"
295 ]
296 LabelGraphics
297 [
298 text "null"
299 outline "#000000"
300 fill "#FFFFFF"
301 fontSize 16
302 fontName "Monospace"
303 autoSizePolicy "node_width"
304 anchor "t"
305 borderDistance 0.0
306 ]
307 LabelGraphics
308 [
309 text "
310 Member class
311 "
312 fontSize 14
313 fontName "Consolas"
314 alignment "left"
315 anchor "tl"
316 borderDistance 6
317 ]
318 ]
319
320 node
321 [
322 id 9
323 graphics
324 [
325 w 107.80000000000001
326 h 40
327 type "rectangle"
328 fill "#FFFFFF"
329 fill2 "#FFFFFF"
330 outline "#000000"
331 ]
332 LabelGraphics
333 [
334 text "null"
335 outline "#000000"
336 fill "#FFFFFF"
337 fontSize 16
338 fontName "Monospace"
339 autoSizePolicy "node_width"
340 anchor "t"
341 borderDistance 0.0
342 ]
343 LabelGraphics
344 [
345 text "
346 Member class
347 "
348 fontSize 14
349 fontName "Consolas"
350 alignment "left"
351 anchor "tl"
352 borderDistance 6
353 ]
354 ]
355
356 node
357 [
358 id 10
359 graphics
360 [
361 w 107.80000000000001
362 h 40
363 type "rectangle"
364 fill "#FFFFFF"
365 fill2 "#FFFFFF"
366 outline "#000000"
367 ]
368 LabelGraphics
369 [
370 text "null"
371 outline "#000000"
372 fill "#FFFFFF"
373 fontSize 16
374 fontName "Monospace"
375 autoSizePolicy "node_width"
376 anchor "t"
377 borderDistance 0.0
378 ]
379 LabelGraphics
380 [
381 text "
382 Member class
383 "
384 fontSize 14
385 fontName "Consolas"
386 alignment "left"
387 anchor "tl"
388 borderDistance 6
389 ]
390 ]
391
392 node
393 [
394 id 11
395 graphics
396 [
397 w 107.80000000000001
398 h 40
399 type "rectangle"
400 fill "#FFFFFF"
401 fill2 "#FFFFFF"
402 outline "#000000"
403 ]
404 LabelGraphics
405 [
406 text "null"
407 outline "#000000"
408 fill "#FFFFFF"
409 fontSize 16
410 fontName "Monospace"
411 autoSizePolicy "node_width"
412 anchor "t"
413 borderDistance 0.0
414 ]
415 LabelGraphics
416 [
417 text "
418 Member class
419 "
420 fontSize 14
421 fontName "Consolas"
422 alignment "left"
423 anchor "tl"
424 borderDistance 6
425 ]
426 ]
427
428 node
429 [
430 id 12
431 graphics
432 [
433 w 107.80000000000001
434 h 40
435 type "rectangle"
436 fill "#FFFFFF"
437 fill2 "#FFFFFF"
438 outline "#000000"
439 ]
440 LabelGraphics
441 [
442 text "null"
443 outline "#000000"
444 fill "#FFFFFF"
445 fontSize 16
446 fontName "Monospace"
447 autoSizePolicy "node_width"
448 anchor "t"
449 borderDistance 0.0
450 ]
451 LabelGraphics
452 [
453 text "
454 Member class
455 "
456 fontSize 14
457 fontName "Consolas"
458 alignment "left"
459 anchor "tl"
460 borderDistance 6
461 ]
462 ]
463
464 node
465 [
466 id 13
467 graphics
468 [
469 w 85.80000000000001
470 h 26
471 type "rectangle"
472 fill "#FFFFFF"
473 fill2 "#FFFFFF"
474 outline "#000000"
475 ]
476 LabelGraphics
477 [
478 text "New Reals"
479 outline "#000000"
480 fill "#FFFFFF"
481 fontSize 16
482 fontName "Monospace"
483 autoSizePolicy "node_width"
484 anchor "t"
485 borderDistance 0.0
486 ]
487 LabelGraphics
488 [
489 text "
490 "
491 fontSize 14
492 fontName "Consolas"
493 alignment "left"
494 anchor "tl"
495 borderDistance 6
496 ]
497 ]
498
499 node
500 [
501 id 14
502 graphics
503 [
504 w 103.4
505 h 26
506 type "rectangle"
507 fill "#FFFFFF"
508 fill2 "#FFFFFF"
509 outline "#000000"
510 ]
511 LabelGraphics
512 [
513 text "New Strings"
514 outline "#000000"
515 fill "#FFFFFF"
516 fontSize 16
517 fontName "Monospace"
518 autoSizePolicy "node_width"
519 anchor "t"
520 borderDistance 0.0
521 ]
522 LabelGraphics
523 [
524 text "
525 "
526 fontSize 14
527 fontName "Consolas"
528 alignment "left"
529 anchor "tl"
530 borderDistance 6
531 ]
532 ]
533
534 node
535 [
536 id 15
537 graphics
538 [
539 w 103.4
540 h 26
541 type "rectangle"
542 fill "#FFFFFF"
543 fill2 "#FFFFFF"
544 outline "#000000"
545 ]
546 LabelGraphics
547 [
548 text "New Objects"
549 outline "#000000"
550 fill "#FFFFFF"
551 fontSize 16
552 fontName "Monospace"
553 autoSizePolicy "node_width"
554 anchor "t"
555 borderDistance 0.0
556 ]
557 LabelGraphics
558 [
559 text "
560 "
561 fontSize 14
562 fontName "Consolas"
563 alignment "left"
564 anchor "tl"
565 borderDistance 6
566 ]
567 ]
568 edge
569 [
570 source 7
571 target 8
572 graphics
573 [
574 fill "#000000"
575 width 3
576 targetArrow "standard"
577 ]
578 LabelGraphics
579 [
580 text "members reference FamilyTree"
581 fontSize 14
582 fontName "Consolas"
583 configuration "AutoFlippingLabel"
584 model "six_pos"
585 position "thead"
586 ]
587 ]
588 edge
589 [
590 source 7
591 target 9
592 graphics
593 [
594 fill "#000000"
595 width 3
596 targetArrow "standard"
597 ]
598 LabelGraphics
599 [
600 text "members reference FamilyTree"
601 fontSize 14
602 fontName "Consolas"
603 configuration "AutoFlippingLabel"
604 model "six_pos"
605 position "thead"
606 ]
607 ]
608 edge
609 [
610 source 7
611 target 10
612 graphics
613 [
614 fill "#000000"
615 width 3
616 targetArrow "standard"
617 ]
618 LabelGraphics
619 [
620 text "members reference FamilyTree"
621 fontSize 14
622 fontName "Consolas"
623 configuration "AutoFlippingLabel"
624 model "six_pos"
625 position "thead"
626 ]
627 ]
628 edge
629 [
630 source 7
631 target 11
632 graphics
633 [
634 fill "#000000"
635 width 3
636 targetArrow "standard"
637 ]
638 LabelGraphics
639 [
640 text "members reference FamilyTree"
641 fontSize 14
642 fontName "Consolas"
643 configuration "AutoFlippingLabel"
644 model "six_pos"
645 position "thead"
646 ]
647 ]
648 edge
649 [
650 source 7
651 target 12
652 graphics
653 [
654 fill "#000000"
655 width 3
656 targetArrow "standard"
657 ]
658 LabelGraphics
659 [
660 text "members reference FamilyTree"
661 fontSize 14
662 fontName "Consolas"
663 configuration "AutoFlippingLabel"
664 model "six_pos"
665 position "thead"
666 ]
667 ]
668 edge
669 [
670 source 9
671 target 8
672 graphics
673 [
674 fill "#000000"
675 targetArrow "standard"
676 ]
677 LabelGraphics
678 [
679 text "children reference Member"
680 fontSize 14
681 fontName "Consolas"
682 configuration "AutoFlippingLabel"
683 model "six_pos"
684 position "thead"
685 ]
686 ]
687 edge
688 [
689 source 8
690 target 9
691 graphics
692 [
693 fill "#000000"
694 targetArrow "standard"
695 ]
696 LabelGraphics
697 [
698 text "children reference Member"
699 fontSize 14
700 fontName "Consolas"
701 configuration "AutoFlippingLabel"
702 model "six_pos"
703 position "thead"
704 ]
705 ]
706 edge
707 [
708 source 10
709 target 11
710 graphics
711 [
712 fill "#000000"
713 targetArrow "standard"
714 ]
715 LabelGraphics
716 [
717 text "children reference Member"
718 fontSize 14
719 fontName "Consolas"
720 configuration "AutoFlippingLabel"
721 model "six_pos"
722 position "thead"
723 ]
724 ]
725 edge
726 [
727 source 8
728 target 10
729 graphics
730 [
731 fill "#000000"
732 targetArrow "standard"
733 ]
734 LabelGraphics
735 [
736 text "children reference Member"
737 fontSize 14
738 fontName "Consolas"
739 configuration "AutoFlippingLabel"
740 model "six_pos"
741 position "thead"
742 ]
743 ]
744 edge
745 [
746 source 11
747 target 9
748 graphics
749 [
750 fill "#000000"
751 targetArrow "standard"
752 ]
753 LabelGraphics
754 [
755 text "children reference Member"
756 fontSize 14
757 fontName "Consolas"
758 configuration "AutoFlippingLabel"
759 model "six_pos"
760 position "thead"
761 ]
762 ]
763 edge
764 [
765 source 11
766 target 10
767 graphics
768 [
769 fill "#000000"
770 targetArrow "standard"
771 ]
772 LabelGraphics
773 [
774 text "children reference Member"
775 fontSize 14
776 fontName "Consolas"
777 configuration "AutoFlippingLabel"
778 model "six_pos"
779 position "thead"
780 ]
781 ]
782 edge
783 [
784 source 10
785 target 8
786 graphics
787 [
788 fill "#000000"
789 targetArrow "standard"
790 ]
791 LabelGraphics
792 [
793 text "children reference Member"
794 fontSize 14
795 fontName "Consolas"
796 configuration "AutoFlippingLabel"
797 model "six_pos"
798 position "thead"
799 ]
800 ]
801 edge
802 [
803 source 8
804 target 9
805 graphics
806 [
807 fill "#000000"
808 targetArrow "standard"
809 ]
810 LabelGraphics
811 [
812 text "parents reference Member"
813 fontSize 14
814 fontName "Consolas"
815 configuration "AutoFlippingLabel"
816 model "six_pos"
817 position "thead"
818 ]
819 ]
820 edge
821 [
822 source 9
823 target 8
824 graphics
825 [
826 fill "#000000"
827 targetArrow "standard"
828 ]
829 LabelGraphics
830 [
831 text "parents reference Member"
832 fontSize 14
833 fontName "Consolas"
834 configuration "AutoFlippingLabel"
835 model "six_pos"
836 position "thead"
837 ]
838 ]
839 edge
840 [
841 source 11
842 target 10
843 graphics
844 [
845 fill "#000000"
846 targetArrow "standard"
847 ]
848 LabelGraphics
849 [
850 text "parents reference Member"
851 fontSize 14
852 fontName "Consolas"
853 configuration "AutoFlippingLabel"
854 model "six_pos"
855 position "thead"
856 ]
857 ]
858 edge
859 [
860 source 10
861 target 8
862 graphics
863 [
864 fill "#000000"
865 targetArrow "standard"
866 ]
867 LabelGraphics
868 [
869 text "parents reference Member"
870 fontSize 14
871 fontName "Consolas"
872 configuration "AutoFlippingLabel"
873 model "six_pos"
874 position "thead"
875 ]
876 ]
877 edge
878 [
879 source 9
880 target 11
881 graphics
882 [
883 fill "#000000"
884 targetArrow "standard"
885 ]
886 LabelGraphics
887 [
888 text "parents reference Member"
889 fontSize 14
890 fontName "Consolas"
891 configuration "AutoFlippingLabel"
892 model "six_pos"
893 position "thead"
894 ]
895 ]
896 edge
897 [
898 source 10
899 target 11
900 graphics
901 [
902 fill "#000000"
903 targetArrow "standard"
904 ]
905 LabelGraphics
906 [
907 text "parents reference Member"
908 fontSize 14
909 fontName "Consolas"
910 configuration "AutoFlippingLabel"
911 model "six_pos"
912 position "thead"
913 ]
914 ]
915 edge
916 [
917 source 8
918 target 10
919 graphics
920 [
921 fill "#000000"
922 targetArrow "standard"
923 ]
924 LabelGraphics
925 [
926 text "parents reference Member"
927 fontSize 14
928 fontName "Consolas"
929 configuration "AutoFlippingLabel"
930 model "six_pos"
931 position "thead"
932 ]
933 ]
934 edge
935 [
936 source 8
937 target 6
938 graphics
939 [
940 fill "#000000"
941 targetArrow "standard"
942 ]
943 LabelGraphics
944 [
945 text "age attribute Member"
946 fontSize 14
947 fontName "Consolas"
948 configuration "AutoFlippingLabel"
949 model "six_pos"
950 position "thead"
951 ]
952 ]
953 edge
954 [
955 source 9
956 target 5
957 graphics
958 [
959 fill "#000000"
960 targetArrow "standard"
961 ]
962 LabelGraphics
963 [
964 text "age attribute Member"
965 fontSize 14
966 fontName "Consolas"
967 configuration "AutoFlippingLabel"
968 model "six_pos"
969 position "thead"
970 ]
971 ]
972 edge
973 [
974 source 10
975 target 2
976 graphics
977 [
978 fill "#000000"
979 targetArrow "standard"
980 ]
981 LabelGraphics
982 [
983 text "age attribute Member"
984 fontSize 14
985 fontName "Consolas"
986 configuration "AutoFlippingLabel"
987 model "six_pos"
988 position "thead"
989 ]
990 ]
991 edge
992 [
993 source 11
994 target 4
995 graphics
996 [
997 fill "#000000"
998 targetArrow "standard"
999 ]
1000 LabelGraphics
1001 [
1002 text "age attribute Member"
1003 fontSize 14
1004 fontName "Consolas"
1005 configuration "AutoFlippingLabel"
1006 model "six_pos"
1007 position "thead"
1008 ]
1009 ]
1010]
1011
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png
new file mode 100644
index 00000000..391d902b
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi
new file mode 100644
index 00000000..11e0e7c3
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="ASCII"?>
2<familytree:FamilyTree xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:familytree="http://www.example.org/familytree" xsi:schemaLocation="http://www.example.org/familytree inputs/familytree.ecore">
3 <members age="4" children="//@members.4" parents="//@members.3 //@members.4"/>
4 <members/>
5 <members age="1" children="//@members.3 //@members.4" parents="//@members.3 //@members.4"/>
6 <members age="3" children="//@members.0 //@members.2" parents="//@members.2"/>
7 <members age="5" children="//@members.0 //@members.2" parents="//@members.0 //@members.2"/>
8</familytree:FamilyTree>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/plugin.xml b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/plugin.xml
new file mode 100644
index 00000000..b32b0215
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/plugin.xml
@@ -0,0 +1,7 @@
1<?xml version="1.0" encoding="UTF-8"?><plugin>
2 <extension id="queries.FamilyTreeConstraints" point="org.eclipse.viatra.query.runtime.queryspecification">
3 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:queries.FamilyTreeConstraints" id="queries.FamilyTreeConstraints">
4 <query-specification fqn="queries.memberIsItsOwnParent"/>
5 </group>
6 </extension>
7</plugin>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.FamilyTreeConstraints.java._trace b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.FamilyTreeConstraints.java._trace
new file mode 100644
index 00000000..80158bd8
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.FamilyTreeConstraints.java._trace
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.MemberIsItsOwnParent.java._trace b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.MemberIsItsOwnParent.java._trace
new file mode 100644
index 00000000..1b0dca98
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/.MemberIsItsOwnParent.java._trace
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/FamilyTreeConstraints.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/FamilyTreeConstraints.java
new file mode 100644
index 00000000..a5c375c6
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/FamilyTreeConstraints.java
@@ -0,0 +1,53 @@
1/**
2 * Generated from platform:/resource/case.study.familyTree.run/src/queries/familyTreeConstraints.vql
3 */
4package queries;
5
6import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
7import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup;
8import queries.MemberIsItsOwnParent;
9
10/**
11 * A pattern group formed of all public patterns defined in familyTreeConstraints.vql.
12 *
13 * <p>Use the static instance as any {@link interface org.eclipse.viatra.query.runtime.api.IQueryGroup}, to conveniently prepare
14 * a VIATRA Query engine for matching all patterns originally defined in file familyTreeConstraints.vql,
15 * in order to achieve better performance than one-by-one on-demand matcher initialization.
16 *
17 * <p> From package queries, the group contains the definition of the following patterns: <ul>
18 * <li>memberIsItsOwnParent</li>
19 * </ul>
20 *
21 * @see IQueryGroup
22 *
23 */
24@SuppressWarnings("all")
25public final class FamilyTreeConstraints extends BaseGeneratedPatternGroup {
26 /**
27 * Access the pattern group.
28 *
29 * @return the singleton instance of the group
30 * @throws ViatraQueryRuntimeException if there was an error loading the generated code of pattern specifications
31 *
32 */
33 public static FamilyTreeConstraints instance() {
34 if (INSTANCE == null) {
35 INSTANCE = new FamilyTreeConstraints();
36 }
37 return INSTANCE;
38 }
39
40 private static FamilyTreeConstraints INSTANCE;
41
42 private FamilyTreeConstraints() {
43 querySpecifications.add(MemberIsItsOwnParent.instance());
44 }
45
46 public MemberIsItsOwnParent getMemberIsItsOwnParent() {
47 return MemberIsItsOwnParent.instance();
48 }
49
50 public MemberIsItsOwnParent.Matcher getMemberIsItsOwnParent(final ViatraQueryEngine engine) {
51 return MemberIsItsOwnParent.Matcher.on(engine);
52 }
53}
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/MemberIsItsOwnParent.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/MemberIsItsOwnParent.java
new file mode 100644
index 00000000..67cdafb5
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src-gen/queries/MemberIsItsOwnParent.java
@@ -0,0 +1,577 @@
1/**
2 * Generated from platform:/resource/case.study.familyTree.run/src/queries/familyTreeConstraints.vql
3 */
4package queries;
5
6import familytree.Member;
7import java.util.Arrays;
8import java.util.Collection;
9import java.util.LinkedHashSet;
10import java.util.List;
11import java.util.Objects;
12import java.util.Optional;
13import java.util.Set;
14import java.util.function.Consumer;
15import java.util.stream.Collectors;
16import java.util.stream.Stream;
17import org.apache.log4j.Logger;
18import org.eclipse.emf.ecore.EClass;
19import org.eclipse.viatra.query.runtime.api.IPatternMatch;
20import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
21import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
24import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
25import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
26import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
27import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * {@literal @}Constraint(message="memberIsItsOwnParent", severity="error", key={m})
49 * pattern memberIsItsOwnParent(m: Member) = {
50 * FamilyTree.members(_, m);
51 * Member.parents(m, p);
52 * m == p;
53 * }
54 * </pre></code>
55 *
56 * @see Matcher
57 * @see Match
58 *
59 */
60@SuppressWarnings("all")
61public final class MemberIsItsOwnParent extends BaseGeneratedEMFQuerySpecification<MemberIsItsOwnParent.Matcher> {
62 /**
63 * Pattern-specific match representation of the queries.memberIsItsOwnParent pattern,
64 * to be used in conjunction with {@link Matcher}.
65 *
66 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
67 * Each instance is a (possibly partial) substitution of pattern parameters,
68 * usable to represent a match of the pattern in the result of a query,
69 * or to specify the bound (fixed) input parameters when issuing a query.
70 *
71 * @see Matcher
72 *
73 */
74 public static abstract class Match extends BasePatternMatch {
75 private Member fM;
76
77 private static List<String> parameterNames = makeImmutableList("m");
78
79 private Match(final Member pM) {
80 this.fM = pM;
81 }
82
83 @Override
84 public Object get(final String parameterName) {
85 switch(parameterName) {
86 case "m": return this.fM;
87 default: return null;
88 }
89 }
90
91 @Override
92 public Object get(final int index) {
93 switch(index) {
94 case 0: return this.fM;
95 default: return null;
96 }
97 }
98
99 public Member getM() {
100 return this.fM;
101 }
102
103 @Override
104 public boolean set(final String parameterName, final Object newValue) {
105 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
106 if ("m".equals(parameterName) ) {
107 this.fM = (Member) newValue;
108 return true;
109 }
110 return false;
111 }
112
113 public void setM(final Member pM) {
114 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
115 this.fM = pM;
116 }
117
118 @Override
119 public String patternName() {
120 return "queries.memberIsItsOwnParent";
121 }
122
123 @Override
124 public List<String> parameterNames() {
125 return MemberIsItsOwnParent.Match.parameterNames;
126 }
127
128 @Override
129 public Object[] toArray() {
130 return new Object[]{fM};
131 }
132
133 @Override
134 public MemberIsItsOwnParent.Match toImmutable() {
135 return isMutable() ? newMatch(fM) : this;
136 }
137
138 @Override
139 public String prettyPrint() {
140 StringBuilder result = new StringBuilder();
141 result.append("\"m\"=" + prettyPrintValue(fM));
142 return result.toString();
143 }
144
145 @Override
146 public int hashCode() {
147 return Objects.hash(fM);
148 }
149
150 @Override
151 public boolean equals(final Object obj) {
152 if (this == obj)
153 return true;
154 if (obj == null) {
155 return false;
156 }
157 if ((obj instanceof MemberIsItsOwnParent.Match)) {
158 MemberIsItsOwnParent.Match other = (MemberIsItsOwnParent.Match) obj;
159 return Objects.equals(fM, other.fM);
160 } else {
161 // this should be infrequent
162 if (!(obj instanceof IPatternMatch)) {
163 return false;
164 }
165 IPatternMatch otherSig = (IPatternMatch) obj;
166 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
167 }
168 }
169
170 @Override
171 public MemberIsItsOwnParent specification() {
172 return MemberIsItsOwnParent.instance();
173 }
174
175 /**
176 * Returns an empty, mutable match.
177 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
178 *
179 * @return the empty match.
180 *
181 */
182 public static MemberIsItsOwnParent.Match newEmptyMatch() {
183 return new Mutable(null);
184 }
185
186 /**
187 * Returns a mutable (partial) match.
188 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
189 *
190 * @param pM the fixed value of pattern parameter m, or null if not bound.
191 * @return the new, mutable (partial) match object.
192 *
193 */
194 public static MemberIsItsOwnParent.Match newMutableMatch(final Member pM) {
195 return new Mutable(pM);
196 }
197
198 /**
199 * Returns a new (partial) match.
200 * This can be used e.g. to call the matcher with a partial match.
201 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
202 * @param pM the fixed value of pattern parameter m, or null if not bound.
203 * @return the (partial) match object.
204 *
205 */
206 public static MemberIsItsOwnParent.Match newMatch(final Member pM) {
207 return new Immutable(pM);
208 }
209
210 private static final class Mutable extends MemberIsItsOwnParent.Match {
211 Mutable(final Member pM) {
212 super(pM);
213 }
214
215 @Override
216 public boolean isMutable() {
217 return true;
218 }
219 }
220
221 private static final class Immutable extends MemberIsItsOwnParent.Match {
222 Immutable(final Member pM) {
223 super(pM);
224 }
225
226 @Override
227 public boolean isMutable() {
228 return false;
229 }
230 }
231 }
232
233 /**
234 * Generated pattern matcher API of the queries.memberIsItsOwnParent pattern,
235 * providing pattern-specific query methods.
236 *
237 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
238 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
239 *
240 * <p>Matches of the pattern will be represented as {@link Match}.
241 *
242 * <p>Original source:
243 * <code><pre>
244 * {@literal @}Constraint(message="memberIsItsOwnParent", severity="error", key={m})
245 * pattern memberIsItsOwnParent(m: Member) = {
246 * FamilyTree.members(_, m);
247 * Member.parents(m, p);
248 * m == p;
249 * }
250 * </pre></code>
251 *
252 * @see Match
253 * @see MemberIsItsOwnParent
254 *
255 */
256 public static class Matcher extends BaseMatcher<MemberIsItsOwnParent.Match> {
257 /**
258 * Initializes the pattern matcher within an existing VIATRA Query engine.
259 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
260 *
261 * @param engine the existing VIATRA Query engine in which this matcher will be created.
262 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
263 *
264 */
265 public static MemberIsItsOwnParent.Matcher on(final ViatraQueryEngine engine) {
266 // check if matcher already exists
267 Matcher matcher = engine.getExistingMatcher(querySpecification());
268 if (matcher == null) {
269 matcher = (Matcher)engine.getMatcher(querySpecification());
270 }
271 return matcher;
272 }
273
274 /**
275 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
276 * @return an initialized matcher
277 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
278 *
279 */
280 public static MemberIsItsOwnParent.Matcher create() {
281 return new Matcher();
282 }
283
284 private static final int POSITION_M = 0;
285
286 private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(MemberIsItsOwnParent.Matcher.class);
287
288 /**
289 * Initializes the pattern matcher within an existing VIATRA Query engine.
290 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
291 *
292 * @param engine the existing VIATRA Query engine in which this matcher will be created.
293 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
294 *
295 */
296 private Matcher() {
297 super(querySpecification());
298 }
299
300 /**
301 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
302 * @param pM the fixed value of pattern parameter m, or null if not bound.
303 * @return matches represented as a Match object.
304 *
305 */
306 public Collection<MemberIsItsOwnParent.Match> getAllMatches(final Member pM) {
307 return rawStreamAllMatches(new Object[]{pM}).collect(Collectors.toSet());
308 }
309
310 /**
311 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
312 * </p>
313 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
314 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
315 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
316 * @param pM the fixed value of pattern parameter m, or null if not bound.
317 * @return a stream of matches represented as a Match object.
318 *
319 */
320 public Stream<MemberIsItsOwnParent.Match> streamAllMatches(final Member pM) {
321 return rawStreamAllMatches(new Object[]{pM});
322 }
323
324 /**
325 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
326 * Neither determinism nor randomness of selection is guaranteed.
327 * @param pM the fixed value of pattern parameter m, or null if not bound.
328 * @return a match represented as a Match object, or null if no match is found.
329 *
330 */
331 public Optional<MemberIsItsOwnParent.Match> getOneArbitraryMatch(final Member pM) {
332 return rawGetOneArbitraryMatch(new Object[]{pM});
333 }
334
335 /**
336 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
337 * under any possible substitution of the unspecified parameters (if any).
338 * @param pM the fixed value of pattern parameter m, or null if not bound.
339 * @return true if the input is a valid (partial) match of the pattern.
340 *
341 */
342 public boolean hasMatch(final Member pM) {
343 return rawHasMatch(new Object[]{pM});
344 }
345
346 /**
347 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
348 * @param pM the fixed value of pattern parameter m, or null if not bound.
349 * @return the number of pattern matches found.
350 *
351 */
352 public int countMatches(final Member pM) {
353 return rawCountMatches(new Object[]{pM});
354 }
355
356 /**
357 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
358 * Neither determinism nor randomness of selection is guaranteed.
359 * @param pM the fixed value of pattern parameter m, or null if not bound.
360 * @param processor the action that will process the selected match.
361 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
362 *
363 */
364 public boolean forOneArbitraryMatch(final Member pM, final Consumer<? super MemberIsItsOwnParent.Match> processor) {
365 return rawForOneArbitraryMatch(new Object[]{pM}, processor);
366 }
367
368 /**
369 * Returns a new (partial) match.
370 * This can be used e.g. to call the matcher with a partial match.
371 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
372 * @param pM the fixed value of pattern parameter m, or null if not bound.
373 * @return the (partial) match object.
374 *
375 */
376 public MemberIsItsOwnParent.Match newMatch(final Member pM) {
377 return MemberIsItsOwnParent.Match.newMatch(pM);
378 }
379
380 /**
381 * Retrieve the set of values that occur in matches for m.
382 * @return the Set of all values or empty set if there are no matches
383 *
384 */
385 protected Stream<Member> rawStreamAllValuesOfm(final Object[] parameters) {
386 return rawStreamAllValues(POSITION_M, parameters).map(Member.class::cast);
387 }
388
389 /**
390 * Retrieve the set of values that occur in matches for m.
391 * @return the Set of all values or empty set if there are no matches
392 *
393 */
394 public Set<Member> getAllValuesOfm() {
395 return rawStreamAllValuesOfm(emptyArray()).collect(Collectors.toSet());
396 }
397
398 /**
399 * Retrieve the set of values that occur in matches for m.
400 * @return the Set of all values or empty set if there are no matches
401 *
402 */
403 public Stream<Member> streamAllValuesOfm() {
404 return rawStreamAllValuesOfm(emptyArray());
405 }
406
407 @Override
408 protected MemberIsItsOwnParent.Match tupleToMatch(final Tuple t) {
409 try {
410 return MemberIsItsOwnParent.Match.newMatch((Member) t.get(POSITION_M));
411 } catch(ClassCastException e) {
412 LOGGER.error("Element(s) in tuple not properly typed!",e);
413 return null;
414 }
415 }
416
417 @Override
418 protected MemberIsItsOwnParent.Match arrayToMatch(final Object[] match) {
419 try {
420 return MemberIsItsOwnParent.Match.newMatch((Member) match[POSITION_M]);
421 } catch(ClassCastException e) {
422 LOGGER.error("Element(s) in array not properly typed!",e);
423 return null;
424 }
425 }
426
427 @Override
428 protected MemberIsItsOwnParent.Match arrayToMatchMutable(final Object[] match) {
429 try {
430 return MemberIsItsOwnParent.Match.newMutableMatch((Member) match[POSITION_M]);
431 } catch(ClassCastException e) {
432 LOGGER.error("Element(s) in array not properly typed!",e);
433 return null;
434 }
435 }
436
437 /**
438 * @return the singleton instance of the query specification of this pattern
439 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
440 *
441 */
442 public static IQuerySpecification<MemberIsItsOwnParent.Matcher> querySpecification() {
443 return MemberIsItsOwnParent.instance();
444 }
445 }
446
447 private MemberIsItsOwnParent() {
448 super(GeneratedPQuery.INSTANCE);
449 }
450
451 /**
452 * @return the singleton instance of the query specification
453 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
454 *
455 */
456 public static MemberIsItsOwnParent instance() {
457 try{
458 return LazyHolder.INSTANCE;
459 } catch (ExceptionInInitializerError err) {
460 throw processInitializerError(err);
461 }
462 }
463
464 @Override
465 protected MemberIsItsOwnParent.Matcher instantiate(final ViatraQueryEngine engine) {
466 return MemberIsItsOwnParent.Matcher.on(engine);
467 }
468
469 @Override
470 public MemberIsItsOwnParent.Matcher instantiate() {
471 return MemberIsItsOwnParent.Matcher.create();
472 }
473
474 @Override
475 public MemberIsItsOwnParent.Match newEmptyMatch() {
476 return MemberIsItsOwnParent.Match.newEmptyMatch();
477 }
478
479 @Override
480 public MemberIsItsOwnParent.Match newMatch(final Object... parameters) {
481 return MemberIsItsOwnParent.Match.newMatch((familytree.Member) parameters[0]);
482 }
483
484 /**
485 * Inner class allowing the singleton instance of {@link MemberIsItsOwnParent} to be created
486 * <b>not</b> at the class load time of the outer class,
487 * but rather at the first call to {@link MemberIsItsOwnParent#instance()}.
488 *
489 * <p> This workaround is required e.g. to support recursion.
490 *
491 */
492 private static class LazyHolder {
493 private static final MemberIsItsOwnParent INSTANCE = new MemberIsItsOwnParent();
494
495 /**
496 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
497 * This initialization order is required to support indirect recursion.
498 *
499 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
500 *
501 */
502 private static final Object STATIC_INITIALIZER = ensureInitialized();
503
504 public static Object ensureInitialized() {
505 INSTANCE.ensureInitializedInternal();
506 return null;
507 }
508 }
509
510 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
511 private static final MemberIsItsOwnParent.GeneratedPQuery INSTANCE = new GeneratedPQuery();
512
513 private final PParameter parameter_m = new PParameter("m", "familytree.Member", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.example.org/familytree", "Member")), PParameterDirection.INOUT);
514
515 private final List<PParameter> parameters = Arrays.asList(parameter_m);
516
517 private GeneratedPQuery() {
518 super(PVisibility.PUBLIC);
519 }
520
521 @Override
522 public String getFullyQualifiedName() {
523 return "queries.memberIsItsOwnParent";
524 }
525
526 @Override
527 public List<String> getParameterNames() {
528 return Arrays.asList("m");
529 }
530
531 @Override
532 public List<PParameter> getParameters() {
533 return parameters;
534 }
535
536 @Override
537 public Set<PBody> doGetContainedBodies() {
538 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
539 Set<PBody> bodies = new LinkedHashSet<>();
540 {
541 PBody body = new PBody(this);
542 PVariable var_m = body.getOrCreateVariableByName("m");
543 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
544 PVariable var_p = body.getOrCreateVariableByName("p");
545 new TypeConstraint(body, Tuples.flatTupleOf(var_m), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.example.org/familytree", "Member")));
546 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
547 new ExportedParameter(body, var_m, parameter_m)
548 ));
549 // FamilyTree.members(_, m)
550 new TypeConstraint(body, Tuples.flatTupleOf(var___0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.example.org/familytree", "FamilyTree")));
551 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
552 new TypeConstraint(body, Tuples.flatTupleOf(var___0_, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.example.org/familytree", "FamilyTree", "members")));
553 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.example.org/familytree", "Member")));
554 new Equality(body, var__virtual_0_, var_m);
555 // Member.parents(m, p)
556 new TypeConstraint(body, Tuples.flatTupleOf(var_m), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.example.org/familytree", "Member")));
557 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
558 new TypeConstraint(body, Tuples.flatTupleOf(var_m, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.example.org/familytree", "Member", "parents")));
559 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.example.org/familytree", "Member")));
560 new Equality(body, var__virtual_1_, var_p);
561 // m == p
562 new Equality(body, var_m, var_p);
563 bodies.add(body);
564 }
565 {
566 PAnnotation annotation = new PAnnotation("Constraint");
567 annotation.addAttribute("message", "memberIsItsOwnParent");
568 annotation.addAttribute("severity", "error");
569 annotation.addAttribute("key", Arrays.asList(new Object[] {
570 new ParameterReference("m")
571 }));
572 addAnnotation(annotation);
573 }
574 return bodies;
575 }
576 }
577}
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/queries/familyTreeConstraints.vql b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/queries/familyTreeConstraints.vql
new file mode 100644
index 00000000..1b9b6659
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/queries/familyTreeConstraints.vql
@@ -0,0 +1,24 @@
1package queries
2
3import "http://www.example.org/familytree"
4
5@Constraint(message="memberIsItsOwnParent", severity="error", key={m})
6pattern memberIsItsOwnParent(m: Member) = {
7 FamilyTree.members(_, m);
8 Member.parents(m, p);
9 m == p;
10}
11
12//@Constraint(message="parentTooYoung", severity="error", key={m, p})
13//pattern parentTooYoung(m: Member, p: Member) = {
14// FamilyTree.members(_, m);
15// Member.parents(m, p);
16// Member.age(m, mAge);
17// Member.age(p, pAge);
18// check (mAge <= (pAge + 12));
19//}
20
21
22
23
24
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/run/FamilyTreeGen.java b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/run/FamilyTreeGen.java
new file mode 100644
index 00000000..4dcd77a5
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/src/run/FamilyTreeGen.java
@@ -0,0 +1,13 @@
1package run;
2
3import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor;
4
5public class FamilyTreeGen {
6 public static void main(String[] args) {
7 String errorMessages = StandaloneScriptExecutor.executeScript("inputs/familytreeGen.vsconfig");
8 if(errorMessages!=null) {
9 System.out.println(errorMessages);
10 }
11 }
12
13}
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.model/.project b/Tests/MODELS2020-CaseStudies/case.study.pledge.model/.project
index 0f411358..fec454ab 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.model/.project
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.model/.project
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription> 2<projectDescription>
3 <name>case.study.a.model</name> 3 <name>case.study.pledge.model</name>
4 <comment></comment> 4 <comment></comment>
5 <projects> 5 <projects>
6 </projects> 6 </projects>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.model/META-INF/MANIFEST.MF b/Tests/MODELS2020-CaseStudies/case.study.pledge.model/META-INF/MANIFEST.MF
index e4fce672..5df271f3 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.model/META-INF/MANIFEST.MF
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.model/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
1Manifest-Version: 1.0 1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2 2Bundle-ManifestVersion: 2
3Bundle-Name: %pluginName 3Bundle-Name: %pluginName
4Bundle-SymbolicName: case.study.a.model;singleton:=true 4Bundle-SymbolicName: case.study.pledge.model;singleton:=true
5Bundle-Version: 1.0.0.qualifier 5Bundle-Version: 1.0.0.qualifier
6Bundle-ClassPath: . 6Bundle-ClassPath: .
7Bundle-Vendor: %providerName 7Bundle-Vendor: %providerName
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.project b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.project
index 35f74f1f..2d3d0119 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.project
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.project
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription> 2<projectDescription>
3 <name>original.PLEDGE.case.studies</name> 3 <name>case.study.pledge.originalFiles</name>
4 <comment></comment> 4 <comment></comment>
5 <projects> 5 <projects>
6 </projects> 6 </projects>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/.project b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/.project
index f6cc6b58..9080c4bb 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/.project
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/.project
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription> 2<projectDescription>
3 <name>case.study.a.queries</name> 3 <name>case.study.pledge.run</name>
4 <comment></comment> 4 <comment></comment>
5 <projects> 5 <projects>
6 </projects> 6 </projects>
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/META-INF/MANIFEST.MF b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/META-INF/MANIFEST.MF
index c1bf0110..1ab2d276 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/META-INF/MANIFEST.MF
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
1Manifest-Version: 1.0 1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2 2Bundle-ManifestVersion: 2
3Bundle-Name: case.study.a.queries 3Bundle-Name: case.study.a.queries
4Bundle-SymbolicName: case.study.a.queries;singleton:=true 4Bundle-SymbolicName: case.study.pledge.run;singleton:=true
5Bundle-Version: 0.0.1.qualifier 5Bundle-Version: 0.0.1.qualifier
6Export-Package: queries 6Export-Package: queries
7Require-Bundle: org.eclipse.emf.ecore, 7Require-Bundle: org.eclipse.emf.ecore,
@@ -10,7 +10,7 @@ Require-Bundle: org.eclipse.emf.ecore,
10 org.eclipse.viatra.query.runtime.localsearch, 10 org.eclipse.viatra.query.runtime.localsearch,
11 org.eclipse.viatra.addon.querybasedfeatures.runtime;bundle-version="2.3.0", 11 org.eclipse.viatra.addon.querybasedfeatures.runtime;bundle-version="2.3.0",
12 org.eclipse.xtext.xbase.lib, 12 org.eclipse.xtext.xbase.lib,
13 case.study.a.model;bundle-version="1.0.0", 13 case.study.pledge.model;bundle-version="1.0.0",
14 test;bundle-version="0.1.0", 14 test;bundle-version="0.1.0",
15 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0", 15 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0",
16 hu.bme.mit.inf.dslreasoner.logic.model;bundle-version="1.0.0", 16 hu.bme.mit.inf.dslreasoner.logic.model;bundle-version="1.0.0",
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/.gitignore
new file mode 100644
index 00000000..3d70f0da
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/.gitignore
@@ -0,0 +1,2 @@
1/queries/
2/run/
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/queries/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/queries/.gitignore
index 16afa8c0..527f3a0e 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/queries/.gitignore
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/queries/.gitignore
@@ -73,3 +73,40 @@
73/.Inv07.java._trace 73/.Inv07.java._trace
74/.Inv10.java._trace 74/.Inv10.java._trace
75/.X_inv15.java._trace 75/.X_inv15.java._trace
76/Inv03.java
77/Inv05.java
78/Inv06.java
79/X_inv03_eligAll.java
80/X_inv03_hasAll.java
81/X_inv05_inRange.java
82/Case_study_A.java
83/Inv07.java
84/Inv08.java
85/Inv10.java
86/Inv11.java
87/Inv12.java
88/Inv13.java
89/Inv15.java
90/Inv17.java
91/Inv20.java
92/Inv33.java
93/Inv34.java
94/Inv35.java
95/Inv47.java
96/Inv48.java
97/Inv49.java
98/X_inv08_inRange.java
99/X_inv08_noType.java
100/X_inv08_notEI.java
101/X_inv11_incNotOver100.java
102/X_inv11_incOver100.java
103/X_inv12_notNonRes.java
104/X_inv12_notZZ.java
105/X_inv13.java
106/X_inv15.java
107/X_inv47.java
108/X_inv48_3.java
109/X_inv48_Dis.java
110/X_inv48_notDis.java
111/X_inv49_1.java
112/X_inv49_2.java
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.RunGenerator.xtendbin b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.RunGenerator.xtendbin
index 325fee79..e2021169 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.RunGenerator.xtendbin
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.RunGenerator.xtendbin
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.gitignore
index bd13352d..8e503b4a 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.gitignore
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/bin/run/.gitignore
@@ -1,2 +1,4 @@
1/.GenerateScenarios.java._trace 1/.GenerateScenarios.java._trace
2/.checkQueries.java._trace 2/.checkQueries.java._trace
3/.RunGenerator.xtendbin
4/GenerateScenarios.java
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/.gitignore
index 16afa8c0..527f3a0e 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/.gitignore
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/.gitignore
@@ -73,3 +73,40 @@
73/.Inv07.java._trace 73/.Inv07.java._trace
74/.Inv10.java._trace 74/.Inv10.java._trace
75/.X_inv15.java._trace 75/.X_inv15.java._trace
76/Inv03.java
77/Inv05.java
78/Inv06.java
79/X_inv03_eligAll.java
80/X_inv03_hasAll.java
81/X_inv05_inRange.java
82/Case_study_A.java
83/Inv07.java
84/Inv08.java
85/Inv10.java
86/Inv11.java
87/Inv12.java
88/Inv13.java
89/Inv15.java
90/Inv17.java
91/Inv20.java
92/Inv33.java
93/Inv34.java
94/Inv35.java
95/Inv47.java
96/Inv48.java
97/Inv49.java
98/X_inv08_inRange.java
99/X_inv08_noType.java
100/X_inv08_notEI.java
101/X_inv11_incNotOver100.java
102/X_inv11_incOver100.java
103/X_inv12_notNonRes.java
104/X_inv12_notZZ.java
105/X_inv13.java
106/X_inv15.java
107/X_inv47.java
108/X_inv48_3.java
109/X_inv48_Dis.java
110/X_inv48_notDis.java
111/X_inv49_1.java
112/X_inv49_2.java
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Case_study_A.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Case_study_A.java
index a8ab2996..11c60d6f 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Case_study_A.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Case_study_A.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv03.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv03.java
index cfe496bd..9038ec4d 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv03.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv03.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv05.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv05.java
index ba1f8552..2dee094d 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv05.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv05.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv06.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv06.java
index fcf7ac89..aafdbe41 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv06.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv06.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
@@ -8,6 +8,7 @@ import java.util.Arrays;
8import java.util.Collection; 8import java.util.Collection;
9import java.util.LinkedHashSet; 9import java.util.LinkedHashSet;
10import java.util.List; 10import java.util.List;
11import java.util.Objects;
11import java.util.Optional; 12import java.util.Optional;
12import java.util.Set; 13import java.util.Set;
13import java.util.function.Consumer; 14import java.util.function.Consumer;
@@ -16,6 +17,7 @@ import java.util.stream.Stream;
16import org.apache.log4j.Logger; 17import org.apache.log4j.Logger;
17import org.eclipse.emf.ecore.EClass; 18import org.eclipse.emf.ecore.EClass;
18import org.eclipse.emf.ecore.EDataType; 19import org.eclipse.emf.ecore.EDataType;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
19import org.eclipse.viatra.query.runtime.api.IQuerySpecification; 21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
20import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; 22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
21import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; 23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
@@ -82,6 +84,162 @@ public final class Inv06 extends BaseGeneratedEMFQuerySpecification<Inv06.Matche
82 * 84 *
83 */ 85 */
84 public static abstract class Match extends BasePatternMatch { 86 public static abstract class Match extends BasePatternMatch {
87 private Tax_Payer fTp;
88
89 private static List<String> parameterNames = makeImmutableList("tp");
90
91 private Match(final Tax_Payer pTp) {
92 this.fTp = pTp;
93 }
94
95 @Override
96 public Object get(final String parameterName) {
97 switch(parameterName) {
98 case "tp": return this.fTp;
99 default: return null;
100 }
101 }
102
103 @Override
104 public Object get(final int index) {
105 switch(index) {
106 case 0: return this.fTp;
107 default: return null;
108 }
109 }
110
111 public Tax_Payer getTp() {
112 return this.fTp;
113 }
114
115 @Override
116 public boolean set(final String parameterName, final Object newValue) {
117 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
118 if ("tp".equals(parameterName) ) {
119 this.fTp = (Tax_Payer) newValue;
120 return true;
121 }
122 return false;
123 }
124
125 public void setTp(final Tax_Payer pTp) {
126 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
127 this.fTp = pTp;
128 }
129
130 @Override
131 public String patternName() {
132 return "queries.inv06";
133 }
134
135 @Override
136 public List<String> parameterNames() {
137 return Inv06.Match.parameterNames;
138 }
139
140 @Override
141 public Object[] toArray() {
142 return new Object[]{fTp};
143 }
144
145 @Override
146 public Inv06.Match toImmutable() {
147 return isMutable() ? newMatch(fTp) : this;
148 }
149
150 @Override
151 public String prettyPrint() {
152 StringBuilder result = new StringBuilder();
153 result.append("\"tp\"=" + prettyPrintValue(fTp));
154 return result.toString();
155 }
156
157 @Override
158 public int hashCode() {
159 return Objects.hash(fTp);
160 }
161
162 @Override
163 public boolean equals(final Object obj) {
164 if (this == obj)
165 return true;
166 if (obj == null) {
167 return false;
168 }
169 if ((obj instanceof Inv06.Match)) {
170 Inv06.Match other = (Inv06.Match) obj;
171 return Objects.equals(fTp, other.fTp);
172 } else {
173 // this should be infrequent
174 if (!(obj instanceof IPatternMatch)) {
175 return false;
176 }
177 IPatternMatch otherSig = (IPatternMatch) obj;
178 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
179 }
180 }
181
182 @Override
183 public Inv06 specification() {
184 return Inv06.instance();
185 }
186
187 /**
188 * Returns an empty, mutable match.
189 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
190 *
191 * @return the empty match.
192 *
193 */
194 public static Inv06.Match newEmptyMatch() {
195 return new Mutable(null);
196 }
197
198 /**
199 * Returns a mutable (partial) match.
200 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
201 *
202 * @param pTp the fixed value of pattern parameter tp, or null if not bound.
203 * @return the new, mutable (partial) match object.
204 *
205 */
206 public static Inv06.Match newMutableMatch(final Tax_Payer pTp) {
207 return new Mutable(pTp);
208 }
209
210 /**
211 * Returns a new (partial) match.
212 * This can be used e.g. to call the matcher with a partial match.
213 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
214 * @param pTp the fixed value of pattern parameter tp, or null if not bound.
215 * @return the (partial) match object.
216 *
217 */
218 public static Inv06.Match newMatch(final Tax_Payer pTp) {
219 return new Immutable(pTp);
220 }
221
222 private static final class Mutable extends Inv06.Match {
223 Mutable(final Tax_Payer pTp) {
224 super(pTp);
225 }
226
227 @Override
228 public boolean isMutable() {
229 return true;
230 }
231 }
232
233 private static final class Immutable extends Inv06.Match {
234 Immutable(final Tax_Payer pTp) {
235 super(pTp);
236 }
237
238 @Override
239 public boolean isMutable() {
240 return false;
241 }
242 }
85 } 243 }
86 244
87 /** 245 /**
@@ -189,7 +347,9 @@ public final class Inv06 extends BaseGeneratedEMFQuerySpecification<Inv06.Matche
189 * @return a match represented as a Match object, or null if no match is found. 347 * @return a match represented as a Match object, or null if no match is found.
190 * 348 *
191 */ 349 */
192 public Optional<Inv06.Match> getOneArbitraryMatch(); 350 public Optional<Inv06.Match> getOneArbitraryMatch(final Tax_Payer pTp) {
351 return rawGetOneArbitraryMatch(new Object[]{pTp});
352 }
193 353
194 /** 354 /**
195 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, 355 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv07.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv07.java
index d9fed653..81665825 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv07.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv07.java
@@ -1,14 +1,14 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
6import Taxation.Income; 6import Taxation.Income;
7import com.google.common.base.Objects;
8import java.util.Arrays; 7import java.util.Arrays;
9import java.util.Collection; 8import java.util.Collection;
10import java.util.LinkedHashSet; 9import java.util.LinkedHashSet;
11import java.util.List; 10import java.util.List;
11import java.util.Objects;
12import java.util.Optional; 12import java.util.Optional;
13import java.util.Set; 13import java.util.Set;
14import java.util.function.Consumer; 14import java.util.function.Consumer;
@@ -17,6 +17,7 @@ import java.util.stream.Stream;
17import org.apache.log4j.Logger; 17import org.apache.log4j.Logger;
18import org.eclipse.emf.ecore.EClass; 18import org.eclipse.emf.ecore.EClass;
19import org.eclipse.emf.ecore.EDataType; 19import org.eclipse.emf.ecore.EDataType;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
20import org.eclipse.viatra.query.runtime.api.IQuerySpecification; 21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
21import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; 22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; 23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
@@ -77,6 +78,162 @@ public final class Inv07 extends BaseGeneratedEMFQuerySpecification<Inv07.Matche
77 * 78 *
78 */ 79 */
79 public static abstract class Match extends BasePatternMatch { 80 public static abstract class Match extends BasePatternMatch {
81 private Income fInc;
82
83 private static List<String> parameterNames = makeImmutableList("inc");
84
85 private Match(final Income pInc) {
86 this.fInc = pInc;
87 }
88
89 @Override
90 public Object get(final String parameterName) {
91 switch(parameterName) {
92 case "inc": return this.fInc;
93 default: return null;
94 }
95 }
96
97 @Override
98 public Object get(final int index) {
99 switch(index) {
100 case 0: return this.fInc;
101 default: return null;
102 }
103 }
104
105 public Income getInc() {
106 return this.fInc;
107 }
108
109 @Override
110 public boolean set(final String parameterName, final Object newValue) {
111 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
112 if ("inc".equals(parameterName) ) {
113 this.fInc = (Income) newValue;
114 return true;
115 }
116 return false;
117 }
118
119 public void setInc(final Income pInc) {
120 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
121 this.fInc = pInc;
122 }
123
124 @Override
125 public String patternName() {
126 return "queries.inv07";
127 }
128
129 @Override
130 public List<String> parameterNames() {
131 return Inv07.Match.parameterNames;
132 }
133
134 @Override
135 public Object[] toArray() {
136 return new Object[]{fInc};
137 }
138
139 @Override
140 public Inv07.Match toImmutable() {
141 return isMutable() ? newMatch(fInc) : this;
142 }
143
144 @Override
145 public String prettyPrint() {
146 StringBuilder result = new StringBuilder();
147 result.append("\"inc\"=" + prettyPrintValue(fInc));
148 return result.toString();
149 }
150
151 @Override
152 public int hashCode() {
153 return Objects.hash(fInc);
154 }
155
156 @Override
157 public boolean equals(final Object obj) {
158 if (this == obj)
159 return true;
160 if (obj == null) {
161 return false;
162 }
163 if ((obj instanceof Inv07.Match)) {
164 Inv07.Match other = (Inv07.Match) obj;
165 return Objects.equals(fInc, other.fInc);
166 } else {
167 // this should be infrequent
168 if (!(obj instanceof IPatternMatch)) {
169 return false;
170 }
171 IPatternMatch otherSig = (IPatternMatch) obj;
172 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
173 }
174 }
175
176 @Override
177 public Inv07 specification() {
178 return Inv07.instance();
179 }
180
181 /**
182 * Returns an empty, mutable match.
183 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
184 *
185 * @return the empty match.
186 *
187 */
188 public static Inv07.Match newEmptyMatch() {
189 return new Mutable(null);
190 }
191
192 /**
193 * Returns a mutable (partial) match.
194 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
195 *
196 * @param pInc the fixed value of pattern parameter inc, or null if not bound.
197 * @return the new, mutable (partial) match object.
198 *
199 */
200 public static Inv07.Match newMutableMatch(final Income pInc) {
201 return new Mutable(pInc);
202 }
203
204 /**
205 * Returns a new (partial) match.
206 * This can be used e.g. to call the matcher with a partial match.
207 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
208 * @param pInc the fixed value of pattern parameter inc, or null if not bound.
209 * @return the (partial) match object.
210 *
211 */
212 public static Inv07.Match newMatch(final Income pInc) {
213 return new Immutable(pInc);
214 }
215
216 private static final class Mutable extends Inv07.Match {
217 Mutable(final Income pInc) {
218 super(pInc);
219 }
220
221 @Override
222 public boolean isMutable() {
223 return true;
224 }
225 }
226
227 private static final class Immutable extends Inv07.Match {
228 Immutable(final Income pInc) {
229 super(pInc);
230 }
231
232 @Override
233 public boolean isMutable() {
234 return false;
235 }
236 }
80 } 237 }
81 238
82 /** 239 /**
@@ -449,7 +606,7 @@ public final class Inv07 extends BaseGeneratedEMFQuerySpecification<Inv07.Matche
449 } 606 }
450 607
451 private static boolean evaluateExpression_1_1(final Double d1, final Double d2) { 608 private static boolean evaluateExpression_1_1(final Double d1, final Double d2) {
452 boolean _notEquals = (!Objects.equal(d1, d2)); 609 boolean _notEquals = (!com.google.common.base.Objects.equal(d1, d2));
453 return _notEquals; 610 return _notEquals;
454 } 611 }
455} 612}
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv08.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv08.java
index d2f869c6..9ecadd34 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv08.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv08.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv10.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv10.java
index 3c36b831..6ee0111e 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv10.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv10.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv11.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv11.java
index a64ef7ff..5dc82fc9 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv11.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv11.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv12.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv12.java
index 2a539a1d..fc1b0c62 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv12.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv12.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
@@ -35,6 +35,7 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedP
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; 35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; 36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; 37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; 39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; 40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; 41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
@@ -215,6 +216,10 @@ public final class Inv12 extends BaseGeneratedEMFQuerySpecification<Inv12.Matche
215 } 216 }
216 217
217 private static final class Mutable extends Inv12.Match { 218 private static final class Mutable extends Inv12.Match {
219 Mutable(final Tax_Payer pTp) {
220 super(pTp);
221 }
222
218 @Override 223 @Override
219 public boolean isMutable() { 224 public boolean isMutable() {
220 return true; 225 return true;
@@ -381,7 +386,9 @@ public final class Inv12 extends BaseGeneratedEMFQuerySpecification<Inv12.Matche
381 * @return the (partial) match object. 386 * @return the (partial) match object.
382 * 387 *
383 */ 388 */
384 public Inv12.Match newMatch(); 389 public Inv12.Match newMatch(final Tax_Payer pTp) {
390 return Inv12.Match.newMatch(pTp);
391 }
385 392
386 /** 393 /**
387 * Retrieve the set of values that occur in matches for tp. 394 * Retrieve the set of values that occur in matches for tp.
@@ -516,7 +523,7 @@ public final class Inv12 extends BaseGeneratedEMFQuerySpecification<Inv12.Matche
516 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { 523 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
517 private static final Inv12.GeneratedPQuery INSTANCE = new GeneratedPQuery(); 524 private static final Inv12.GeneratedPQuery INSTANCE = new GeneratedPQuery();
518 525
519 private final PParameter parameter_tp; 526 private final PParameter parameter_tp = new PParameter("tp", "Taxation.Tax_Payer", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http:///TaxCard.ecore", "Tax_Payer")), PParameterDirection.INOUT);
520 527
521 private final List<PParameter> parameters = Arrays.asList(parameter_tp); 528 private final List<PParameter> parameters = Arrays.asList(parameter_tp);
522 529
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv13.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv13.java
index c162969f..a4aea47c 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv13.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv13.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv15.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv15.java
index 50799179..3bfab503 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv15.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv15.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv17.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv17.java
index 8019db8c..4a10d4f4 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv17.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv17.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv20.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv20.java
index 2d5bd266..6fcc3b7d 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv20.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv20.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv33.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv33.java
index f90cca26..1672290c 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv33.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv33.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv34.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv34.java
index 89a24686..b9b28986 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv34.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv34.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv35.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv35.java
index b5da21b4..c67325ac 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv35.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv35.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv47.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv47.java
index d86f31c9..10ba19d6 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv47.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv47.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv48.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv48.java
index 66c66988..67133328 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv48.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv48.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv49.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv49.java
index 3f8b975e..66bca24a 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv49.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/Inv49.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_eligAll.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_eligAll.java
index 89ae2bcc..0bfffe93 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_eligAll.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_eligAll.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_hasAll.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_hasAll.java
index 66e47407..90deb92d 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_hasAll.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv03_hasAll.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv05_inRange.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv05_inRange.java
index 4c2a7299..aea94873 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv05_inRange.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv05_inRange.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
@@ -344,7 +344,9 @@ public final class X_inv05_inRange extends BaseGeneratedEMFQuerySpecification<X_
344 * @return true if the input is a valid (partial) match of the pattern. 344 * @return true if the input is a valid (partial) match of the pattern.
345 * 345 *
346 */ 346 */
347 public boolean hasMatch(); 347 public boolean hasMatch(final Income pInc) {
348 return rawHasMatch(new Object[]{pInc});
349 }
348 350
349 /** 351 /**
350 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. 352 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_inRange.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_inRange.java
index 7974c256..b3efea21 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_inRange.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_inRange.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_noType.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_noType.java
index 2bffe499..451d7d66 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_noType.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_noType.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_notEI.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_notEI.java
index 4b4029a8..07236028 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_notEI.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv08_notEI.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incNotOver100.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incNotOver100.java
index 35b30b0f..995946eb 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incNotOver100.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incNotOver100.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
@@ -11,11 +11,14 @@ import java.util.List;
11import java.util.Objects; 11import java.util.Objects;
12import java.util.Optional; 12import java.util.Optional;
13import java.util.Set; 13import java.util.Set;
14import java.util.function.Consumer;
15import java.util.stream.Collectors;
14import java.util.stream.Stream; 16import java.util.stream.Stream;
15import org.apache.log4j.Logger; 17import org.apache.log4j.Logger;
16import org.eclipse.emf.ecore.EClass; 18import org.eclipse.emf.ecore.EClass;
17import org.eclipse.emf.ecore.EDataType; 19import org.eclipse.emf.ecore.EDataType;
18import org.eclipse.viatra.query.runtime.api.IPatternMatch; 20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
19import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; 22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
20import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; 23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
21import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; 24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
@@ -36,6 +39,7 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeCo
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; 39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; 40import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; 41import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
42import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; 43import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; 44import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41 45
@@ -312,7 +316,9 @@ public final class X_inv11_incNotOver100 extends BaseGeneratedEMFQuerySpecificat
312 * @return matches represented as a Match object. 316 * @return matches represented as a Match object.
313 * 317 *
314 */ 318 */
315 public Collection<X_inv11_incNotOver100.Match> getAllMatches(); 319 public Collection<X_inv11_incNotOver100.Match> getAllMatches(final Expense pExp) {
320 return rawStreamAllMatches(new Object[]{pExp}).collect(Collectors.toSet());
321 }
316 322
317 /** 323 /**
318 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. 324 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
@@ -368,7 +374,9 @@ public final class X_inv11_incNotOver100 extends BaseGeneratedEMFQuerySpecificat
368 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked 374 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
369 * 375 *
370 */ 376 */
371 public boolean forOneArbitraryMatch(); 377 public boolean forOneArbitraryMatch(final Expense pExp, final Consumer<? super X_inv11_incNotOver100.Match> processor) {
378 return rawForOneArbitraryMatch(new Object[]{pExp}, processor);
379 }
372 380
373 /** 381 /**
374 * Returns a new (partial) match. 382 * Returns a new (partial) match.
@@ -381,6 +389,72 @@ public final class X_inv11_incNotOver100 extends BaseGeneratedEMFQuerySpecificat
381 public X_inv11_incNotOver100.Match newMatch(final Expense pExp) { 389 public X_inv11_incNotOver100.Match newMatch(final Expense pExp) {
382 return X_inv11_incNotOver100.Match.newMatch(pExp); 390 return X_inv11_incNotOver100.Match.newMatch(pExp);
383 } 391 }
392
393 /**
394 * Retrieve the set of values that occur in matches for exp.
395 * @return the Set of all values or empty set if there are no matches
396 *
397 */
398 protected Stream<Expense> rawStreamAllValuesOfexp(final Object[] parameters) {
399 return rawStreamAllValues(POSITION_EXP, parameters).map(Expense.class::cast);
400 }
401
402 /**
403 * Retrieve the set of values that occur in matches for exp.
404 * @return the Set of all values or empty set if there are no matches
405 *
406 */
407 public Set<Expense> getAllValuesOfexp() {
408 return rawStreamAllValuesOfexp(emptyArray()).collect(Collectors.toSet());
409 }
410
411 /**
412 * Retrieve the set of values that occur in matches for exp.
413 * @return the Set of all values or empty set if there are no matches
414 *
415 */
416 public Stream<Expense> streamAllValuesOfexp() {
417 return rawStreamAllValuesOfexp(emptyArray());
418 }
419
420 @Override
421 protected X_inv11_incNotOver100.Match tupleToMatch(final Tuple t) {
422 try {
423 return X_inv11_incNotOver100.Match.newMatch((Expense) t.get(POSITION_EXP));
424 } catch(ClassCastException e) {
425 LOGGER.error("Element(s) in tuple not properly typed!",e);
426 return null;
427 }
428 }
429
430 @Override
431 protected X_inv11_incNotOver100.Match arrayToMatch(final Object[] match) {
432 try {
433 return X_inv11_incNotOver100.Match.newMatch((Expense) match[POSITION_EXP]);
434 } catch(ClassCastException e) {
435 LOGGER.error("Element(s) in array not properly typed!",e);
436 return null;
437 }
438 }
439
440 @Override
441 protected X_inv11_incNotOver100.Match arrayToMatchMutable(final Object[] match) {
442 try {
443 return X_inv11_incNotOver100.Match.newMutableMatch((Expense) match[POSITION_EXP]);
444 } catch(ClassCastException e) {
445 LOGGER.error("Element(s) in array not properly typed!",e);
446 return null;
447 }
448 }
449
450 /**
451 * @return the singleton instance of the query specification of this pattern
452 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
453 *
454 */
455 public static IQuerySpecification<X_inv11_incNotOver100.Matcher> querySpecification() {
456 return X_inv11_incNotOver100.instance();
457 }
384 } 458 }
385 459
386 private X_inv11_incNotOver100() { 460 private X_inv11_incNotOver100() {
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incOver100.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incOver100.java
index 27f7a2dc..65ae5dd6 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incOver100.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv11_incOver100.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notNonRes.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notNonRes.java
index 1c0e5109..96aea5e8 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notNonRes.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notNonRes.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
@@ -30,6 +30,7 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
30import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; 30import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
31import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; 31import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
32import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; 32import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
33import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
33import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; 34import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
34import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; 35import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
35import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; 36import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
@@ -499,7 +500,7 @@ public final class X_inv12_notNonRes extends BaseGeneratedEMFQuerySpecification<
499 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { 500 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
500 private static final X_inv12_notNonRes.GeneratedPQuery INSTANCE = new GeneratedPQuery(); 501 private static final X_inv12_notNonRes.GeneratedPQuery INSTANCE = new GeneratedPQuery();
501 502
502 private final PParameter parameter_tp; 503 private final PParameter parameter_tp = new PParameter("tp", "Taxation.Non_Resident_Tax_Payer", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http:///TaxCard.ecore", "Non_Resident_Tax_Payer")), PParameterDirection.INOUT);
503 504
504 private final List<PParameter> parameters = Arrays.asList(parameter_tp); 505 private final List<PParameter> parameters = Arrays.asList(parameter_tp);
505 506
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notZZ.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notZZ.java
index 68a4098f..f8e7da17 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notZZ.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv12_notZZ.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv13.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv13.java
index ac0dd914..42afdd70 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv13.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv13.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv15.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv15.java
index 70d0a290..d162542d 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv15.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv15.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv47.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv47.java
index c1477d21..c602f8d4 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv47.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv47.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_3.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_3.java
index 2a522290..913e9c7e 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_3.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_3.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_Dis.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_Dis.java
index 2013f033..08de1250 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_Dis.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_Dis.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_notDis.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_notDis.java
index 678a96d3..21dcc068 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_notDis.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv48_notDis.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_1.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_1.java
index e05ec5cd..67915440 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_1.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_1.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_2.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_2.java
index 43ce44b4..66decdb4 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_2.java
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/src-gen/queries/X_inv49_2.java
@@ -1,5 +1,5 @@
1/** 1/**
2 * Generated from platform:/resource/case.study.a.queries/src/queries/case_study_A.vql 2 * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_A.vql
3 */ 3 */
4package queries; 4package queries;
5 5
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.RunGenerator.xtendbin b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.RunGenerator.xtendbin
index 325fee79..e2021169 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.RunGenerator.xtendbin
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.RunGenerator.xtendbin
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.gitignore
index bd13352d..8e503b4a 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.gitignore
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.queries/xtend-gen/run/.gitignore
@@ -1,2 +1,4 @@
1/.GenerateScenarios.java._trace 1/.GenerateScenarios.java._trace
2/.checkQueries.java._trace 2/.checkQueries.java._trace
3/.RunGenerator.xtendbin
4/GenerateScenarios.java
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.samples/.project b/Tests/MODELS2020-CaseStudies/case.study.pledge.samples/.project
index d5638068..19d0f33d 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.samples/.project
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.samples/.project
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription> 2<projectDescription>
3 <name>case.study.a.instances</name> 3 <name>case.study.pledge.instances</name>
4 <comment></comment> 4 <comment></comment>
5 <projects> 5 <projects>
6 </projects> 6 </projects>