You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by aj...@apache.org on 2018/01/06 15:17:30 UTC

[06/44] jena git commit: Refactoring to assume fresh Context for any Dataset view

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 <aj...@apache.org>
Authored: Thu Oct 12 10:07:12 2017 -0400
Committer: ajs6f <aj...@apache.org>
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);
+    }
+
+}