diff options
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.xtend | 60 |
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 @@ | |||
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.DefinedElement | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TermDescription | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
7 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
8 | import java.util.ArrayList | ||
9 | import java.util.HashMap | ||
10 | import java.util.Map | ||
11 | import org.eclipse.emf.common.util.Enumerator | ||
12 | import org.eclipse.emf.ecore.EEnum | ||
13 | |||
14 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
15 | |||
16 | interface 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 | |||
22 | class EEnumMapper_PredefinedClasses_Trace implements Trace<EEnumMapper_PredefinedClasses>{ | ||
23 | public var Map<EEnum, Type> enums | ||
24 | |||
25 | public var Map<Enumerator,DefinedElement> literals | ||
26 | } | ||
27 | |||
28 | class 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 | ||