From bd9d6001d6d288b98f20ba2b4886a147088a6f99 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Wed, 21 Jun 2017 21:19:27 +0200 Subject: Logic interpretation -> standard EMF instance model --- .../.classpath | 8 ++ .../.gitignore | 2 + .../.project | 34 ++++++++ .../.settings/org.eclipse.jdt.core.prefs | 7 ++ .../META-INF/MANIFEST.MF | 13 ++++ .../build.properties | 4 + .../inf/dslreasoner/logic2ecore/Logic2Ecore.xtend | 91 ++++++++++++++++++++++ 7 files changed, 159 insertions(+) create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.classpath create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.gitignore create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.project create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/.settings/org.eclipse.jdt.core.prefs create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/META-INF/MANIFEST.MF create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/build.properties create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/inf/dslreasoner/logic2ecore/Logic2Ecore.xtend (limited to 'Framework/hu.bme.mit.inf.dslreasoner.logic2ecore') 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 @@ + + + + + + + + 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 @@ +/bin/ +/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 @@ + + + hu.bme.mit.inf.dslreasoner.logic2ecore + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.xtext.ui.shared.xtextNature + + 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 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +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 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Logic2ecore +Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.logic2ecore +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: com.google.guava, + org.eclipse.xtext.xbase.lib, + org.eclipse.xtend.lib, + org.eclipse.xtend.lib.macro, + hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0", + org.eclipse.ocl.ecore;bundle-version="3.6.0" + 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 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . 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 @@ +package hu.bme.mit.inf.dslreasoner.logic2ecore + +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace +import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult +import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicStructureBuilder +import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic +import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation +import java.util.HashSet +import java.util.HashMap +import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* +import org.eclipse.emf.ecore.EClass +import java.util.Set +import org.eclipse.emf.ecore.EObject +import java.util.List +import java.util.Collection + +class Logic2Ecore { + private val extension LogicProblemBuilder problemBuilder = new LogicProblemBuilder + private val extension LogicStructureBuilder structureBuilder = new LogicStructureBuilder + val Ecore2Logic ecore2Logic; + + new (Ecore2Logic ecore2Logic) { + this.ecore2Logic = ecore2Logic + } + + def transformInterpretation(LogicModelInterpretation interpretation, Ecore2Logic_Trace forwardTrace) { + val allClasses = ecore2Logic.allClassesInScope(forwardTrace) + val elements = new HashSet + val element2Classes = new HashMap + + + for(clazz: allClasses) { + val type = ecore2Logic.TypeofEClass(forwardTrace,clazz); + val elementsOfClass = getElements(interpretation,type) + for(element : elementsOfClass) { + elements += element + element2Classes.putOrAddToSet(element,clazz) + } + } + + val element2Object = new HashMap + for(element: elements) { + val clazz = element.lookup(element2Classes).mostConcreteType + val eobject = clazz.EPackage.EFactoryInstance.create(clazz) + element2Object.put(element,eobject) + } + + val allReferences = ecore2Logic.allReferencesInScope(forwardTrace) + for(referenceType : allReferences) { + for(sourceElement : elements) { + val sourceObject = sourceElement.lookup(element2Object) + if(sourceObject.eClass.isSuperTypeOf(referenceType.EContainingClass)) { + for(targetElement: elements) { + val targetObject = targetElement.lookup(element2Object) + if(targetObject.eClass.isSuperTypeOf(referenceType.EReferenceType)) { + val expression = ecore2Logic.IsInReference(forwardTrace,sourceElement,targetElement,referenceType) + val linkExist = interpretation.evalAsBool(expression) + if(linkExist) { + if(referenceType.isMany) { + val list = sourceObject.eGet(referenceType) as List + list+= targetObject + } else { + sourceObject.eSet(referenceType,targetObject) + } + } + } + } + } + } + } + + /// Attributes + + return element2Object.values.root + } + + def mostConcreteType(Set classes) { + for(candidate : classes) { + val subtypeOfAll = classes.forall[it.isSuperTypeOf(candidate)] + if(subtypeOfAll) { + return candidate + } + } + throw new AssertionError("Object has no unique concrete type!") + } + + def getRoot(Collection objects) { + objects.filter[eContainer === null].head + } +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf