diff options
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.xtend | 53 |
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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
4 | import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransformedViatraWellformednessConstraint | ||
5 | import java.util.Map | ||
6 | import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery | ||
7 | |||
8 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.lookup | ||
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDefinition | ||
10 | import java.util.LinkedHashMap | ||
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality | ||
12 | |||
13 | class 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 | } | ||