From 6f88c4bd4e91728cea62505e893b0ce300baf7fc Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 7 Feb 2019 18:24:45 +0100 Subject: Ecore2Cft transformation --- .../transformation/ecore2cft/MappingQueries.xtend | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.xtend (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.xtend') diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.xtend new file mode 100644 index 00000000..6683b3f8 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.xtend @@ -0,0 +1,38 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft + +import com.google.common.collect.ImmutableMap +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition +import java.util.Map +import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder +import org.eclipse.viatra.query.runtime.api.GenericQueryGroup +import org.eclipse.viatra.query.runtime.api.IPatternMatch +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher + +class MappingQueries { + val Map> matchersMap + + new(TransformationDefinition transformationDefinition, ViatraQueryEngine viatraQueryEngine) { + val specificationBuilder = new SpecificationBuilder + val querySpecificationsMap = transformationDefinition.mappingDefinitions.toMap([it], [ + specificationBuilder.getOrCreateSpecification(pattern) + ]) + GenericQueryGroup.of(querySpecificationsMap.values).prepare(viatraQueryEngine) + matchersMap = ImmutableMap.copyOf(querySpecificationsMap.mapValues[getMatcher(viatraQueryEngine)]) + } + + def getMatcher(MappingDefinition mappingDefinition) { + val matcher = matchersMap.get(mappingDefinition) + if (matcher === null) { + throw new IllegalArgumentException("Unknown mapping definition: " + mappingDefinition) + } + matcher + } + + def createLookupHandler(MappingDefinition mappingDefinition, LookupDefinition lookupDefinition) { + val lookedUpMatcher = getMatcher(lookupDefinition.mapping) + new LookupHandler(mappingDefinition, lookupDefinition, lookedUpMatcher) + } +} -- cgit v1.2.3-70-g09d2