aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/InvalidIndexer.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/InvalidIndexer.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/InvalidIndexer.xtend53
1 files changed, 53 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/InvalidIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/InvalidIndexer.xtend
new file mode 100644
index 00000000..d9ede2a8
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/InvalidIndexer.xtend
@@ -0,0 +1,53 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns
2
3import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
4import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransformedViatraWellformednessConstraint
5import java.util.Map
6import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery
7
8import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.lookup
9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDefinition
10import java.util.LinkedHashMap
11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality
12
13class InvalidIndexer {
14 val PatternGenerator patternGenerator
15
16 public new(PatternGenerator patternGenerator) {
17 this.patternGenerator = patternGenerator
18 }
19
20 public def getWFQueryName(RelationDefinition query) '''invalidWFQuery_«patternGenerator.canonizeName(query.name)»'''
21
22 public def generateInvalidatedByWfQueries(LogicProblem problem, Map<String,PQuery> fqn2PQuery) {
23 val wfQueries = problem.assertions.map[it.annotations]
24 .flatten
25 .filter(TransformedViatraWellformednessConstraint)
26 .map[it.query]
27 '''
28 «FOR wfQuery: wfQueries»
29 pattern invalidatedBy_«patternGenerator.canonizeName(wfQuery.target.name)»(problem:LogicProblem, interpretation:PartialInterpretation,
30 «FOR param : wfQuery.patternFullyQualifiedName.lookup(fqn2PQuery).parameters SEPARATOR ', '»var_«param.name»«ENDFOR»)
31 {
32 «patternGenerator.relationDefinitionIndexer.referPattern(
33 wfQuery.patternFullyQualifiedName.lookup(fqn2PQuery),
34 wfQuery.patternFullyQualifiedName.lookup(fqn2PQuery).parameters.map['''var_«it.name»'''],
35 Modality.MUST,
36 true,false)»
37 }
38 «ENDFOR»
39 '''
40 }
41
42 public def getInvalidateByWfQueryNames(LogicProblem problem) {
43 val wfQueries = problem.assertions.map[it.annotations]
44 .flatten
45 .filter(TransformedViatraWellformednessConstraint)
46 .map[it.query]
47 val map = new LinkedHashMap
48 for(wfQuery : wfQueries) {
49 map.put(wfQuery.target, '''invalidatedBy_«patternGenerator.canonizeName(wfQuery.target.name)»''')
50 }
51 return map
52 }
53}