diff options
author | OszkarSemerath <oszka@152.66.252.189> | 2017-06-21 21:19:27 +0200 |
---|---|---|
committer | OszkarSemerath <oszka@152.66.252.189> | 2017-06-21 21:19:27 +0200 |
commit | bd9d6001d6d288b98f20ba2b4886a147088a6f99 (patch) | |
tree | b0b93dd8de27642afe86cdc9e849c49e7ec7202b /Framework/hu.bme.mit.inf.dslreasoner.logic2ecore | |
parent | Model translator and sanitiser from original yakindu files to simplified (diff) | |
download | VIATRA-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')
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 @@ | |||
1 | eclipse.preferences.version=1 | ||
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||
4 | org.eclipse.jdt.core.compiler.compliance=1.8 | ||
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||
6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||
7 | org.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 @@ | |||
1 | Manifest-Version: 1.0 | ||
2 | Bundle-ManifestVersion: 2 | ||
3 | Bundle-Name: Logic2ecore | ||
4 | Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.logic2ecore | ||
5 | Bundle-Version: 1.0.0.qualifier | ||
6 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | ||
7 | Require-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 @@ | |||
1 | source.. = src/ | ||
2 | output.. = bin/ | ||
3 | bin.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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.logic2ecore | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicStructureBuilder | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder | ||
7 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | ||
8 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation | ||
9 | import java.util.HashSet | ||
10 | import java.util.HashMap | ||
11 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
12 | import org.eclipse.emf.ecore.EClass | ||
13 | import java.util.Set | ||
14 | import org.eclipse.emf.ecore.EObject | ||
15 | import java.util.List | ||
16 | import java.util.Collection | ||
17 | |||
18 | class 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 | ||