You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commonsrdf.apache.org by st...@apache.org on 2016/10/06 23:46:32 UTC
[3/3] incubator-commonsrdf git commit: Split out ConvertedStatements
iterable
Split out ConvertedStatements iterable
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/90e3e500
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/90e3e500
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/90e3e500
Branch: refs/heads/rdf4j
Commit: 90e3e50067112a947a0e5147940bb04854e93d96
Parents: a47ad36
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Oct 7 00:36:36 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Oct 7 00:43:50 2016 +0100
----------------------------------------------------------------------
.../apache/commons/rdf/rdf4j/RDF4JDataset.java | 47 +++++++++++++
.../apache/commons/rdf/rdf4j/RDF4JGraph.java | 4 +-
.../rdf/rdf4j/impl/ConvertedStatements.java | 71 ++++++++++++++++++++
.../rdf/rdf4j/impl/RepositoryDatasetImpl.java | 19 ++++++
.../rdf/rdf4j/impl/RepositoryGraphImpl.java | 41 ++---------
5 files changed, 142 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/90e3e500/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java
index d1aea4c..8ed5d4d 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java
@@ -25,6 +25,7 @@ import org.apache.commons.rdf.api.Dataset;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.Quad;
import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.commons.rdf.api.Triple;
import org.eclipse.rdf4j.repository.RepositoryConnection;
@@ -88,4 +89,50 @@ public interface RDF4JDataset extends Dataset, RDF4JGraphLike<Quad> {
@Override
Stream<BlankNodeOrIRI> getGraphNames();
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * Note that the iterable <strong>must be closed</strong> with
+ * {@link ClosableIterable#close()}.
+ * call
+ * <p>
+ * This can generally achieved using a try-with-resources block, e.g.:
+ * <pre>
+ * try (ClosableIterable<Quad> s : graph.iterate()) {
+ * for (Quad q : quads) {
+ * return q; // OK to terminate for-loop early
+ * }
+ * }
+ * </pre>
+ * If you don't use a try-with-resources block, the iterator will
+ * attempt to close the ClosableIterable
+ * when reaching the end of the iteration.
+ */
+ @Override
+ ClosableIterable<Quad> iterate();
+
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * Note that the iterable <strong>must be closed</strong> with
+ * {@link ClosableIterable#close()}.
+ * call
+ * <p>
+ * This can generally achieved using a try-with-resources block, e.g.:
+ * <pre>
+ * try (ClosableIterable<Quad> s : graph.iterate(g,s,p,o)) {
+ * for (Quad q : quads) {
+ * return q; // OK to terminate for-loop early
+ * }
+ * }
+ * </pre>
+ * If you don't use a try-with-resources block, the iterator will
+ * attempt to close the ClosableIterable
+ * when reaching the end of the iteration.
+ */
+ @Override
+ ClosableIterable<Quad> iterate(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object);
+
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/90e3e500/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
index 8030723..c19e14a 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
@@ -116,7 +116,6 @@ public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
* <p>
* This can generally achieved using a try-with-resources block, e.g.:
* <pre>
- * int subjects;
* try (ClosableIterable<Triple> s : graph.iterate()) {
* for (Triple t : triples) {
* return t; // OK to terminate for-loop early
@@ -139,7 +138,6 @@ public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
* <p>
* This can generally achieved using a try-with-resources block, e.g.:
* <pre>
- * int subjects;
* try (ClosableIterable<Triple> s : graph.iterate(s,p,o)) {
* for (Triple t : triples) {
* return t; // OK to terminate for-loop early
@@ -151,5 +149,5 @@ public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
* when reaching the end of the iteration.
*/
@Override
- Iterable<Triple> iterate(BlankNodeOrIRI subject, IRI predicate, RDFTerm object);
+ ClosableIterable<Triple> iterate(BlankNodeOrIRI subject, IRI predicate, RDFTerm object);
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/90e3e500/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ConvertedStatements.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ConvertedStatements.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ConvertedStatements.java
new file mode 100644
index 0000000..4c8478a
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ConvertedStatements.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.util.Iterator;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import org.apache.commons.rdf.rdf4j.ClosableIterable;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Statement;
+import org.eclipse.rdf4j.model.Value;
+import org.eclipse.rdf4j.repository.RepositoryConnection;
+import org.eclipse.rdf4j.repository.RepositoryResult;
+
+final class ConvertedStatements<T> implements ClosableIterable<T> {
+
+ private RepositoryConnection conn;
+ private RepositoryResult<Statement> results;
+ private Function<Statement, T> statementAdapter;
+
+ ConvertedStatements(Supplier<RepositoryConnection> repositoryConnector, Function<Statement, T> statementAdapter,
+ Resource subj, org.eclipse.rdf4j.model.IRI pred, Value obj, Resource... contexts) {
+ this.statementAdapter = statementAdapter;
+ this.conn = repositoryConnector.get();
+ this.results = conn.getStatements(subj, pred, obj, contexts);
+ }
+
+ @Override
+ public Iterator<T> iterator() {
+ return new ConvertedIterator();
+ }
+
+ @Override
+ public void close() {
+ results.close();
+ conn.close();
+ }
+
+ private final class ConvertedIterator implements Iterator<T> {
+ @Override
+ public boolean hasNext() {
+ boolean hasNext = results.hasNext();
+ if (!hasNext) {
+ close();
+ }
+ return hasNext;
+ }
+
+ @Override
+ public T next() {
+ return statementAdapter.apply(results.next());
+ }
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/90e3e500/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java
index eca52fe..2efef42 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java
@@ -17,6 +17,7 @@
*/
package org.apache.commons.rdf.rdf4j.impl;
+import java.util.ConcurrentModificationException;
import java.util.Optional;
import java.util.stream.Stream;
@@ -26,6 +27,7 @@ import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.Quad;
import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.commons.rdf.rdf4j.ClosableIterable;
import org.apache.commons.rdf.rdf4j.RDF4JDataset;
import org.apache.commons.rdf.rdf4j.RDF4JQuad;
import org.eclipse.rdf4j.common.iteration.Iterations;
@@ -170,6 +172,23 @@ class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> implements
}
+
+ @Override
+ public ClosableIterable<Quad> iterate() throws ConcurrentModificationException, IllegalStateException {
+ return iterate(null, null, null, null);
+ }
+
+ @Override
+ public ClosableIterable<Quad> iterate(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object)
+ throws ConcurrentModificationException, IllegalStateException {
+ Resource[] contexts = asContexts(graphName);
+ Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
+ org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
+ Value obj = rdf4jTermFactory.asValue(object);
+ return new ConvertedStatements<Quad>(this::getRepositoryConnection,
+ rdf4jTermFactory::asQuad, subj, pred, obj, contexts);
+ }
+
@Override
protected RDF4JQuad asTripleLike(Statement s) {
return rdf4jTermFactory.asQuad(s);
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/90e3e500/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
index ce0add1..03fede3 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
@@ -20,9 +20,9 @@ package org.apache.commons.rdf.rdf4j.impl;
import java.util.Collections;
import java.util.ConcurrentModificationException;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Stream;
import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -43,41 +43,7 @@ import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryResult;
class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> implements Graph, RDF4JGraph {
-
- private final class TripleIteration implements ClosableIterable<Triple> {
- private RepositoryConnection conn;
- private RepositoryResult<Statement> results;
- private TripleIteration(Resource subj, org.eclipse.rdf4j.model.IRI pred, Value obj) {
- conn = getRepositoryConnection();
- results = conn.getStatements(subj, pred, obj, contextMask);
- }
-
- @Override
- public Iterator<Triple> iterator() {
- return new Iterator<Triple>(){
- @Override
- public boolean hasNext() {
- boolean hasNext = results.hasNext();
- if (! hasNext) {
- close();
- }
- return hasNext;
- }
- @Override
- public Triple next() {
- Statement statement = results.next();
- return rdf4jTermFactory.asTriple(statement);
- }
- };
- }
-
- @Override
- public void close() {
- results.close();
- conn.close();
- }
- }
-
+
private final Resource[] contextMask;
RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, Resource... contextMask) {
@@ -177,7 +143,8 @@ class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> implements
Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
Value obj = rdf4jTermFactory.asValue(object);
- return new TripleIteration(subj, pred, obj);
+ return new ConvertedStatements<Triple>(this::getRepositoryConnection, rdf4jTermFactory::asTriple,
+ subj, pred, obj, contextMask);
}
@Override