From fd3f01f4240ff13f7877784b2f5417031f7e7da6 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Thu, 11 Oct 2018 19:22:18 +0200 Subject: Attributes are filled in instance models --- .../inf/dslreasoner/logic2ecore/Logic2Ecore.xtend | 64 +++++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) (limited to 'Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/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 index 00239935..c7e14362 100644 --- 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 @@ -14,9 +14,15 @@ import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EStructuralFeature import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* +import org.eclipse.emf.ecore.EEnum +import org.eclipse.emf.ecore.EDataType +import org.eclipse.emf.ecore.EcorePackage +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription +import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder +import java.util.Map class Logic2Ecore { - private val extension LogicStructureBuilder structureBuilder = new LogicStructureBuilder + val extension LogicStructureBuilder structureBuilder = new LogicStructureBuilder val Ecore2Logic ecore2Logic; new (Ecore2Logic ecore2Logic) { @@ -70,11 +76,65 @@ class Logic2Ecore { } } - /// + Attributes + val allAttributes = ecore2Logic.allAttributesInScope(forwardTrace) + for(attributeType : allAttributes) { + if(attributeType.canSetFeature) { + for(sourceElement : elements) { + val sourceObject = sourceElement.lookup(element2Object) + if(attributeType.EContainingClass.isSuperTypeOf(sourceObject.eClass)) { + val allElementsOfTargetDatatype = getAllElementsOfDatatype(attributeType.EAttributeType,forwardTrace,interpretation) + for(l : allElementsOfTargetDatatype.entrySet) { + val expression = ecore2Logic.IsAttributeValue(forwardTrace,sourceElement,l.value,attributeType) + val linkExist = interpretation.evalAsBool(expression) + if(linkExist) { + if(attributeType.isMany) { + val list = sourceObject.eGet(attributeType) as List + list += l.key + } else { + sourceObject.eSet(attributeType,l) + } + } + } + } + } + } + } return element2Object.values.root } + +// if(attributeType.EAttributeType.isSuperTypeOf(targetObject.eClass)) { +// val expression = ecore2Logic.IsAttributeValue(forwardTrace,sourceElement,targetElement,attributeType) +// val linkExist = interpretation.evalAsBool(expression) +// if(linkExist) { +// if(attributeType.isMany) { +// val list = sourceObject.eGet(attributeType) as List +// list+= targetObject +// } else { +// sourceObject.eSet(referenceType,targetObject) +// } +// } +// } + + protected dispatch def Map getAllElementsOfDatatype(EEnum type, Ecore2Logic_Trace forwardTrace, LogicModelInterpretation interpretation) { + ecore2Logic.allLiteralsInScope(forwardTrace).toInvertedMap[ecore2Logic.Literal(forwardTrace,it)] + } + + protected dispatch def Map getAllElementsOfDatatype(EDataType primitive, Ecore2Logic_Trace forwardTrace, LogicModelInterpretation interpretation) { + val extension LogicProblemBuilder b = new LogicProblemBuilder + if(primitive === EcorePackage.eINSTANCE.EInt || primitive === EcorePackage.eINSTANCE.EShort || primitive === EcorePackage.eINSTANCE.ELong) { + interpretation.allIntegersInStructure.toInvertedMap[it.asTerm] + } else if(primitive === EcorePackage.eINSTANCE.EDouble || primitive === EcorePackage.eINSTANCE.EFloat) { + interpretation.allRealsInStructure.toInvertedMap[it.asTerm] + } else if(primitive === EcorePackage.eINSTANCE.EString) { + interpretation.allStringsInStructure.toInvertedMap[it.asTerm] + } else if(primitive === EcorePackage.eINSTANCE.EBoolean) { + return #[false,true].toInvertedMap[it.asTerm] + } + } + + private def canSetFeature(EStructuralFeature feature) { feature.changeable && !feature.derived } -- cgit v1.2.3-54-g00ecf