aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java')
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java
new file mode 100644
index 00000000..6e6a78d2
--- /dev/null
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java
@@ -0,0 +1,37 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.dse.propagation.impl.rule;
7
8import tools.refinery.store.dse.propagation.PropagationResult;
9import tools.refinery.store.dse.transition.Rule;
10import tools.refinery.store.dse.transition.actions.BoundAction;
11import tools.refinery.store.model.Model;
12import tools.refinery.store.query.ModelQueryAdapter;
13import tools.refinery.store.query.resultset.ResultSet;
14
15class BoundPropagationRule {
16 private final ResultSet<Boolean> resultSet;
17 private final BoundAction action;
18
19 public BoundPropagationRule(Model model, Rule rule) {
20 resultSet = model.getAdapter(ModelQueryAdapter.class).getResultSet(rule.getPrecondition());
21 action = rule.createAction(model);
22 }
23
24 public PropagationResult fireAll() {
25 if (resultSet.size() == 0) {
26 return PropagationResult.UNCHANGED;
27 }
28 var cursor = resultSet.getAll();
29 while (cursor.move()) {
30 var result = action.fire(cursor.getKey());
31 if (!result) {
32 return PropagationResult.REJECTED;
33 }
34 }
35 return PropagationResult.PROPAGATED;
36 }
37}