From 53deeff19ce9b777f125443504925f835d57fe21 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Fri, 22 Oct 2021 21:43:34 +0200 Subject: Viatra-specific code moved inside to QueriableModel --- .../refinery/store/query/RelationalScope.java | 35 ------------------ .../refinery/store/query/internal/DNF2PQuery.java | 2 - .../store/query/internal/QueriableModelImpl.java | 39 +++++++++++++------- .../store/query/internal/RelationalScope.java | 43 ++++++++++++++++++++++ .../tools/refinery/store/query/test/QueryTest.java | 2 +- 5 files changed, 69 insertions(+), 52 deletions(-) delete mode 100644 store/src/main/java/tools/refinery/store/query/RelationalScope.java create mode 100644 store/src/main/java/tools/refinery/store/query/internal/RelationalScope.java (limited to 'store/src') diff --git a/store/src/main/java/tools/refinery/store/query/RelationalScope.java b/store/src/main/java/tools/refinery/store/query/RelationalScope.java deleted file mode 100644 index e37fdb95..00000000 --- a/store/src/main/java/tools/refinery/store/query/RelationalScope.java +++ /dev/null @@ -1,35 +0,0 @@ -package tools.refinery.store.query; - -import java.util.Set; - -import org.apache.log4j.Logger; -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.api.scope.IEngineContext; -import org.eclipse.viatra.query.runtime.api.scope.IIndexingErrorListener; -import org.eclipse.viatra.query.runtime.api.scope.QueryScope; - -import tools.refinery.store.model.Model; -import tools.refinery.store.query.internal.ModelUpdateListener; -import tools.refinery.store.query.internal.RelationalEngineContext; -import tools.refinery.store.query.view.RelationView; - -public class RelationalScope extends QueryScope{ - private final Model model; - private final ModelUpdateListener updateListener; - - public RelationalScope(Model model, Set> relationViews) { - this.model = model; - this.updateListener = new ModelUpdateListener(relationViews); - //this.changeListener = new - } - -// public void processUpdate(RelationView relationView, Tuple key, D oldValue, D newValue) { -// updateListener.processChange(relationView, key, oldValue, newValue); -// } - - @Override - protected IEngineContext createEngineContext(ViatraQueryEngine engine, IIndexingErrorListener errorListener, - Logger logger) { - return new RelationalEngineContext(model, updateListener); - } -} diff --git a/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java b/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java index f0ac0276..7558424b 100644 --- a/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java +++ b/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.eclipse.viatra.query.runtime.api.GenericPatternMatcher; import org.eclipse.viatra.query.runtime.api.GenericQuerySpecification; import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; import org.eclipse.viatra.query.runtime.api.scope.QueryScope; @@ -27,7 +26,6 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; -import tools.refinery.store.query.RelationalScope; import tools.refinery.store.query.building.DNFAnd; import tools.refinery.store.query.building.DNFAtom; import tools.refinery.store.query.building.DNFPredicate; diff --git a/store/src/main/java/tools/refinery/store/query/internal/QueriableModelImpl.java b/store/src/main/java/tools/refinery/store/query/internal/QueriableModelImpl.java index 5b96ba74..414ef2c8 100644 --- a/store/src/main/java/tools/refinery/store/query/internal/QueriableModelImpl.java +++ b/store/src/main/java/tools/refinery/store/query/internal/QueriableModelImpl.java @@ -14,16 +14,18 @@ import org.eclipse.viatra.query.runtime.api.IQueryGroup; import tools.refinery.store.map.Cursor; import tools.refinery.store.model.Model; import tools.refinery.store.model.ModelDiffCursor; +import tools.refinery.store.model.Tuple; import tools.refinery.store.model.representation.DataRepresentation; +import tools.refinery.store.model.representation.Relation; import tools.refinery.store.query.QueriableModel; import tools.refinery.store.query.QueriableModelStore; -import tools.refinery.store.query.RelationalScope; import tools.refinery.store.query.building.DNFPredicate; public class QueriableModelImpl implements QueriableModel { protected final QueriableModelStore store; protected final Model model; - + + protected final RelationalScope scope; protected final AdvancedViatraQueryEngine engine; protected final Map predicate2Matcher; @@ -31,15 +33,11 @@ public class QueriableModelImpl implements QueriableModel { Map> predicates2PQuery) { this.store = store; this.model = model; - this.engine = initEngine(store, model); + this.scope = new RelationalScope(model, store.getViews()); + this.engine = AdvancedViatraQueryEngine.createUnmanagedEngine(scope); this.predicate2Matcher = initMatchers(engine, predicates2PQuery); } - private AdvancedViatraQueryEngine initEngine(QueriableModelStore store, Model model) { - RelationalScope scope = new RelationalScope(model, store.getViews()); - return AdvancedViatraQueryEngine.createUnmanagedEngine(scope); - } - private Map initMatchers(AdvancedViatraQueryEngine engine, Map> predicates2pQuery) { // 1. prepare group @@ -75,16 +73,30 @@ public class QueriableModelImpl implements QueriableModel { return model.getAll(representation); } + @SuppressWarnings("unchecked") @Override public V put(DataRepresentation representation, K key, V value) { - // TODO Auto-generated method stub - return null; + V oldValue = this.model.put(representation, key, value); + if(representation instanceof Relation relation) { + this.scope.processUpdate((Relation)relation, (Tuple)key, oldValue, value); + } + return oldValue; } @Override public void putAll(DataRepresentation representation, Cursor cursor) { - // TODO Auto-generated method stub - + if(representation instanceof Relation) { + @SuppressWarnings("unchecked") + Relation relation = (Relation) representation; + while(cursor.move()) { + Tuple key = (Tuple) cursor.getKey(); + V newValue = cursor.getValue(); + V oldValue = this.model.put(relation, key, newValue); + this.scope.processUpdate(relation, key, oldValue, newValue); + } + } else { + this.model.putAll(representation, cursor); + } } @Override @@ -155,8 +167,7 @@ public class QueriableModelImpl implements QueriableModel { } @Override public void flushChanges() { - // TODO Auto-generated method stub - + this.scope.flush(); } @Override diff --git a/store/src/main/java/tools/refinery/store/query/internal/RelationalScope.java b/store/src/main/java/tools/refinery/store/query/internal/RelationalScope.java new file mode 100644 index 00000000..e8d45356 --- /dev/null +++ b/store/src/main/java/tools/refinery/store/query/internal/RelationalScope.java @@ -0,0 +1,43 @@ +package tools.refinery.store.query.internal; + +import java.util.Set; + +import org.apache.log4j.Logger; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.scope.IEngineContext; +import org.eclipse.viatra.query.runtime.api.scope.IIndexingErrorListener; +import org.eclipse.viatra.query.runtime.api.scope.QueryScope; + +import tools.refinery.store.model.Model; +import tools.refinery.store.model.Tuple; +import tools.refinery.store.model.representation.Relation; +import tools.refinery.store.query.view.RelationView; + +public class RelationalScope extends QueryScope{ + private final Model model; + private final ModelUpdateListener updateListener; + + public RelationalScope(Model model, Set> relationViews) { + this.model = model; + this.updateListener = new ModelUpdateListener(relationViews); + //this.changeListener = new + } + + public void processUpdate(Relation relation, Tuple key, D oldValue, D newValue) { + updateListener.addUpdate(relation, key, oldValue, newValue); + } + + public boolean hasChange() { + return updateListener.hasChange(); + } + + public void flush() { + updateListener.flush(); + } + + @Override + protected IEngineContext createEngineContext(ViatraQueryEngine engine, IIndexingErrorListener errorListener, + Logger logger) { + return new RelationalEngineContext(model, updateListener); + } +} diff --git a/store/src/test/java/tools/refinery/store/query/test/QueryTest.java b/store/src/test/java/tools/refinery/store/query/test/QueryTest.java index beb50bf3..63714538 100644 --- a/store/src/test/java/tools/refinery/store/query/test/QueryTest.java +++ b/store/src/test/java/tools/refinery/store/query/test/QueryTest.java @@ -20,7 +20,6 @@ import tools.refinery.store.model.ModelStoreImpl; import tools.refinery.store.model.Tuple; import tools.refinery.store.model.representation.Relation; import tools.refinery.store.model.representation.TruthValue; -import tools.refinery.store.query.RelationalScope; import tools.refinery.store.query.building.DNFAnd; import tools.refinery.store.query.building.DNFPredicate; import tools.refinery.store.query.building.EquivalenceAtom; @@ -29,6 +28,7 @@ import tools.refinery.store.query.building.RelationAtom; import tools.refinery.store.query.building.Variable; import tools.refinery.store.query.internal.DNF2PQuery; import tools.refinery.store.query.internal.RawPatternMatcher; +import tools.refinery.store.query.internal.RelationalScope; import tools.refinery.store.query.view.FilteredRelationView; import tools.refinery.store.query.view.KeyOnlyRelationView; import tools.refinery.store.query.view.RelationView; -- cgit v1.2.3-70-g09d2