aboutsummaryrefslogtreecommitdiffstats
path: root/Framework
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-20 02:07:37 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-20 02:07:37 +0200
commiteb081453e93e6e30c0b6bb92400275529ed3273b (patch)
treeaba071677812e49eb101a429f01f28aa4f58a226 /Framework
parentFIx Boolean export to gml (diff)
downloadVIATRA-Generator-eb081453e93e6e30c0b6bb92400275529ed3273b.tar.gz
VIATRA-Generator-eb081453e93e6e30c0b6bb92400275529ed3273b.tar.zst
VIATRA-Generator-eb081453e93e6e30c0b6bb92400275529ed3273b.zip
Fix attribute export to xmi
Diffstat (limited to 'Framework')
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend10
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend76
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic2ecore/src/hu/bme/mit/inf/dslreasoner/logic2ecore/Logic2Ecore.xtend49
3 files changed, 79 insertions, 56 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend
index cae489e3..85b488eb 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend
@@ -1,7 +1,13 @@
1package hu.bme.mit.inf.dslreasoner.ecore2logic 1package hu.bme.mit.inf.dslreasoner.ecore2logic
2 2
3import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
4import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Term
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.ContainmentHierarchy
3import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 8import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
4import java.util.List 9import java.util.List
10import java.util.Set
5import org.eclipse.emf.ecore.EAttribute 11import org.eclipse.emf.ecore.EAttribute
6import org.eclipse.emf.ecore.EClass 12import org.eclipse.emf.ecore.EClass
7import org.eclipse.emf.ecore.EEnum 13import org.eclipse.emf.ecore.EEnum
@@ -9,10 +15,6 @@ import org.eclipse.emf.ecore.EEnumLiteral
9import org.eclipse.emf.ecore.EReference 15import org.eclipse.emf.ecore.EReference
10import org.eclipse.xtend.lib.annotations.Data 16import org.eclipse.xtend.lib.annotations.Data
11import org.eclipse.xtend.lib.annotations.Delegate 17import org.eclipse.xtend.lib.annotations.Delegate
12import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput
13import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
14import java.util.Set
15import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.ContainmentHierarchy
16 18
17@Data class EcoreMetamodelDescriptor { 19@Data class EcoreMetamodelDescriptor {
18 val List<EClass> classes; 20 val List<EClass> classes;
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend
index 905859eb..cdcbb48a 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend
@@ -3,22 +3,27 @@ package hu.bme.mit.inf.dslreasoner.logic.model.builder
3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration 3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement 4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration 5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration 10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration
9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition 11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
12import java.math.BigDecimal
10import java.util.List 13import java.util.List
14import java.util.Map
15import java.util.SortedSet
16import java.util.TreeSet
11 17
12import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 18import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
13import java.util.SortedSet
14import java.math.BigDecimal
15 19
16interface LogicModelInterpretation{ 20interface LogicModelInterpretation {
17 21
18 /** 22 /**
19 * Returns the elements of a type. 23 * Returns the elements of a type.
20 */ 24 */
21 def List<DefinedElement> getElements(Type type) 25 def List<DefinedElement> getElements(Type type)
26
22 /** 27 /**
23 * Returns the interpretation of a function. The parameters and the return values are encoded to primitive java objects defined by the following table: 28 * Returns the interpretation of a function. The parameters and the return values are encoded to primitive java objects defined by the following table:
24 * <p><table> 29 * <p><table>
@@ -34,6 +39,7 @@ interface LogicModelInterpretation{
34 * @return The result of the function call encoded as defined in the table. 39 * @return The result of the function call encoded as defined in the table.
35 */ 40 */
36 def Object getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) 41 def Object getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution)
42
37 /** 43 /**
38 * Returns the interpretation of a relation. The parameters are encoded to primitive java objects defined by the following table: 44 * Returns the interpretation of a relation. The parameters are encoded to primitive java objects defined by the following table:
39 * <p><table> 45 * <p><table>
@@ -49,6 +55,7 @@ interface LogicModelInterpretation{
49 * @return If the parameter tuple is in the relation. 55 * @return If the parameter tuple is in the relation.
50 */ 56 */
51 def boolean getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) 57 def boolean getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution)
58
52 /** 59 /**
53 * Returns the interpretation of a constant. The value is encoded to primitive java objects defined by the following table: 60 * Returns the interpretation of a constant. The value is encoded to primitive java objects defined by the following table:
54 * <p><table> 61 * <p><table>
@@ -63,60 +70,89 @@ interface LogicModelInterpretation{
63 * @return The value of the constant encoded as specified in the table. 70 * @return The value of the constant encoded as specified in the table.
64 */ 71 */
65 def Object getInterpretation(ConstantDeclaration constant) 72 def Object getInterpretation(ConstantDeclaration constant)
66 73
67 /** 74 /**
68 * Returns all integers relevant to the logic structure. Not all integer is necessarily used. 75 * Returns all integers relevant to the logic structure. Not all integer is necessarily used.
69 */ 76 */
70 def SortedSet<Integer> getAllIntegersInStructure() 77 def SortedSet<Integer> getAllIntegersInStructure()
78
79 def Map<TermDescription, Integer> getAllIntegersWithInterpretation() {
80 allIntegersInStructure.toMap [ integer |
81 (LogiclanguageFactory.eINSTANCE.createIntLiteral => [value = integer]) as TermDescription
82 ]
83 }
84
71 /** 85 /**
72 * Returns all real numbers relevant to the logic structure. Not all integer is necessarily used. 86 * Returns all real numbers relevant to the logic structure. Not all integer is necessarily used.
73 */ 87 */
74 def SortedSet<BigDecimal> getAllRealsInStructure() 88 def SortedSet<BigDecimal> getAllRealsInStructure()
75 /** 89
90 def Map<TermDescription, BigDecimal> getAllRealsWithInterpretation() {
91 allRealsInStructure.toMap [ real |
92 (LogiclanguageFactory.eINSTANCE.createRealLiteral => [value = real]) as TermDescription
93 ]
94 }
95
96 /**
76 * Returns all string values relevant to the logic structure. Not all integer is necessarily used. 97 * Returns all string values relevant to the logic structure. Not all integer is necessarily used.
77 */ 98 */
78 def SortedSet<String> getAllStringsInStructure() 99 def SortedSet<String> getAllStringsInStructure()
100
101 def Map<TermDescription, String> getAllStringsWithInterpretation() {
102 allStringsInStructure.toMap [ string |
103 (LogiclanguageFactory.eINSTANCE.createStringLiteral => [value = string]) as TermDescription
104 ]
105 }
106
107 def SortedSet<Boolean> getAllBooleansInStructure() {
108 new TreeSet(#{true, false})
109 }
110
111 def Map<TermDescription, Boolean> getAllBooleansWithInterpretation() {
112 allBooleansInStructure.toMap [ bool |
113 (LogiclanguageFactory.eINSTANCE.createBoolLiteral => [value = bool]) as TermDescription
114 ]
115 }
79} 116}
80 117
81class Uninterpreted implements LogicModelInterpretation { 118class Uninterpreted implements LogicModelInterpretation {
82 /*private val static unknownBecauseUninterpreted = LogiclanguageFactory.eINSTANCE.createUnknownBecauseUninterpreted 119 /*private val static unknownBecauseUninterpreted = LogiclanguageFactory.eINSTANCE.createUnknownBecauseUninterpreted
83 public def static getUnknownBecauseUninterpreted() {return Uninterpreted.unknownBecauseUninterpreted}*/ 120 public def static getUnknownBecauseUninterpreted() {return Uninterpreted.unknownBecauseUninterpreted}*/
84
85 override getElements(Type type) { 121 override getElements(Type type) {
86 throw new UnsupportedOperationException("The interpteration is unknown.") 122 throw new UnsupportedOperationException("The interpteration is unknown.")
87 } 123 }
88 124
89 def getKnownElements(Type type) { 125 def getKnownElements(Type type) {
90 val allSubtypes = type.transitiveClosureStar[it.subtypes] 126 val allSubtypes = type.transitiveClosureStar[it.subtypes]
91 return allSubtypes.filter(TypeDefinition).map[elements].flatten.toList 127 return allSubtypes.filter(TypeDefinition).map[elements].flatten.toList
92 } 128 }
93 129
94 def allElementsAreInterpreted(Type type) { 130 def allElementsAreInterpreted(Type type) {
95 val allSubtypes = type.transitiveClosureStar[it.subtypes] 131 val allSubtypes = type.transitiveClosureStar[it.subtypes]
96 return allSubtypes.exists[it instanceof TypeDeclaration] 132 return allSubtypes.exists[it instanceof TypeDeclaration]
97 } 133 }
98 134
99 override getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) { 135 override getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) {
100 throw new UnsupportedOperationException("The interpteration is unknown.") 136 throw new UnsupportedOperationException("The interpteration is unknown.")
101 } 137 }
102 138
103 override getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) { 139 override getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) {
104 throw new UnsupportedOperationException("The interpteration is unknown.") 140 throw new UnsupportedOperationException("The interpteration is unknown.")
105 } 141 }
106 142
107 override getInterpretation(ConstantDeclaration constant) { 143 override getInterpretation(ConstantDeclaration constant) {
108 throw new UnsupportedOperationException("The interpteration is unknown.") 144 throw new UnsupportedOperationException("The interpteration is unknown.")
109 } 145 }
110 146
111 override getAllIntegersInStructure() { 147 override getAllIntegersInStructure() {
112 throw new UnsupportedOperationException("The interpteration is unknown.") 148 throw new UnsupportedOperationException("The interpteration is unknown.")
113 } 149 }
114 150
115 override getAllRealsInStructure() { 151 override getAllRealsInStructure() {
116 throw new UnsupportedOperationException("The interpteration is unknown.") 152 throw new UnsupportedOperationException("The interpteration is unknown.")
117 } 153 }
118 154
119 override getAllStringsInStructure() { 155 override getAllStringsInStructure() {
120 throw new UnsupportedOperationException("The interpteration is unknown.") 156 throw new UnsupportedOperationException("The interpteration is unknown.")
121 } 157 }
122} \ No newline at end of file 158}
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 08c6b7b7..8d6b565a 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
@@ -3,25 +3,24 @@ package hu.bme.mit.inf.dslreasoner.logic2ecore
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace 4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation 5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation
6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicStructureBuilder 7import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicStructureBuilder
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription
9import java.math.BigDecimal
7import java.util.Collection 10import java.util.Collection
8import java.util.HashMap 11import java.util.HashMap
9import java.util.HashSet 12import java.util.HashSet
10import java.util.List 13import java.util.List
14import java.util.Map
11import java.util.Set 15import java.util.Set
12import org.eclipse.emf.ecore.EClass 16import org.eclipse.emf.ecore.EClass
17import org.eclipse.emf.ecore.EDataType
18import org.eclipse.emf.ecore.EEnum
13import org.eclipse.emf.ecore.EObject 19import org.eclipse.emf.ecore.EObject
14import org.eclipse.emf.ecore.EStructuralFeature 20import org.eclipse.emf.ecore.EStructuralFeature
21import org.eclipse.emf.ecore.EcorePackage
15 22
16import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 23import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
17import org.eclipse.emf.ecore.EEnum
18import org.eclipse.emf.ecore.EDataType
19import org.eclipse.emf.ecore.EcorePackage
20import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription
21import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
22import java.util.Map
23import org.eclipse.emf.ecore.EAttribute
24import java.math.BigDecimal
25 24
26class Logic2Ecore { 25class Logic2Ecore {
27 val extension LogicStructureBuilder structureBuilder = new LogicStructureBuilder 26 val extension LogicStructureBuilder structureBuilder = new LogicStructureBuilder
@@ -86,15 +85,15 @@ class Logic2Ecore {
86 if(attributeType.EContainingClass.isSuperTypeOf(sourceObject.eClass)) { 85 if(attributeType.EContainingClass.isSuperTypeOf(sourceObject.eClass)) {
87 val allElementsOfTargetDatatype = getAllElementsOfDatatype(attributeType.EAttributeType,forwardTrace,interpretation) 86 val allElementsOfTargetDatatype = getAllElementsOfDatatype(attributeType.EAttributeType,forwardTrace,interpretation)
88 for(l : allElementsOfTargetDatatype.entrySet) { 87 for(l : allElementsOfTargetDatatype.entrySet) {
89 val expression = ecore2Logic.IsAttributeValue(forwardTrace,sourceElement,l.value,attributeType) 88 val expression = ecore2Logic.IsAttributeValue(forwardTrace,sourceElement,l.key,attributeType)
90 val linkExist = interpretation.evalAsBool(expression) 89 val linkExist = interpretation.evalAsBool(expression)
91 if(linkExist) { 90 if(linkExist) {
92 if(attributeType.isMany) { 91 if(attributeType.isMany) {
93 val list = sourceObject.eGet(attributeType) as List<? super Object> 92 val list = sourceObject.eGet(attributeType) as List<? super Object>
94 list += l.key 93 list += l.value
95 } else { 94 } else {
96 try { 95 try {
97 sourceObject.eSet(attributeType,translateType(attributeType.EAttributeType,l.key)) 96 sourceObject.eSet(attributeType,translateType(attributeType.EAttributeType,l.value))
98 } catch(Exception e) { 97 } catch(Exception e) {
99 e.printStackTrace 98 e.printStackTrace
100 } 99 }
@@ -119,34 +118,20 @@ class Logic2Ecore {
119 } else return value 118 } else return value
120 } 119 }
121 120
122 121 protected dispatch def Map<? extends TermDescription, ? extends Object> getAllElementsOfDatatype(EEnum type, Ecore2Logic_Trace forwardTrace, LogicModelInterpretation interpretation) {
123// if(attributeType.EAttributeType.isSuperTypeOf(targetObject.eClass)) { 122 ecore2Logic.allLiteralsInScope(forwardTrace).toMap[ecore2Logic.Literal(forwardTrace,it)]
124// val expression = ecore2Logic.IsAttributeValue(forwardTrace,sourceElement,targetElement,attributeType)
125// val linkExist = interpretation.evalAsBool(expression)
126// if(linkExist) {
127// if(attributeType.isMany) {
128// val list = sourceObject.eGet(attributeType) as List<? super EObject>
129// list+= targetObject
130// } else {
131// sourceObject.eSet(referenceType,targetObject)
132// }
133// }
134// }
135
136 protected dispatch def Map<? extends Object, ? extends TermDescription> getAllElementsOfDatatype(EEnum type, Ecore2Logic_Trace forwardTrace, LogicModelInterpretation interpretation) {
137 ecore2Logic.allLiteralsInScope(forwardTrace).toInvertedMap[ecore2Logic.Literal(forwardTrace,it)]
138 } 123 }
139 124
140 protected dispatch def Map<? extends Object, ? extends TermDescription> getAllElementsOfDatatype(EDataType primitive, Ecore2Logic_Trace forwardTrace, LogicModelInterpretation interpretation) { 125 protected dispatch def Map<? extends TermDescription, ? extends Object> getAllElementsOfDatatype(EDataType primitive, Ecore2Logic_Trace forwardTrace, LogicModelInterpretation interpretation) {
141 val extension LogicProblemBuilder b = new LogicProblemBuilder 126 val extension LogicProblemBuilder b = new LogicProblemBuilder
142 if(primitive === EcorePackage.eINSTANCE.EInt || primitive === EcorePackage.eINSTANCE.EShort || primitive === EcorePackage.eINSTANCE.ELong) { 127 if(primitive === EcorePackage.eINSTANCE.EInt || primitive === EcorePackage.eINSTANCE.EShort || primitive === EcorePackage.eINSTANCE.ELong) {
143 interpretation.allIntegersInStructure.toInvertedMap[it.asTerm] 128 interpretation.allIntegersWithInterpretation
144 } else if(primitive === EcorePackage.eINSTANCE.EDouble || primitive === EcorePackage.eINSTANCE.EFloat) { 129 } else if(primitive === EcorePackage.eINSTANCE.EDouble || primitive === EcorePackage.eINSTANCE.EFloat) {
145 interpretation.allRealsInStructure.toInvertedMap[it.asTerm] 130 interpretation.allRealsWithInterpretation
146 } else if(primitive === EcorePackage.eINSTANCE.EString) { 131 } else if(primitive === EcorePackage.eINSTANCE.EString) {
147 interpretation.allStringsInStructure.toInvertedMap[it.asTerm] 132 interpretation.allStringsWithInterpretation
148 } else if(primitive === EcorePackage.eINSTANCE.EBoolean) { 133 } else if(primitive === EcorePackage.eINSTANCE.EBoolean) {
149 return #[false,true].toInvertedMap[it.asTerm] 134 interpretation.allBooleansWithInterpretation
150 } 135 }
151 } 136 }
152 137