diff options
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend new file mode 100644 index 00000000..3949749b --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend | |||
@@ -0,0 +1,53 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.ecore2logic | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
6 | import java.util.Map | ||
7 | import org.eclipse.emf.ecore.EClass | ||
8 | import java.util.HashMap | ||
9 | |||
10 | interface EClassMapper { | ||
11 | def void transformEClasses(Ecore2Logic_Trace trace, LogicProblem problem, Iterable<EClass> classes, int numberOfObjects, EcoreMetamodelDescriptor metamodelDescriptor) | ||
12 | def Iterable<EClass> allClassesInScope(Ecore2Logic_Trace trace) | ||
13 | def Type TypeofEClass(Ecore2Logic_Trace trace, EClass type) | ||
14 | } | ||
15 | |||
16 | class EClassMapper_AllElementAsObject_Trace implements Trace<EClassMapper_AllElementAsObject>{ | ||
17 | public var Map<EClass, Type> typeMap = new HashMap; | ||
18 | } | ||
19 | |||
20 | class EClassMapper_AllElementAsObject implements EClassMapper{ | ||
21 | val extension LogicProblemBuilder builder = new LogicProblemBuilder | ||
22 | |||
23 | override transformEClasses(Ecore2Logic_Trace trace, LogicProblem problem, | ||
24 | Iterable<EClass> classes, int numberOfObjects, EcoreMetamodelDescriptor metamodelDescriptor | ||
25 | ) { | ||
26 | val classMapperTrace = new EClassMapper_AllElementAsObject_Trace | ||
27 | trace.classMapperTrace = classMapperTrace | ||
28 | for(c:classes) { | ||
29 | val logicType = problem.add(TypeDeclaration('''class «c.name»''',c.isAbstract || c.isInterface)) | ||
30 | classMapperTrace.typeMap.put(c,logicType) | ||
31 | } | ||
32 | for(c:classes) { | ||
33 | for(s : c.ESuperTypes) { | ||
34 | Supertype(classMapperTrace.typeMap.get(c),classMapperTrace.typeMap.get(s)) | ||
35 | } | ||
36 | } | ||
37 | } | ||
38 | |||
39 | def asTrace(Trace<? extends EClassMapper> o) { o as EClassMapper_AllElementAsObject_Trace } | ||
40 | |||
41 | override TypeofEClass(Ecore2Logic_Trace trace, EClass type) { | ||
42 | val typeMap = trace.classMapperTrace.asTrace.typeMap | ||
43 | if(typeMap.containsKey(type)) { | ||
44 | typeMap.get(type) | ||
45 | } else { | ||
46 | throw new IllegalArgumentException('''Class «type.name» is not translated to logic!''') | ||
47 | } | ||
48 | } | ||
49 | |||
50 | override allClassesInScope(Ecore2Logic_Trace trace) { | ||
51 | trace.classMapperTrace.asTrace.typeMap.keySet | ||
52 | } | ||
53 | } | ||