From 60f01f46ba232ed6416054f0a6115cb2a9b70b4e Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sat, 10 Jun 2017 19:05:05 +0200 Subject: Migrating Additional projects --- .../inf/dslreasoner/ecore2logic/EClassMapper.xtend | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend (limited to 'Framework/hu.bme.mit.inf.dslreasoner.ecore2logic/src/hu/bme/mit/inf/dslreasoner/ecore2logic/EClassMapper.xtend') 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 @@ +package hu.bme.mit.inf.dslreasoner.ecore2logic + +import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem +import java.util.Map +import org.eclipse.emf.ecore.EClass +import java.util.HashMap + +interface EClassMapper { + def void transformEClasses(Ecore2Logic_Trace trace, LogicProblem problem, Iterable classes, int numberOfObjects, EcoreMetamodelDescriptor metamodelDescriptor) + def Iterable allClassesInScope(Ecore2Logic_Trace trace) + def Type TypeofEClass(Ecore2Logic_Trace trace, EClass type) +} + +class EClassMapper_AllElementAsObject_Trace implements Trace{ + public var Map typeMap = new HashMap; +} + +class EClassMapper_AllElementAsObject implements EClassMapper{ + val extension LogicProblemBuilder builder = new LogicProblemBuilder + + override transformEClasses(Ecore2Logic_Trace trace, LogicProblem problem, + Iterable classes, int numberOfObjects, EcoreMetamodelDescriptor metamodelDescriptor + ) { + val classMapperTrace = new EClassMapper_AllElementAsObject_Trace + trace.classMapperTrace = classMapperTrace + for(c:classes) { + val logicType = problem.add(TypeDeclaration('''class «c.name»''',c.isAbstract || c.isInterface)) + classMapperTrace.typeMap.put(c,logicType) + } + for(c:classes) { + for(s : c.ESuperTypes) { + Supertype(classMapperTrace.typeMap.get(c),classMapperTrace.typeMap.get(s)) + } + } + } + + def asTrace(Trace o) { o as EClassMapper_AllElementAsObject_Trace } + + override TypeofEClass(Ecore2Logic_Trace trace, EClass type) { + val typeMap = trace.classMapperTrace.asTrace.typeMap + if(typeMap.containsKey(type)) { + typeMap.get(type) + } else { + throw new IllegalArgumentException('''Class «type.name» is not translated to logic!''') + } + } + + override allClassesInScope(Ecore2Logic_Trace trace) { + trace.classMapperTrace.asTrace.typeMap.keySet + } +} -- cgit v1.2.3-70-g09d2