aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store/src/main/java/tools/refinery/store/query/internal/ViewUpdateTranslator.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store/src/main/java/tools/refinery/store/query/internal/ViewUpdateTranslator.java')
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/query/internal/ViewUpdateTranslator.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/subprojects/store/src/main/java/tools/refinery/store/query/internal/ViewUpdateTranslator.java b/subprojects/store/src/main/java/tools/refinery/store/query/internal/ViewUpdateTranslator.java
new file mode 100644
index 00000000..1c210c5f
--- /dev/null
+++ b/subprojects/store/src/main/java/tools/refinery/store/query/internal/ViewUpdateTranslator.java
@@ -0,0 +1,57 @@
1package tools.refinery.store.query.internal;
2
3import java.util.Objects;
4
5import org.eclipse.viatra.query.runtime.matchers.context.IQueryRuntimeContextListener;
6import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple;
7import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
8
9import tools.refinery.store.model.Tuple;
10import tools.refinery.store.query.view.RelationView;
11
12public class ViewUpdateTranslator<D> {
13 final RelationView<D> key;
14 final ITuple filter;
15 final IQueryRuntimeContextListener listener;
16
17 public ViewUpdateTranslator(RelationView<D> key, ITuple filter, IQueryRuntimeContextListener listener) {
18 super();
19 this.key = key;
20 this.filter = filter;
21 this.listener = listener;
22 }
23
24 public void processChange(ViewUpdate change) {
25 listener.update(key, Tuples.flatTupleOf(change.tuple()), change.isInsertion());
26 }
27
28 public Object[] isMatching(Tuple tuple, D value){
29 return isMatching(key.getWrappedKey().transform(tuple, value), filter);
30 }
31 @SuppressWarnings("squid:S1168")
32 private Object[] isMatching(Object[] tuple, ITuple filter) {
33 for(int i = 0; i<filter.getSize(); i++) {
34 final Object filterObject = filter.get(i);
35 if(filterObject != null && !filterObject.equals(tuple[i])) {
36 return null;
37 }
38 }
39 return tuple;
40 }
41
42 @Override
43 public int hashCode() {
44 return Objects.hash(filter, key, listener);
45 }
46
47 @Override
48 public boolean equals(Object obj) {
49 if (this == obj)
50 return true;
51 if (!(obj instanceof ViewUpdateTranslator))
52 return false;
53 ViewUpdateTranslator<?> other = (ViewUpdateTranslator<?>) obj;
54 return Objects.equals(filter, other.filter) && Objects.equals(key, other.key)
55 && Objects.equals(listener, other.listener);
56 }
57}