diff options
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend | 98 |
1 files changed, 98 insertions, 0 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 new file mode 100644 index 00000000..cae489e3 --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend | |||
@@ -0,0 +1,98 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.ecore2logic | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
4 | import java.util.List | ||
5 | import org.eclipse.emf.ecore.EAttribute | ||
6 | import org.eclipse.emf.ecore.EClass | ||
7 | import org.eclipse.emf.ecore.EEnum | ||
8 | import org.eclipse.emf.ecore.EEnumLiteral | ||
9 | import org.eclipse.emf.ecore.EReference | ||
10 | import org.eclipse.xtend.lib.annotations.Data | ||
11 | import org.eclipse.xtend.lib.annotations.Delegate | ||
12 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput | ||
13 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder | ||
14 | import java.util.Set | ||
15 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.ContainmentHierarchy | ||
16 | |||
17 | @Data class EcoreMetamodelDescriptor { | ||
18 | val List<EClass> classes; | ||
19 | val Set<EClass> concretised; | ||
20 | val boolean isEObjectConcretised; | ||
21 | val List<EEnum> enums; | ||
22 | val List<EEnumLiteral> literals; | ||
23 | val List<EReference> references; | ||
24 | val List<EAttribute> attributes; | ||
25 | |||
26 | def isConcretised(EClass clazz) {concretised.contains(clazz)} | ||
27 | } | ||
28 | |||
29 | interface Trace<Mapper> {} | ||
30 | |||
31 | class Ecore2Logic_Trace implements Trace<Ecore2Logic> { | ||
32 | public var ContainmentHierarchy containmentHierarchy; | ||
33 | public var Trace<? extends EClassMapper> classMapperTrace | ||
34 | public var Trace<? extends EEnumMapper> enumMapperTrace | ||
35 | public var Trace<? extends EReferenceMapper> referenceMapperTrace | ||
36 | public var Trace<? extends ContainmentMapper> containmentMapperTrace | ||
37 | public var Trace<? extends EAttributeMapper> attributeMapperTrace | ||
38 | } | ||
39 | |||
40 | class Ecore2LogicConfiguration { | ||
41 | var public boolean singleRoot = true | ||
42 | var public int numberOfObjects = -1 | ||
43 | public static val Undefined = -1 | ||
44 | } | ||
45 | |||
46 | class Ecore2LogicScope { | ||
47 | public static val int Unlimited = -1 | ||
48 | public var numberOfObjects = Unlimited | ||
49 | } | ||
50 | |||
51 | class Ecore2Logic implements EClassMapper, EEnumMapper, EReferenceMapper, ContainmentMapper, EAttributeMapper { | ||
52 | @Delegate protected val EClassMapper classMapper | ||
53 | @Delegate protected val EEnumMapper enumMapper | ||
54 | @Delegate protected val EReferenceMapper referenceMapper | ||
55 | @Delegate protected val ContainmentMapper containmentMapper | ||
56 | @Delegate protected val EAttributeMapper attributeMapper | ||
57 | |||
58 | public new() { | ||
59 | this.classMapper = new EClassMapper_AllElementAsObject | ||
60 | this.enumMapper = new EEnumMapper_PredefinedClasses | ||
61 | this.referenceMapper = new EReferenceMapper_RelationsOverTypes(this.classMapper) | ||
62 | this.containmentMapper = new ContainmentMapper_ReferenceConjuction(this.classMapper, this.referenceMapper,0) | ||
63 | this.attributeMapper = new EAttributeMapper_RelationsOverTypes(this.classMapper, this.enumMapper) | ||
64 | } | ||
65 | |||
66 | public new( | ||
67 | EClassMapper classMapper, | ||
68 | EEnumMapper enumMapper, | ||
69 | EReferenceMapper referenceMapper, | ||
70 | ContainmentMapper containmentMapper, | ||
71 | EAttributeMapper attributeMapper) | ||
72 | { | ||
73 | if(classMapper === null || enumMapper === null || referenceMapper === null || containmentMapper === null || | ||
74 | attributeMapper === null) { | ||
75 | throw new IllegalArgumentException('''The mappers should not be null!''') | ||
76 | } | ||
77 | |||
78 | this.classMapper = classMapper | ||
79 | this.enumMapper = enumMapper | ||
80 | this.referenceMapper = referenceMapper | ||
81 | this.containmentMapper = containmentMapper | ||
82 | this.attributeMapper = attributeMapper | ||
83 | } | ||
84 | |||
85 | def public TracedOutput<LogicProblem,Ecore2Logic_Trace> transformMetamodel(EcoreMetamodelDescriptor metamodel, Ecore2LogicConfiguration config) { | ||
86 | |||
87 | |||
88 | val Ecore2Logic_Trace trace = new Ecore2Logic_Trace | ||
89 | val LogicProblem problem = (new LogicProblemBuilder).createProblem | ||
90 | transformEClasses(trace,problem,metamodel.classes,config.numberOfObjects,metamodel) | ||
91 | transformEEnums(trace,problem,metamodel.enums,config) | ||
92 | transformEReferences(trace,problem,metamodel.references) | ||
93 | transformContainment(trace,problem,metamodel.references, config.singleRoot) | ||
94 | transformEAttributes(trace,problem,metamodel.attributes) | ||
95 | |||
96 | return new TracedOutput(problem,trace) | ||
97 | } | ||
98 | } | ||