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:34 UTC

[10/44] jena git commit: Adding IntersectionDatasetGraph

Adding IntersectionDatasetGraph


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/d0101acb
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/d0101acb
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/d0101acb

Branch: refs/heads/master
Commit: d0101acb89c0d9b3e265bafc6177cd7f79121de5
Parents: d967c1e
Author: ajs6f <aj...@apache.org>
Authored: Sat Nov 4 13:59:16 2017 -0400
Committer: ajs6f <aj...@apache.org>
Committed: Fri Jan 5 09:26:07 2018 -0500

----------------------------------------------------------------------
 .../sparql/util/DifferenceDatasetGraph.java     |  47 +---
 .../sparql/util/IntersectionDatasetGraph.java   |  51 ++++
 .../jena/sparql/util/UnionDatasetGraph.java     |  15 --
 .../jena/sparql/util/ViewDatasetGraph.java      | 239 ++++++++++++-------
 4 files changed, 202 insertions(+), 150 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d0101acb/jena-arq/src/main/java/org/apache/jena/sparql/util/DifferenceDatasetGraph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/DifferenceDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/DifferenceDatasetGraph.java
index 556d46c..9df3622 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/DifferenceDatasetGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/DifferenceDatasetGraph.java
@@ -1,19 +1,14 @@
 package org.apache.jena.sparql.util;
 
-import static org.apache.jena.atlas.iterator.Iter.iter;
-import static org.apache.jena.ext.com.google.common.collect.Iterators.concat;
 import static org.apache.jena.sparql.core.Quad.ANY;
-import static org.apache.jena.sparql.core.Quad.defaultGraphIRI;
-import static org.apache.jena.sparql.util.graph.GraphUtils.triples2quads;
+import static org.apache.jena.sparql.core.Quad.isDefaultGraph;
 
 import java.util.Iterator;
 
 import org.apache.jena.graph.Graph;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.compose.Difference;
