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);
+ }
+ }
}