aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.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/cardinality/MultiplicityGoalConstraintCalculator.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend57
1 files changed, 57 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
new file mode 100644
index 00000000..273e0ac3
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
@@ -0,0 +1,57 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality
2
3import org.eclipse.emf.common.notify.Notifier
4import org.eclipse.viatra.query.runtime.api.IQuerySpecification
5import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine
6import org.eclipse.viatra.query.runtime.emf.EMFScope
7
8class MultiplicityGoalConstraintCalculator {
9 val String targetRelationName
10 val IQuerySpecification<?> querySpecification
11 var MultiplicityCalculator<?> calculator
12 val boolean containment
13 val int lowerBound
14 val int cost
15
16 new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int lowerBound, int cost) {
17 if (lowerBound <= 0) {
18 throw new IllegalArgumentException("Invalid lower bound: " + lowerBound)
19 }
20 this.targetRelationName = targetRelationName
21 this.querySpecification = querySpecification
22 this.calculator = null
23 this.containment = containment
24 this.lowerBound = lowerBound
25 this.cost = cost
26 }
27
28 new(MultiplicityGoalConstraintCalculator other) {
29 this.targetRelationName = other.targetRelationName
30 this.querySpecification = other.querySpecification
31 this.calculator = null
32 this.containment = other.containment
33 this.lowerBound = other.lowerBound
34 this.cost = other.cost
35 }
36
37 def getName() {
38 targetRelationName
39 }
40
41 def isContainment() {
42 return containment
43 }
44
45 def init(Notifier notifier) {
46 val engine = ViatraQueryEngine.on(new EMFScope(notifier))
47 val matcher = querySpecification.getMatcher(engine)
48 calculator = RemainingMultiplicityCalculator.of(matcher, lowerBound)
49 }
50
51 def calculateValue() {
52 val res = calculator.multiplicity
53// if(res>0)
54// println(targetRelationName+ " all missing multiplicities: "+res + "*"+cost+"="+res*cost)
55 return res*cost
56 }
57}