diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/ContainmentIndexer.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/ContainmentIndexer.xtend | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/ContainmentIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/ContainmentIndexer.xtend new file mode 100644 index 00000000..02e58c9b --- /dev/null +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/ContainmentIndexer.xtend | |||
@@ -0,0 +1,41 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation | ||
4 | import java.util.Collection | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
6 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery | ||
7 | import java.util.Map | ||
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality | ||
9 | |||
10 | class ContainmentIndexer { | ||
11 | val PatternGenerator base; | ||
12 | |||
13 | new(PatternGenerator base) { | ||
14 | this.base = base | ||
15 | } | ||
16 | |||
17 | def isContainmentRelation(Relation relation, LogicProblem problem) { | ||
18 | problem.containmentHierarchies.exists[it.containmentRelations.contains(relation)] | ||
19 | } | ||
20 | |||
21 | def transformContainment(LogicProblem problem, Collection<Relation> relations,Map<String,PQuery> fqn2PQuery) | ||
22 | ''' | ||
23 | private pattern mustContains2(source: DefinedElement, target: DefinedElement) { | ||
24 | find mustContains4(_,_,source,target); | ||
25 | } | ||
26 | |||
27 | private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, | ||
28 | source: DefinedElement, target: DefinedElement) | ||
29 | «FOR reference : relations.filter[isContainmentRelation(problem)] SEPARATOR 'or\n'» | ||
30 | { «base.referRelation(reference,"source","target",Modality.MUST,fqn2PQuery)» } | ||
31 | «ENDFOR» | ||
32 | |||
33 | private pattern mustTransitiveContains(source,target) { | ||
34 | find mustContains2+(source,target); | ||
35 | } | ||
36 | ''' | ||
37 | def referMustContaint(String source, String target) | ||
38 | '''find mustContains4(problem,interpretation,«source»,«target»);''' | ||
39 | def referTransitiveMustContains(String source, String target) | ||
40 | '''find mustTransitiveContains(source,target);''' | ||
41 | } | ||