aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EEnumMapper.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EEnumMapper.xtend')
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EEnumMapper.xtend60
1 files changed, 60 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EEnumMapper.xtend b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EEnumMapper.xtend
new file mode 100644
index 00000000..eb7e9e44
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EEnumMapper.xtend
@@ -0,0 +1,60 @@
1package hu.bme.mit.inf.dslreasoner.ecore2logic
2
3import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
8import java.util.ArrayList
9import java.util.HashMap
10import java.util.Map
11import org.eclipse.emf.common.util.Enumerator
12import org.eclipse.emf.ecore.EEnum
13
14import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
15
16interface EEnumMapper {
17 def void transformEEnums(Ecore2Logic_Trace trace, LogicProblem problem, Iterable<EEnum> enums,Ecore2LogicConfiguration config)
18 def Type TypeofEEnum(Ecore2Logic_Trace trace, EEnum type)
19 def TermDescription Literal(Ecore2Logic_Trace trace, Enumerator literal)
20}
21
22class EEnumMapper_PredefinedClasses_Trace implements Trace<EEnumMapper_PredefinedClasses>{
23 public var Map<EEnum, Type> enums
24
25 public var Map<Enumerator,DefinedElement> literals
26}
27
28class EEnumMapper_PredefinedClasses implements EEnumMapper {
29 val extension LogicProblemBuilder builder = new LogicProblemBuilder
30
31 override transformEEnums(Ecore2Logic_Trace trace, LogicProblem problem, Iterable<EEnum> enums, Ecore2LogicConfiguration config) {
32 val enumTrace = new EEnumMapper_PredefinedClasses_Trace
33 trace.enumMapperTrace = enumTrace
34 enumTrace.enums = new HashMap
35 enumTrace.literals = new HashMap
36
37 for(enum : enums) {
38 val l = new ArrayList<DefinedElement>(enum.ELiterals.size)
39 for(literal : enum.ELiterals.map[instance]) {
40 val element = Element('''«literal.name» «enum.name»''')
41 l+=element
42 enumTrace.literals.put(literal,element)
43 }
44 val type = TypeDefinition('''enum «enum.name»''',false,l)
45 problem.add(type)
46 enumTrace.enums.put(enum,type)
47 }
48
49 }
50
51 private def asTrace(Trace<? extends EEnumMapper> o) { o as EEnumMapper_PredefinedClasses_Trace }
52
53 override TypeofEEnum(Ecore2Logic_Trace trace, EEnum type) {
54 trace.enumMapperTrace.asTrace.enums.get(type)
55 }
56
57 override Literal(Ecore2Logic_Trace trace, Enumerator literal) {
58 literal.lookup(trace.enumMapperTrace.asTrace.literals)
59 }
60} \ No newline at end of file