aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/Ecore2Logic.xtend
diff options
context:
space:
mode:
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.xtend98
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 @@
1package hu.bme.mit.inf.dslreasoner.ecore2logic
2
3import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
4import java.util.List
5import org.eclipse.emf.ecore.EAttribute
6import org.eclipse.emf.ecore.EClass
7import org.eclipse.emf.ecore.EEnum
8import org.eclipse.emf.ecore.EEnumLiteral
9import org.eclipse.emf.ecore.EReference
10import org.eclipse.xtend.lib.annotations.Data
11import 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
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
29interface Trace<Mapper> {}
30
31class 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
40class Ecore2LogicConfiguration {
41 var public boolean singleRoot = true
42 var public int numberOfObjects = -1
43 public static val Undefined = -1
44}
45
46class Ecore2LogicScope {
47 public static val int Unlimited = -1
48 public var numberOfObjects = Unlimited
49}
50
51class 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}