aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszka@152.66.252.189>2017-06-21 21:19:27 +0200
committerLibravatar OszkarSemerath <oszka@152.66.252.189>2017-06-21 21:19:27 +0200
commitbd9d6001d6d288b98f20ba2b4886a147088a6f99 (patch)
treeb0b93dd8de27642afe86cdc9e849c49e7ec7202b /Framework/hu.bme.mit.inf.dslreasoner.logic2ecore
parentModel translator and sanitiser from original yakindu files to simplified (diff)
downloadVIATRA-Generator-bd9d6001d6d288b98f20ba2b4886a147088a6f99.tar.gz
VIATRA-Generator-bd9d6001d6d288b98f20ba2b4886a147088a6f99.tar.zst
VIATRA-Generator-bd9d6001d6d288b98f20ba2b4886a147088a6f99.zip
Logic interpretation -> standard EMF instance model
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.logic2ecore')
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.classpath8
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.gitignore2
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.project34
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/META-INF/MANIFEST.MF13
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/build.properties4
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/inf/dslreasoner/logic2ecore/Logic2Ecore.xtend91
7 files changed, 159 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.classpath b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.classpath
new file mode 100644
index 00000000..1c96fe2f
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.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="xtend-gen"/>
7 <classpathentry kind="output" path="bin"/>
8</classpath>
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.gitignore b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.gitignore
new file mode 100644
index 00000000..3197db31
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.gitignore
@@ -0,0 +1,2 @@
1/bin/
2/xtend-gen/ \ No newline at end of file
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.project b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.project
new file mode 100644
index 00000000..00b52d18
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.project
@@ -0,0 +1,34 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription>
3 <name>hu.bme.mit.inf.dslreasoner.logic2ecore</name>
4 <comment></comment>
5 <projects>
6 </projects>
7 <buildSpec>
8 <buildCommand>
9 <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
10 <arguments>
11 </arguments>
12 </buildCommand>
13 <buildCommand>
14 <name>org.eclipse.jdt.core.javabuilder</name>
15 <arguments>
16 </arguments>
17 </buildCommand>
18 <buildCommand>
19 <name>org.eclipse.pde.ManifestBuilder</name>
20 <arguments>
21 </arguments>
22 </buildCommand>
23 <buildCommand>
24 <name>org.eclipse.pde.SchemaBuilder</name>
25 <arguments>
26 </arguments>
27 </buildCommand>
28 </buildSpec>
29 <natures>
30 <nature>org.eclipse.pde.PluginNature</nature>
31 <nature>org.eclipse.jdt.core.javanature</nature>
32 <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
33 </natures>
34</projectDescription>
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.settings/org.eclipse.jdt.core.prefs b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..295926d9
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.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/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/META-INF/MANIFEST.MF b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..7a572aa9
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2
3Bundle-Name: Logic2ecore
4Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.logic2ecore
5Bundle-Version: 1.0.0.qualifier
6Bundle-RequiredExecutionEnvironment: JavaSE-1.8
7Require-Bundle: com.google.guava,
8 org.eclipse.xtext.xbase.lib,
9 org.eclipse.xtend.lib,
10 org.eclipse.xtend.lib.macro,
11 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0",
12 org.eclipse.ocl.ecore;bundle-version="3.6.0"
13
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/build.properties b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/build.properties
new file mode 100644
index 00000000..41eb6ade
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/build.properties
@@ -0,0 +1,4 @@
1source.. = src/
2output.. = bin/
3bin.includes = META-INF/,\
4 .
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/inf/dslreasoner/logic2ecore/Logic2Ecore.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/inf/dslreasoner/logic2ecore/Logic2Ecore.xtend
new file mode 100644
index 00000000..2ab7091e
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/inf/dslreasoner/logic2ecore/Logic2Ecore.xtend
@@ -0,0 +1,91 @@
1package hu.bme.mit.inf.dslreasoner.logic2ecore
2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
4import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult
5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicStructureBuilder
6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
8import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation
9import java.util.HashSet
10import java.util.HashMap
11import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
12import org.eclipse.emf.ecore.EClass
13import java.util.Set
14import org.eclipse.emf.ecore.EObject
15import java.util.List
16import java.util.Collection
17
18class Logic2Ecore {
19 private val extension LogicProblemBuilder problemBuilder = new LogicProblemBuilder
20 private val extension LogicStructureBuilder structureBuilder = new LogicStructureBuilder
21 val Ecore2Logic ecore2Logic;
22
23 new (Ecore2Logic ecore2Logic) {
24 this.ecore2Logic = ecore2Logic
25 }
26
27 def transformInterpretation(LogicModelInterpretation interpretation, Ecore2Logic_Trace forwardTrace) {
28 val allClasses = ecore2Logic.allClassesInScope(forwardTrace)
29 val elements = new HashSet
30 val element2Classes = new HashMap
31
32
33 for(clazz: allClasses) {
34 val type = ecore2Logic.TypeofEClass(forwardTrace,clazz);
35 val elementsOfClass = getElements(interpretation,type)
36 for(element : elementsOfClass) {
37 elements += element
38 element2Classes.putOrAddToSet(element,clazz)
39 }
40 }
41
42 val element2Object = new HashMap
43 for(element: elements) {
44 val clazz = element.lookup(element2Classes).mostConcreteType
45 val eobject = clazz.EPackage.EFactoryInstance.create(clazz)
46 element2Object.put(element,eobject)
47 }
48
49 val allReferences = ecore2Logic.allReferencesInScope(forwardTrace)
50 for(referenceType : allReferences) {
51 for(sourceElement : elements) {
52 val sourceObject = sourceElement.lookup(element2Object)
53 if(sourceObject.eClass.isSuperTypeOf(referenceType.EContainingClass)) {
54 for(targetElement: elements) {
55 val targetObject = targetElement.lookup(element2Object)
56 if(targetObject.eClass.isSuperTypeOf(referenceType.EReferenceType)) {
57 val expression = ecore2Logic.IsInReference(forwardTrace,sourceElement,targetElement,referenceType)
58 val linkExist = interpretation.evalAsBool(expression)
59 if(linkExist) {
60 if(referenceType.isMany) {
61 val list = sourceObject.eGet(referenceType) as List<? super EObject>
62 list+= targetObject
63 } else {
64 sourceObject.eSet(referenceType,targetObject)
65 }
66 }
67 }
68 }
69 }
70 }
71 }
72
73 /// Attributes
74
75 return element2Object.values.root
76 }
77
78 def mostConcreteType(Set<EClass> classes) {
79 for(candidate : classes) {
80 val subtypeOfAll = classes.forall[it.isSuperTypeOf(candidate)]
81 if(subtypeOfAll) {
82 return candidate
83 }
84 }
85 throw new AssertionError("Object has no unique concrete type!")
86 }
87
88 def getRoot(Collection<EObject> objects) {
89 objects.filter[eContainer === null].head
90 }
91} \ No newline at end of file