Refactoring to assume fresh Context for any Dataset view
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/79b06548 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/79b06548 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/79b06548 Branch: refs/heads/master Commit: 79b06548a44318af0a28c4684ef42d4e3df7a4c9 Parents: e0c580c Author: ajs6f <[email protected]> Authored: Thu Oct 12 10:07:12 2017 -0400 Committer: ajs6f <[email protected]> Committed: Fri Jan 5 09:26:07 2018 -0500 ---------------------------------------------------------------------- .../org/apache/jena/sparql/util/Context.java | 34 ++--------- .../jena/sparql/util/UnionDatasetGraph.java | 59 ++++++-------------- .../java/org/apache/jena/atlas/lib/Union.java | 28 ++++++++++ 3 files changed, 50 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/79b06548/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java index 783a6db..c208ab1 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java @@ -20,8 +20,6 @@ package org.apache.jena.sparql.util ; import java.util.* ; import java.util.concurrent.ConcurrentHashMap ; -import java.util.function.Consumer; - import org.apache.jena.atlas.lib.Lib ; import org.apache.jena.query.ARQ ; import org.apache.jena.sparql.ARQConstants ; @@ -37,7 +35,7 @@ public class Context { public static final Context emptyContext = new Context(true) ; protected Map<Symbol, Object> context = new ConcurrentHashMap<>() ; - protected List<Consumer<Symbol>> callbacks = new ArrayList<>() ; + protected boolean readonly = false ; /** Create an empty context */ @@ -86,13 +84,11 @@ public class Context { /** Store a named value - overwrites any previous set value */ public void put(Symbol property, Object value) { _put(property, value) ; - doCallbacks(property) ; } /** Store a named value - overwrites any previous set value */ public void set(Symbol property, Object value) { _put(property, value) ; - doCallbacks(property) ; } private void _put(Symbol property, Object value) { @@ -125,13 +121,11 @@ public class Context { /** Remove any value associated with a property */ public void remove(Symbol property) { context.remove(property) ; - doCallbacks(property) ; } /** Remove any value associated with a property - alternative method name */ public void unset(Symbol property) { context.remove(property) ; - doCallbacks(property) ; } // ---- Helpers @@ -199,13 +193,12 @@ public class Context { } } - public void putAll(Context other) { + public Context putAll(Context other) { if ( readonly ) throw new ARQException("Context is readonly") ; - if ( other != null ) { - for ( Map.Entry<Symbol, Object> e : other.context.entrySet() ) - put(e.getKey(), e.getValue()) ; - } + if ( other != null ) + other.context.forEach(this::put); + return this; } // -- true/false @@ -315,23 +308,6 @@ public class Context { return context.size() ; } - // ---- Callbacks - public synchronized void addCallback(Consumer<Symbol> m) { - callbacks.add(m) ; - } - - public synchronized void removeCallback(Consumer<Symbol> m) { - callbacks.remove(m) ; - } - - public synchronized List<Consumer<Symbol>> getCallbacks() { - return Collections.unmodifiableList(callbacks) ; - } - - private synchronized void doCallbacks(Symbol symbol) { - callbacks.forEach(c -> c.accept(symbol)); - } - @Override public String toString() { String x = "" ; http://git-wip-us.apache.org/repos/asf/jena/blob/79b06548/jena-arq/src/main/java/org/apache/jena/sparql/util/UnionDatasetGraph.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/UnionDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/UnionDatasetGraph.java index b857417..e799531 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/UnionDatasetGraph.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/UnionDatasetGraph.java @@ -14,32 +14,24 @@ import org.apache.jena.shared.Lock; import org.apache.jena.sparql.core.DatasetGraph; import org.apache.jena.sparql.core.Quad; -public class UnionDatasetGraph implements DatasetGraph { - - private final DatasetGraph left, right; +public class UnionDatasetGraph extends org.apache.jena.atlas.lib.Union<DatasetGraph> implements DatasetGraph { private final Lock lock; - public UnionDatasetGraph(DatasetGraph left, DatasetGraph right) { - this.left = left; - this.right = right; - this.lock = new UnionLock(left.getLock(), right.getLock()); - } + private final Context context; - static Graph union(Graph left, Graph right) { - return new Union(left, right); - } - - Graph union(Function<DatasetGraph, Graph> op) { - return union(op.apply(left), op.apply(right)); + public UnionDatasetGraph(DatasetGraph left, DatasetGraph right) { + this(left, right, Context.emptyContext); } - boolean both(Function<DatasetGraph, Boolean> op) { - return op.apply(left) && op.apply(right); + public UnionDatasetGraph(DatasetGraph left, DatasetGraph right, Context context) { + super(left, right); + this.context = context; + this.lock = new UnionLock(left.getLock(), right.getLock()); } - boolean either(Function<DatasetGraph, Boolean> op) { - return op.apply(left) || op.apply(right); + private Graph union(Function<DatasetGraph, Graph> op) { + return new Union(op.apply(left), op.apply(right)); } <T> Iterator<T> fromEach(Function<DatasetGraph, Iterator<T>> op) { @@ -49,8 +41,7 @@ public class UnionDatasetGraph implements DatasetGraph { @Override public void begin(ReadWrite readWrite) { if (readWrite.equals(WRITE)) throw new UnsupportedOperationException(); - left.begin(readWrite); - right.begin(readWrite); + forEach(dsg -> dsg.begin(readWrite)); } @Override @@ -65,8 +56,7 @@ public class UnionDatasetGraph implements DatasetGraph { @Override public void end() { - left.end(); - right.end(); + forEach(DatasetGraph::end); } @Override @@ -186,8 +176,7 @@ public class UnionDatasetGraph implements DatasetGraph { @Override public Context getContext() { - // TODO Auto-generated method stub - return null; + return context; } @Override @@ -210,34 +199,20 @@ public class UnionDatasetGraph implements DatasetGraph { return both(DatasetGraph::supportsTransactionAbort); } - private static class UnionLock implements Lock { + private static class UnionLock extends org.apache.jena.atlas.lib.Union<Lock> implements Lock { public UnionLock(Lock left, Lock right) { - this.left = left; - this.right = right; + super(left, right); } - private final Lock left, right; - @Override public void enterCriticalSection(boolean readLockRequested) { - left.enterCriticalSection(readLockRequested); - right.enterCriticalSection(readLockRequested); + forEach(lock -> lock.enterCriticalSection(readLockRequested)); } @Override public void leaveCriticalSection() { - left.leaveCriticalSection(); - right.leaveCriticalSection(); + forEach(Lock::leaveCriticalSection); } } - - private static class UnionContext extends Context { - - UnionContext(Context left, Context right) { - this.context = left.context; - } - - - } } http://git-wip-us.apache.org/repos/asf/jena/blob/79b06548/jena-base/src/main/java/org/apache/jena/atlas/lib/Union.java ---------------------------------------------------------------------- diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Union.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Union.java new file mode 100644 index 0000000..c5ff0c6 --- /dev/null +++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Union.java @@ -0,0 +1,28 @@ +package org.apache.jena.atlas.lib; + +import java.util.function.Consumer; +import java.util.function.Function; + +public class Union<T> { + + protected final T left, right; + + public Union(T left, T right) { + this.left = left; + this.right = right; + } + + protected boolean both(Function<T, Boolean> op) { + return op.apply(left) && op.apply(right); + } + + protected boolean either(Function<T, Boolean> op) { + return op.apply(left) || op.apply(right); + } + + protected void forEach(Consumer<T> op) { + op.accept(left); + op.accept(right); + } + +}