-import org.apache.jena.graph.compose.MultiUnion;
 import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.core.Quad;
 
 public class DifferenceDatasetGraph extends ViewDatasetGraph {
 
@@ -32,7 +27,7 @@ public class DifferenceDatasetGraph extends ViewDatasetGraph {
 
 	@Override
 	public Graph getGraph(Node graphNode) {
-		return Quad.isDefaultGraph(graphNode)
+		return isDefaultGraph(graphNode)
 				? getDefaultGraph()
 				: getRight().containsGraph(graphNode)
 						? new Difference(getLeft().getGraph(graphNode), getRight().getGraph(graphNode))
@@ -40,11 +35,6 @@ public class DifferenceDatasetGraph extends ViewDatasetGraph {
 	}
 
 	@Override
-	public Graph getUnionGraph() {
-		return new MultiUnion(iter(listGraphNodes()).map(this::getGraph));
-	}
-
-	@Override
 	public boolean containsGraph(Node graphNode) {
 		return getLeft().containsGraph(graphNode);
 	}
@@ -55,44 +45,11 @@ public class DifferenceDatasetGraph extends ViewDatasetGraph {
 	}
 
 	@Override
-	public Iterator<Quad> find() {
-		return find(ANY);
-	}
-
-	@Override
-	public Iterator<Quad> find(Quad q) {
-		return find(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject());
-	}
-
-	@Override
-	public Iterator<Quad> find(Node g, Node s, Node p, Node o) {
-		return g.isConcrete()
-				? findInOneGraph(g, s, p, o)
-				: concat(findNG(null, s, p, o), findInOneGraph(defaultGraphIRI, s, p, o));
-	}
-
-	@Override
-	public Iterator<Quad> findNG(Node g, Node s, Node p, Node o) {
-		return g.isConcrete()
-				? findInOneGraph(g, s, p, o)
-				: concat(iter(listGraphNodes()).map(gn -> findInOneGraph(gn, s, p, o)));
-	}
-
-	private Iterator<Quad> findInOneGraph(Node g, Node s, Node p, Node o) {
-		return triples2quads(g, getGraph(g).find(s, p, o));
-	}
-
-	@Override
 	public boolean contains(Node g, Node s, Node p, Node o) {
 		return getLeft().contains(g, s, p, o) && !getRight().contains(g, s, p, o);
 	}
 
 	@Override
-	public boolean contains(Quad q) {
-		return contains(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject());
-	}
-
-	@Override
 	public boolean isEmpty() {
 		return getLeft().isEmpty() || getLeft() == getRight() || !contains(ANY);
 	}

http://git-wip-us.apache.org/repos/asf/jena/blob/d0101acb/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java
new file mode 100644
index 0000000..32cc847
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java
@@ -0,0 +1,51 @@
+package org.apache.jena.sparql.util;
+
+import static org.apache.jena.atlas.iterator.Iter.filter;
+
+import java.util.Iterator;
+import java.util.function.Function;
+
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.compose.Intersection;
+import org.apache.jena.sparql.core.DatasetGraph;
+
+public class IntersectionDatasetGraph extends ViewDatasetGraph {
+
+	public IntersectionDatasetGraph(DatasetGraph left, DatasetGraph right) {
+		super(left, right);
+	}
+
+	public IntersectionDatasetGraph(DatasetGraph left, DatasetGraph right, Context c) {
+		super(left, right, c);
+	}
+
+	Graph intersect(Function<DatasetGraph, Graph> mapping) {
+		return new Intersection(mapping.apply(getLeft()), mapping.apply(getRight()));
+	}
+
+	@Override
+	public Graph getDefaultGraph() {
+		return intersect(DatasetGraph::getDefaultGraph);
+	}
+
+	@Override
+	public Graph getGraph(Node graphNode) {
+		return intersect(dsg -> dsg.getGraph(graphNode));
+	}
+
+	@Override
+	public boolean containsGraph(Node graphNode) {
+		return both(dsg -> dsg.containsGraph(graphNode));
+	}
+
+	@Override
+	public Iterator<Node> listGraphNodes() {
+		return filter(getLeft().listGraphNodes(), getRight()::containsGraph);
+	}
+
+	@Override
+	public boolean contains(Node g, Node s, Node p, Node o) {
+		return both(dsg -> dsg.contains(g, s, p, o));
+	}
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/d0101acb/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 dc6bd1b..cc83b81 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
@@ -54,16 +54,6 @@ public class UnionDatasetGraph extends ViewDatasetGraph {
     }
 
     @Override
-    public Iterator<Quad> find() {
-        return fromEach(DatasetGraph::find);
-    }
-
-    @Override
-    public Iterator<Quad> find(Quad quad) {
-        return fromEach(dsg -> dsg.find(quad));
-    }
-
-    @Override
     public Iterator<Quad> find(Node g, Node s, Node p, Node o) {
         return fromEach(dsg -> dsg.find(g, s, p, o));
     }
@@ -79,11 +69,6 @@ public class UnionDatasetGraph extends ViewDatasetGraph {
     }
 
     @Override
-    public boolean contains(Quad quad) {
-        return either(dsg -> dsg.contains(quad));
-    }
-
-    @Override
     public boolean isEmpty() {
         return both(DatasetGraph::isEmpty);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/d0101acb/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java
index e27f0ae..6d07cb0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java
@@ -1,143 +1,202 @@
 package org.apache.jena.sparql.util;
 
+import static org.apache.jena.atlas.iterator.Iter.count;
+import static org.apache.jena.atlas.iterator.Iter.map;
+import static org.apache.jena.ext.com.google.common.collect.Iterators.concat;
 import static org.apache.jena.query.ReadWrite.WRITE;
+import static org.apache.jena.sparql.core.Quad.ANY;
+import static org.apache.jena.sparql.core.Quad.defaultGraphIRI;
+import static org.apache.jena.sparql.util.graph.GraphUtils.triples2quads;
+
+import java.util.Iterator;
 
 import org.apache.jena.atlas.lib.Pair;
 import org.apache.jena.graph.Graph;
 import org.apache.jena.graph.Node;
+import org.apache.jena.graph.compose.MultiUnion;
 import org.apache.jena.query.ReadWrite;
 import org.apache.jena.shared.Lock;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.Quad;
 
 public abstract class ViewDatasetGraph extends Pair.OfSameType<DatasetGraph> implements DatasetGraph {
-	
-    private final Context context;
-	
-    private final Lock lock;
+
+	private final Context context;
+
+	private final Lock lock;
 
 	public ViewDatasetGraph(DatasetGraph left, DatasetGraph right) {
 		this(left, right, Context.emptyContext);
 	}
 
-
-    public ViewDatasetGraph(DatasetGraph left, DatasetGraph right, Context c) {
+	public ViewDatasetGraph(DatasetGraph left, DatasetGraph right, Context c) {
 		super(left, right);
 		this.context = c;
 		this.lock = new PairLock(left.getLock(), right.getLock());
 	}
 
+	private void noMutation() {
+		throw new UnsupportedOperationException("Views do not allow mutation!");
+	}
 
 	@Override
-    public void commit() {
-        throw new UnsupportedOperationException();
-    }
-	
-    @Override
-    public void begin(ReadWrite readWrite) {
-        if (readWrite.equals(WRITE)) throw new UnsupportedOperationException();
-        forEach(dsg -> dsg.begin(readWrite));
-    }
+	public void commit() {
+		noMutation();
+	}
 
-    @Override
-    public void abort() {
-        throw new UnsupportedOperationException();
-    }
 
-    @Override
-    public void end() {
-        forEach(DatasetGraph::end);
-    }
+	@Override
+	public void begin(ReadWrite readWrite) {
+		if (readWrite.equals(WRITE)) noMutation();
+		forEach(dsg -> dsg.begin(readWrite));
+	}
 
+	@Override
+	public void abort() {
+		noMutation();
+	}
 
-    @Override
-    public boolean isInTransaction() {
-        return either(DatasetGraph::isInTransaction);
-    }
+	@Override
+	public void end() {
+		forEach(DatasetGraph::end);
+	}
 
-    @Override
-    public void setDefaultGraph(Graph g) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public boolean isInTransaction() {
+		return either(DatasetGraph::isInTransaction);
+	}
 
-    @Override
-    public void addGraph(Node graphName, Graph graph) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void setDefaultGraph(Graph g) {
+		throw new UnsupportedOperationException();
+	}
 
-    @Override
-    public void removeGraph(Node graphName) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void addGraph(Node graphName, Graph graph) {
+		noMutation();
+	}
 
-    @Override
-    public void add(Quad quad) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void removeGraph(Node graphName) {
+		noMutation();
+	}
 
-    @Override
-    public void delete(Quad quad) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void add(Quad quad) {
+		noMutation();
+	}
 
-    @Override
-    public void add(Node g, Node s, Node p, Node o) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void delete(Quad quad) {
+		noMutation();
+	}
 
-    @Override
-    public void delete(Node g, Node s, Node p, Node o) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void add(Node g, Node s, Node p, Node o) {
+		noMutation();
+	}
 
-    @Override
-    public void deleteAny(Node g, Node s, Node p, Node o) {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void delete(Node g, Node s, Node p, Node o) {
+		noMutation();
+	}
 
-    @Override
-    public void clear() {
-        throw new UnsupportedOperationException();
-    }
+	@Override
+	public void deleteAny(Node g, Node s, Node p, Node o) {
+		noMutation();
+	}
 
-    @Override
-    public Lock getLock() {
-        return lock;
-    }
+	@Override
+	public void clear() {
+		noMutation();
+	}
 
+	@Override
+	public Iterator<Quad> find() {
+		return find(ANY);
+	}
+
+	@Override
+	public Iterator<Quad> find(Quad q) {
+		return find(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject());
+	}
+
+	@Override
+	public Iterator<Quad> find(Node g, Node s, Node p, Node o) {
+		return g.isConcrete()
+				? findInOneGraph(g, s, p, o)
+				: concat(findNG(null, s, p, o), findInOneGraph(defaultGraphIRI, s, p, o));
+	}
+
+	@Override
+	public Iterator<Quad> findNG(Node g, Node s, Node p, Node o) {
+		return g.isConcrete()
+				? findInOneGraph(g, s, p, o)
+				: concat(map(listGraphNodes(), gn -> findInOneGraph(gn, s, p, o)));
+	}
+
+	protected Iterator<Quad> findInOneGraph(Node g, Node s, Node p, Node o) {
+		return triples2quads(g, getGraph(g).find(s, p, o));
+	}
+
+	@Override
+	public Graph getUnionGraph() {
+		return new MultiUnion(map(listGraphNodes(), this::getGraph));
+	}
+
+	@Override
+	public boolean contains(Quad q) {
+		return contains(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject());
+	}
+
+	@Override
+	public Lock getLock() {
+		return lock;
+	}
 
 	@Override
 	public Context getContext() {
 		return context;
 	}
 
-    @Override
-    public void close() {}
+	@Override
+	public void close() {
+	}
+
+	@Override
+	public boolean supportsTransactions() {
+		return both(DatasetGraph::supportsTransactions);
+	}
+
+	@Override
+	public boolean supportsTransactionAbort() {
+		return false;
+	}
 
-    @Override
-    public boolean supportsTransactions() {
-        return both(DatasetGraph::supportsTransactions);
-    }
+	@Override
+	public long size() {
+		return count(listGraphNodes());
+	}
 
-    @Override
-    public boolean supportsTransactionAbort() {
-        return false;
-    }
+	@Override
+	public boolean isEmpty() {
+		return listGraphNodes().hasNext();
+	}
 
-    private static class PairLock extends Pair.OfSameType<Lock> implements Lock {
+	private static class PairLock extends Pair.OfSameType<Lock> implements Lock {
 
-        public PairLock(Lock left, Lock right) {
-            super(left, right);
-        }
+		public PairLock(Lock left, Lock right) {
+			super(left, right);
+		}
 
-        @Override
-        public void enterCriticalSection(boolean readLockRequested) {
-            forEach(lock -> lock.enterCriticalSection(readLockRequested));
-        }
+		@Override
+		public void enterCriticalSection(boolean readLockRequested) {
+			forEach(lock -> lock.enterCriticalSection(readLockRequested));
+		}
 
-        @Override
-        public void leaveCriticalSection() {
-            forEach(Lock::leaveCriticalSection);
-        }
-    }
+		@Override
+		public void leaveCriticalSection() {
+			forEach(Lock::leaveCriticalSection);
+		}
+	}
 }