diff options
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.java | 14 |
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 | |||
5 | import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; | 5 | import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; |
6 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | 6 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; |
7 | import tools.refinery.store.model.InterpretationListener; | 7 | import tools.refinery.store.model.InterpretationListener; |
8 | import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl; | ||
8 | import tools.refinery.store.query.view.RelationView; | 9 | import tools.refinery.store.query.view.RelationView; |
9 | import tools.refinery.store.query.view.TuplePreservingRelationView; | 10 | import tools.refinery.store.query.view.TuplePreservingRelationView; |
10 | 11 | ||
@@ -12,8 +13,13 @@ import java.util.ArrayList; | |||
12 | import java.util.List; | 13 | import java.util.List; |
13 | 14 | ||
14 | public abstract class RelationViewUpdateListener<T> implements InterpretationListener<T> { | 15 | public 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 | } |