aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java')
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java
index e0d44e34..bf6b4197 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java
@@ -5,6 +5,7 @@ import org.eclipse.viatra.query.runtime.matchers.context.IQueryRuntimeContextLis
5import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; 5import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple;
6import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; 6import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
7import tools.refinery.store.model.InterpretationListener; 7import tools.refinery.store.model.InterpretationListener;
8import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
8import tools.refinery.store.query.view.RelationView; 9import tools.refinery.store.query.view.RelationView;
9import tools.refinery.store.query.view.TuplePreservingRelationView; 10import tools.refinery.store.query.view.TuplePreservingRelationView;
10 11
@@ -12,8 +13,13 @@ import java.util.ArrayList;
12import java.util.List; 13import java.util.List;
13 14
14public abstract class RelationViewUpdateListener<T> implements InterpretationListener<T> { 15public abstract class RelationViewUpdateListener<T> implements InterpretationListener<T> {
16 private final ViatraModelQueryAdapterImpl adapter;
15 private final List<RelationViewFilter> filters = new ArrayList<>(); 17 private final List<RelationViewFilter> filters = new ArrayList<>();
16 18
19 protected RelationViewUpdateListener(ViatraModelQueryAdapterImpl adapter) {
20 this.adapter = adapter;
21 }
22
17 public void addFilter(IInputKey inputKey, ITuple seed, IQueryRuntimeContextListener listener) { 23 public void addFilter(IInputKey inputKey, ITuple seed, IQueryRuntimeContextListener listener) {
18 filters.add(new RelationViewFilter(inputKey, seed, listener)); 24 filters.add(new RelationViewFilter(inputKey, seed, listener));
19 } 25 }
@@ -23,6 +29,7 @@ public abstract class RelationViewUpdateListener<T> implements InterpretationLis
23 } 29 }
24 30
25 protected void processUpdate(Tuple tuple, boolean isInsertion) { 31 protected void processUpdate(Tuple tuple, boolean isInsertion) {
32 adapter.markAsPending();
26 int size = filters.size(); 33 int size = filters.size();
27 // Use a for loop instead of a for-each loop to avoid <code>Iterator</code> allocation overhead. 34 // Use a for loop instead of a for-each loop to avoid <code>Iterator</code> allocation overhead.
28 //noinspection ForLoopReplaceableByForEach 35 //noinspection ForLoopReplaceableByForEach
@@ -31,10 +38,11 @@ public abstract class RelationViewUpdateListener<T> implements InterpretationLis
31 } 38 }
32 } 39 }
33 40
34 public static <T> RelationViewUpdateListener<T> of(RelationView<T> relationView) { 41 public static <T> RelationViewUpdateListener<T> of(ViatraModelQueryAdapterImpl adapter,
42 RelationView<T> relationView) {
35 if (relationView instanceof TuplePreservingRelationView<T> tuplePreservingRelationView) { 43 if (relationView instanceof TuplePreservingRelationView<T> tuplePreservingRelationView) {
36 return new TuplePreservingRelationViewUpdateListener<>(tuplePreservingRelationView); 44 return new TuplePreservingRelationViewUpdateListener<>(adapter, tuplePreservingRelationView);
37 } 45 }
38 return new TupleChangingRelationViewUpdateListener<>(relationView); 46 return new TupleChangingRelationViewUpdateListener<>(adapter, relationView);
39 } 47 }
40} 48}