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/06/14 15:45:01 UTC

[1/8] incubator-commonsrdf git commit: ASF file headers

Repository: incubator-commonsrdf
Updated Branches:
  refs/heads/rdf4j 6c5988d80 -> 81f195f31


ASF file headers


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/5ebb9d80
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/5ebb9d80
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/5ebb9d80

Branch: refs/heads/rdf4j
Commit: 5ebb9d8069fb7ac72e5af5fdb50fea945e0ef0f7
Parents: 6c5988d
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 14:57:45 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 14:57:45 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/rdf4j/impl/AbstractRDFTerm.java    | 17 +++++++++++++++++
 .../apache/commons/rdf/rdf4j/impl/QuadImpl.java    | 17 +++++++++++++++++
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java        | 17 +++++++++++++++++
 .../apache/commons/rdf/rdf4j/impl/TripleImpl.java  | 17 +++++++++++++++++
 4 files changed, 68 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/5ebb9d80/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
index a5d5367..124eb98 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
@@ -1,3 +1,20 @@
+/**
+ * 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 org.apache.commons.rdf.rdf4j.RDF4JTerm;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/5ebb9d80/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
index 1d887a0..ce39f61 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
@@ -1,3 +1,20 @@
+/**
+ * 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.Objects;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/5ebb9d80/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 837878d..2e608a1 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
@@ -1,3 +1,20 @@
+/**
+ * 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.Optional;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/5ebb9d80/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
index c494006..bddd7f3 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
@@ -1,3 +1,20 @@
+/**
+ * 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.Objects;


[2/8] incubator-commonsrdf git commit: asStatement(TripleLike)

Posted by st...@apache.org.
asStatement(TripleLike)


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/3af404e3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/3af404e3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/3af404e3

Branch: refs/heads/rdf4j
Commit: 3af404e39faa069e25a3deccda763f01b950fb6e
Parents: 5ebb9d8
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 15:17:24 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 15:17:24 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/rdf4j/RDF4JTermFactory.java     | 200 +++++++++----------
 1 file changed, 95 insertions(+), 105 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/3af404e3/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
index 1b59c6f..9aa0fda 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
@@ -29,10 +29,11 @@ import org.apache.commons.rdf.api.Quad;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.RDFTermFactory;
 import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.api.TripleLike;
 import org.apache.commons.rdf.rdf4j.impl.BlankNodeImpl;
-import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
 import org.apache.commons.rdf.rdf4j.impl.IRIImpl;
 import org.apache.commons.rdf.rdf4j.impl.LiteralImpl;
+import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
 import org.apache.commons.rdf.rdf4j.impl.QuadImpl;
 import org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl;
 import org.apache.commons.rdf.rdf4j.impl.TripleImpl;
@@ -48,51 +49,47 @@ import org.eclipse.rdf4j.repository.Repository;
 /**
  * RDF4J implementation of RDFTermFactory
  * <p>
- * The {@link #RDF4JTermFactory()} constructor
- * uses a {@link SimpleValueFactory} to create corresponding
- * RDF4J {@link Value} instances. Alternatively, 
- * this factory can be constructed with a {@link ValueFactory} using
- * {@link #RDF4JTermFactory(ValueFactory)}.  
+ * The {@link #RDF4JTermFactory()} constructor uses a {@link SimpleValueFactory}
+ * to create corresponding RDF4J {@link Value} instances. Alternatively, this
+ * factory can be constructed with a {@link ValueFactory} using
+ * {@link #RDF4JTermFactory(ValueFactory)}.
  * <p>
- * {@link #asRDFTerm(Value)} can be used to convert any RDF4J {@link Value}
- * to an RDFTerm. Note that adapted {@link BNode}s are considered equal if they
- * are converted with the same {@link RDF4JTermFactory} instance and have the same
- * {@link BNode#getID()}. 
+ * {@link #asRDFTerm(Value)} can be used to convert any RDF4J {@link Value} to
+ * an RDFTerm. Note that adapted {@link BNode}s are considered equal if they are
+ * converted with the same {@link RDF4JTermFactory} instance and have the same
+ * {@link BNode#getID()}.
  * <p>
- * {@link #createGraph()} creates a new Graph backed by {@link LinkedHashModel}. To 
- * use other models, see {@link #asRDFTermGraph(Model)}.
+ * {@link #createGraph()} creates a new Graph backed by {@link LinkedHashModel}.
+ * To use other models, see {@link #asRDFTermGraph(Model)}.
  * <p>
- * {@link #asTriple(Statement)} can be used to convert a RDF4J {@link Statement} to
- * a Commons RDF {@link Triple}.
+ * {@link #asTriple(Statement)} can be used to convert a RDF4J {@link Statement}
+ * to a Commons RDF {@link Triple}.
  * <p>
- * {@link #asStatement(Triple)} can be used to convert any Commons RDF {@link Triple} 
- * to a RDF4J {@link Statement}.
- * <p
- * {@link #asValue(RDFTerm)} can be used to convert any Commons RDF {@link RDFTerm} to 
- * a corresponding RDF4J {@link Value}.
+ * {@link #asStatement(Triple)} can be used to convert any Commons RDF
+ * {@link Triple} to a RDF4J {@link Statement}. <p {@link #asValue(RDFTerm)} can
+ * be used to convert any Commons RDF {@link RDFTerm} to a corresponding RDF4J
+ * {@link Value}.
  * 
  */
 public class RDF4JTermFactory implements RDFTermFactory {
-		
+
 	/**
 	 * 
-	 * Adapt a RDF4J {@link Value} as a Commons RDF 
-	 * {@link RDFTerm}.
+	 * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}.
 	 * <p>
 	 * <p>
 	 * The value will be of the same kind as the term, e.g. a
 	 * {@link org.eclipse.rdf4j.model.BNode} is converted to a
-	 * {@link org.apache.commons.rdf.api.BlankNode}, 
-	 * a {@link org.eclipse.rdf4j.model.IRI}
-	 * is converted to a {@link org.apache.commons.rdf.api.IRI}
-	 * and a {@link org.eclipse.rdf4j.model.Literal}.
-	 * is converted to a 
-	 * {@link org.apache.commons.rdf.api.Literal} 
+	 * {@link org.apache.commons.rdf.api.BlankNode}, a
+	 * {@link org.eclipse.rdf4j.model.IRI} is converted to a
+	 * {@link org.apache.commons.rdf.api.IRI} and a
+	 * {@link org.eclipse.rdf4j.model.Literal}. is converted to a
+	 * {@link org.apache.commons.rdf.api.Literal}
 	 * 
 	 * @param value
 	 * @return
 	 */
-	public static RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value, UUID salt) {		
+	public static RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value, UUID salt) {
 		if (value instanceof BNode) {
 			return new BlankNodeImpl((BNode) value, salt);
 		}
@@ -102,12 +99,11 @@ public class RDF4JTermFactory implements RDFTermFactory {
 		if (value instanceof org.eclipse.rdf4j.model.IRI) {
 			return new IRIImpl((org.eclipse.rdf4j.model.IRI) value);
 		}
-		throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass());		
+		throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass());
 	}
 
 	/**
-	 * Adapt a RDF4J {@link Statement} as a Commons RDF 
-	 * {@link Triple}.
+	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}.
 	 * 
 	 * @param statement
 	 * @return
@@ -115,22 +111,21 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	public static RDF4JTriple asTriple(final Statement statement, UUID salt) {
 		return new TripleImpl(statement, salt);
 	}
-	
+
 	private UUID salt = UUID.randomUUID();
-	
+
 	private ValueFactory valueFactory;
-	
+
 	public RDF4JTermFactory() {
 		this.valueFactory = SimpleValueFactory.getInstance();
 	}
 
-	public RDF4JTermFactory(ValueFactory valueFactory) { 
+	public RDF4JTermFactory(ValueFactory valueFactory) {
 		this.valueFactory = valueFactory;
-	}	
-	
+	}
+
 	/**
-	 * Adapt a RDF4J {@link Statement} as a Commons RDF 
-	 * {@link Quad}.
+	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Quad}.
 	 * 
 	 * @param statement
 	 * @return A {@link RDF4JQuad} that is equivalent to the statement
@@ -138,37 +133,34 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	public RDF4JQuad asQuad(final Statement statement) {
 		return new QuadImpl(statement, salt);
 	}
-	
+
 	/**
 	 * 
-	 * Adapt a RDF4J {@link Value} as a Commons RDF 
-	 * {@link RDFTerm}.
+	 * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}.
 	 * <p>
 	 * <p>
 	 * The value will be of the same kind as the term, e.g. a
 	 * {@link org.eclipse.rdf4j.model.BNode} is converted to a
-	 * {@link org.apache.commons.rdf.api.BlankNode}, 
-	 * a {@link org.eclipse.rdf4j.model.IRI}
-	 * is converted to a {@link org.apache.commons.rdf.api.IRI}
-	 * and a {@link org.eclipse.rdf4j.model.Literal}.
-	 * is converted to a 
-	 * {@link org.apache.commons.rdf.api.Literal} 
+	 * {@link org.apache.commons.rdf.api.BlankNode}, a
+	 * {@link org.eclipse.rdf4j.model.IRI} is converted to a
+	 * {@link org.apache.commons.rdf.api.IRI} and a
+	 * {@link org.eclipse.rdf4j.model.Literal}. is converted to a
+	 * {@link org.apache.commons.rdf.api.Literal}
 	 * 
 	 * @param value
 	 * @return
 	 */
-	public RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value) {		
-		return asRDFTerm(value, salt);	
-	}	
+	public RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value) {
+		return asRDFTerm(value, salt);
+	}
 
 	/**
-	 * Adapt an RDF4J {@link Model} as a 
-	 * Commons RDF {@link Graph}.
+	 * Adapt an RDF4J {@link Model} as a Commons RDF {@link Graph}.
 	 * <p>
-	 * Changes to the graph are reflected in the model, and
-	 * vice versa. 
+	 * Changes to the graph are reflected in the model, and vice versa.
 	 * 
-	 * @param model RDF4J {@link Model} to adapt.
+	 * @param model
+	 *            RDF4J {@link Model} to adapt.
 	 * @return Adapted {@link Graph}.
 	 */
 	public RDF4JGraph asRDFTermGraph(Model model) {
@@ -176,43 +168,40 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	}
 
 	/**
-	 * Adapt an RDF4J {@link Repository} as a 
-	 * Commons RDF {@link Graph}.
+	 * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
 	 * <p>
-	 * Changes to the graph are reflected in the repository, and
-	 * vice versa. 
+	 * Changes to the graph are reflected in the repository, and vice versa.
 	 * 
-	 * @param model RDF4J {@link Repository} to connect to.
+	 * @param model
+	 *            RDF4J {@link Repository} to connect to.
 	 * @return Adapted {@link Graph}.
 	 */
 	public RDF4JGraph asRDFTermGraph(Repository repository) {
 		return new RepositoryGraphImpl(repository);
-	}	
-	
-	public Statement asStatement(Quad quad) {
-		return valueFactory.createStatement(
-				(org.eclipse.rdf4j.model.Resource) asValue(quad.getSubject()), 
-				(org.eclipse.rdf4j.model.IRI) asValue(quad.getPredicate()), 
-				asValue(quad.getObject()), 				
-				(org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null))
-				);
 	}
 
-	public Statement asStatement(Triple triple) {
-		if (triple instanceof RDF4JTripleLike) { 
-			// This covers both RDF4JQuad and RDF4JTriple
-			RDF4JTripleLike rdf4jTriple = (RDF4JTriple) triple;
+	public Statement asStatement(TripleLike<BlankNodeOrIRI, org.apache.commons.rdf.api.IRI, RDFTerm> tripleLike) {
+		if (tripleLike instanceof RDF4JTripleLike) {
+			// Return original statement - this covers both RDF4JQuad and RDF4JTriple
+			RDF4JTripleLike rdf4jTriple = (RDF4JTripleLike) tripleLike;
 			return rdf4jTriple.asStatement();
 		}
-		return valueFactory.createStatement(
-				(org.eclipse.rdf4j.model.Resource) asValue(triple.getSubject()), 
-				(org.eclipse.rdf4j.model.IRI) asValue(triple.getPredicate()), 
-				asValue(triple.getObject()));
+
+		org.eclipse.rdf4j.model.Resource subject = (org.eclipse.rdf4j.model.Resource) asValue(tripleLike.getSubject());
+		org.eclipse.rdf4j.model.IRI predicate = (org.eclipse.rdf4j.model.IRI) asValue(tripleLike.getPredicate());
+		Value object = asValue(tripleLike.getObject());
+		
+		org.eclipse.rdf4j.model.Resource context = null;
+		if (tripleLike instanceof Quad) {
+			Quad quad = (Quad) tripleLike;
+			context = (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null));
+		}
+		
+		return valueFactory.createStatement(subject, predicate, object, context);
 	}
-	
+
 	/**
-	 * Adapt a RDF4J {@link Statement} as a Commons RDF 
-	 * {@link Triple}.
+	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}.
 	 * 
 	 * @param statement
 	 * @return A {@link RDF4JTriple} that is equivalent to the statement
@@ -220,14 +209,15 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	public RDF4JTriple asTriple(final Statement statement) {
 		return new TripleImpl(statement, salt);
 	}
-	
+
 	/**
 	 * Adapt a Commons RDF {@link RDFTerm} as a RDF4J {@link Value}.
 	 * <p>
 	 * The value will be of the same kind as the term, e.g. a
 	 * {@link org.apache.commons.rdf.api.BlankNode} is converted to a
-	 * {@link org.eclipse.rdf4j.model.BNode}, a {@link org.apache.commons.rdf.api.IRI}
-	 * is converted to a {@link org.eclipse.rdf4j.model.IRI} and a
+	 * {@link org.eclipse.rdf4j.model.BNode}, a
+	 * {@link org.apache.commons.rdf.api.IRI} is converted to a
+	 * {@link org.eclipse.rdf4j.model.IRI} and a
 	 * {@link org.apache.commons.rdf.api.Literal} is converted to a
 	 * {@link org.eclipse.rdf4j.model.Literal}.
 	 * <p>
@@ -236,20 +226,21 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * <p>
 	 * If the provided term is an instance of {@link RDF4JTerm}, then the
 	 * {@link RDF4JTerm#asValue()} is returned without any conversion. Note that
-	 * this could mean that a {@link Value} from a different kind of 
+	 * this could mean that a {@link Value} from a different kind of
 	 * {@link ValueFactory} could be returned.
 	 * 
-	 * @param term RDFTerm to adapt to RDF4J Value 
+	 * @param term
+	 *            RDFTerm to adapt to RDF4J Value
 	 * @return Adapted RDF4J {@link Value}
 	 */
-	public Value asValue(RDFTerm term) {		
-		if (term == null) { 
+	public Value asValue(RDFTerm term) {
+		if (term == null) {
 			return null;
 		}
 		if (term instanceof RDF4JTerm) {
 			// One of our own - avoid converting again.
 			// (This is crucial to avoid double-escaping in BlankNode)
-			return ((RDF4JTerm<?>)term).asValue();
+			return ((RDF4JTerm<?>) term).asValue();
 		}
 		if (term instanceof org.apache.commons.rdf.api.IRI) {
 			org.apache.commons.rdf.api.IRI iri = (org.apache.commons.rdf.api.IRI) term;
@@ -262,13 +253,14 @@ public class RDF4JTermFactory implements RDFTermFactory {
 				String lang = literal.getLanguageTag().get();
 				return valueFactory.createLiteral(label, lang);
 			}
-			org.eclipse.rdf4j.model.IRI dataType = (org.eclipse.rdf4j.model.IRI ) asValue(literal.getDatatype());
+			org.eclipse.rdf4j.model.IRI dataType = (org.eclipse.rdf4j.model.IRI) asValue(literal.getDatatype());
 			return valueFactory.createLiteral(label, dataType);
 		}
 		if (term instanceof BlankNode) {
-			// This is where it gets tricky to support round trips!			
+			// This is where it gets tricky to support round trips!
 			BlankNode blankNode = (BlankNode) term;
-			// FIXME: The uniqueReference might not be a valid BlankNode identifier..
+			// FIXME: The uniqueReference might not be a valid BlankNode
+			// identifier..
 			// does it have to be in RDF4J?
 			return valueFactory.createBNode(blankNode.uniqueReference());
 		}
@@ -278,29 +270,30 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	@Override
 	public RDF4JBlankNode createBlankNode() throws UnsupportedOperationException {
 		BNode bnode = valueFactory.createBNode();
-		return (RDF4JBlankNode)asRDFTerm(bnode);
+		return (RDF4JBlankNode) asRDFTerm(bnode);
 	}
 
 	@Override
 	public RDF4JBlankNode createBlankNode(String name) throws UnsupportedOperationException {
 		BNode bnode = valueFactory.createBNode(name);
-		return (RDF4JBlankNode)asRDFTerm(bnode);
+		return (RDF4JBlankNode) asRDFTerm(bnode);
 	}
 
 	@Override
 	public RDF4JGraph createGraph() throws UnsupportedOperationException {
 		return asRDFTermGraph(new LinkedHashModel());
 	}
-	
+
 	@Override
 	public RDF4JIRI createIRI(String iri) throws IllegalArgumentException, UnsupportedOperationException {
 		return (RDF4JIRI) asRDFTerm(valueFactory.createIRI(iri));
 	}
 
 	@Override
-	public RDF4JLiteral createLiteral(String lexicalForm) throws IllegalArgumentException, UnsupportedOperationException {
+	public RDF4JLiteral createLiteral(String lexicalForm)
+			throws IllegalArgumentException, UnsupportedOperationException {
 		org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm);
-		return (RDF4JLiteral)asRDFTerm(lit);
+		return (RDF4JLiteral) asRDFTerm(lit);
 	}
 
 	@Override
@@ -308,25 +301,22 @@ public class RDF4JTermFactory implements RDFTermFactory {
 			throws IllegalArgumentException, UnsupportedOperationException {
 		org.eclipse.rdf4j.model.IRI iri = valueFactory.createIRI(dataType.getIRIString());
 		org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm, iri);
-		return (org.apache.commons.rdf.api.Literal)asRDFTerm(lit);
+		return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit);
 	}
 
 	@Override
 	public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, String languageTag)
 			throws IllegalArgumentException, UnsupportedOperationException {
 		org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm, languageTag);
-		return (org.apache.commons.rdf.api.Literal)asRDFTerm(lit);
+		return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit);
 	}
 
 	@Override
 	public RDF4JTriple createTriple(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object)
 			throws IllegalArgumentException, UnsupportedOperationException {
-		final Statement statement = valueFactory.createStatement(
-				(org.eclipse.rdf4j.model.Resource) asValue(subject), 
-				(org.eclipse.rdf4j.model.IRI) asValue(predicate), 
-				asValue(object));
+		final Statement statement = valueFactory.createStatement((org.eclipse.rdf4j.model.Resource) asValue(subject),
+				(org.eclipse.rdf4j.model.IRI) asValue(predicate), asValue(object));
 		return asTriple(statement);
 	}
 
-	
 }


[4/8] incubator-commonsrdf git commit: some attempt to propagate a selected Resource[] contexts

Posted by st...@apache.org.
some attempt to propagate a selected Resource[] contexts

(currently broken)


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

Branch: refs/heads/rdf4j
Commit: ccd9e97226cdb6892f0db15fe7db73b83433f347
Parents: e477b93
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 15:53:47 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 15:53:47 2016 +0100

----------------------------------------------------------------------
 .../rdf4j/impl/AbstractRepositoryGraphLike.java |   1 -
 .../rdf/rdf4j/impl/RepositoryDatasetImpl.java   | 142 +++++++++++++++++++
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     |  18 +--
 3 files changed, 152 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ccd9e972/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
index 1283e2e..b048674 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
@@ -22,7 +22,6 @@ import java.util.Optional;
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.RDFTerm;
-//import org.apache.commons.rdf.api.tripleLike;
 import org.apache.commons.rdf.api.TripleLike;
 import org.apache.commons.rdf.rdf4j.RDF4JGraphLike;
 import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ccd9e972/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
new file mode 100644
index 0000000..50c7d20
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java
@@ -0,0 +1,142 @@
+/**
+ * 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.ConcurrentModificationException;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.Dataset;
+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.RDF4JDataset;
+import org.apache.commons.rdf.rdf4j.RDF4JQuad;
+import org.apache.commons.rdf.rdf4j.RDF4JTriple;
+import org.eclipse.rdf4j.common.iteration.Iterations;
+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;
+
+public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> implements RDF4JDataset, Dataset {
+
+
+	@Override
+	public void add(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		Resource context = (Resource) rdf4jTermFactory.asValue(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);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.add(subj, pred, obj,  context);
+			conn.commit();
+		}
+	}
+
+	@Override
+	public boolean contains(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		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);
+		Resource[] contexts = asContexts(graphName);
+		
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			return conn.hasStatement(subj, pred, obj, includeInferred, contexts);
+		}
+	}
+
+	private Resource[] asContexts(Optional<BlankNodeOrIRI> graphName) {
+		Resource[] contexts;
+		if (graphName == null) {
+			// no contexts == any contexts
+			 contexts = new Resource[0];
+		} else {	
+			BlankNodeOrIRI g = graphName.orElse(null);
+			Resource context = (Resource) rdf4jTermFactory.asValue(g);
+			contexts = new Resource[] { context };
+		}
+		return contexts;
+	}
+
+	@Override
+	public void remove(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		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);
+		Resource[] contexts = asContexts(graphName);
+
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.remove(subj, pred, obj, contexts);
+			conn.commit();
+		}
+	}
+
+	@Override
+	public Stream<RDF4JQuad> stream() {
+		return stream(null, null, null, null);
+	}
+	
+	@Override
+	public Stream<RDF4JQuad> stream(Optional<BlankNodeOrIRI> graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		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);
+		Resource[] contexts = asContexts(graphName);
+		
+		RepositoryConnection conn = getRepositoryConnection();
+		// NOTE: connection will be closed outside by the Iterations.stream()
+		RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj, includeInferred, contexts);
+		return Iterations.stream(statements).map(this::asTripleLike);
+	}
+
+	@Override
+	protected RDF4JQuad asTripleLike(Statement s) {
+		return rdf4jTermFactory.asQuad(s);
+	}
+
+	@Override
+	public Iterable<Quad> iterate() throws ConcurrentModificationException, IllegalStateException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Graph getGraph() {
+		// TODO:  Specify default context only
+		return new RepositoryGraphImpl(repository, includeInferred);		
+	}
+
+	@Override
+	public Optional<Graph> getGraph(BlankNodeOrIRI graphName) {
+		Resource context = (Resource) rdf4jTermFactory.asValue(graphName);
+		return new RepositoryGraphImpl(repository, includeInferred, context);		
+	}
+
+	@Override
+	public Stream<BlankNodeOrIRI> getGraphNames() {
+		RepositoryConnection conn = getRepositoryConnection();
+		RepositoryResult<Resource> contexts = conn.getContextIDs();
+		// NOTE: connection will be closed outside by the Iterations.stream()
+		return Iterations.stream(contexts).map(g -> (BlankNodeOrIRI) rdf4jTermFactory.asRDFTerm(g));
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ccd9e972/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 1fe1498..574ddb1 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
@@ -36,12 +36,16 @@ import org.eclipse.rdf4j.repository.RepositoryResult;
 
 public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> implements Graph, RDF4JGraph {
 
+	private Resource[] contextFilter;
+
 	public RepositoryGraphImpl(Repository repository) {
-		super(repository, false);
+		// All contexts (supplying null would mean default graph only)
+		this(repository, false);
 	}
 
-	public RepositoryGraphImpl(Repository repository, boolean includeInferred) {
+	public RepositoryGraphImpl(Repository repository, boolean includeInferred, Resource... contextFilter) {
 		super(repository, includeInferred);
+		this.contextFilter = contextFilter;
 	}
 
 	@Override
@@ -50,12 +54,10 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
 		Value obj = rdf4jTermFactory.asValue(object);
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.add(subj, pred, obj);
+			conn.add(subj, pred, obj, contextFilter);
 			conn.commit();
 		}
 	}
-	
-	
 
 	@Override
 	public boolean contains(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
@@ -63,7 +65,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
 		Value obj = rdf4jTermFactory.asValue(object);
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			return conn.hasStatement(subj, pred, obj, includeInferred);
+			return conn.hasStatement(subj, pred, obj, includeInferred, contextFilter);
 		}
 	}
 
@@ -73,7 +75,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
 		Value obj = rdf4jTermFactory.asValue(object);
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.remove(subj, pred, obj);
+			conn.remove(subj, pred, obj, contextFilter);
 			conn.commit();
 		}
 	}
@@ -90,7 +92,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		Value obj = rdf4jTermFactory.asValue(object);
 		RepositoryConnection conn = getRepositoryConnection();
 		// FIXME: Is it OK that we don't close the connection?
-		RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj);
+		RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj, contextFilter);
 		return Iterations.stream(statements).map(this::asTripleLike);
 	}
 	


[7/8] incubator-commonsrdf git commit: Added DatasetGraphView

Posted by st...@apache.org.
Added DatasetGraphView


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/580484c9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/580484c9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/580484c9

Branch: refs/heads/rdf4j
Commit: 580484c9d7d02d34b64e5276744c1f644dbbd2f2
Parents: 14e505e
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Tue Jun 14 16:44:24 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Tue Jun 14 16:44:24 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/simple/DatasetGraphView.java    | 138 +++++++++++++++++++
 .../apache/commons/rdf/simple/DatasetImpl.java  |   8 +-
 2 files changed, 139 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/580484c9/simple/src/main/java/org/apache/commons/rdf/simple/DatasetGraphView.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/DatasetGraphView.java b/simple/src/main/java/org/apache/commons/rdf/simple/DatasetGraphView.java
new file mode 100644
index 0000000..a347c3e
--- /dev/null
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/DatasetGraphView.java
@@ -0,0 +1,138 @@
+/**
+ * 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.simple;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import org.apache.commons.rdf.api.BlankNode;
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.Dataset;
+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.api.Triple;
+
+/**
+ * A {@link Graph} view on a {@link Dataset}.
+ * <p>
+ * This view is backed by a {@link Dataset}, and can be constructed in two ways:
+ * 
+ * <dl>
+ * <dt>{@link #DatasetGraphView(Dataset)}</dt>
+ * <dd>Expose a <em>union graph</em> view of the Dataset, where all the
+ * {@link Quad}s of the Dataset is represented as a {@link Triple}. Adding
+ * triples will add them to the <em>default graph</em>, while removing triples
+ * will remove from all graphs.</dd>
+* 
+ * <dt>{@link #DatasetGraphView(Dataset, IRI)}</dt>
+ * <dd>Expose a particular graph of the Dataset, either named by an {@link IRI}, a
+ * {@link BlankNode}, or  <code>null</code> for the <em>default graph</em>.</dd>
+ * </dl>
+ * <p>
+ * Changes in the Graph are reflected directly in the Dataset and vice versa.  
+ * This class is thread-safe is the underlying Dataset is thread-safe.
+ */
+public class DatasetGraphView implements Graph {
+
+	private final boolean unionGraph;
+	private final BlankNodeOrIRI namedGraph;
+	private final Dataset dataset;
+
+	public DatasetGraphView(Dataset dataset) {
+		this.dataset = dataset;
+		this.namedGraph = null;
+		this.unionGraph = true;
+	}
+
+	public DatasetGraphView(Dataset dataset, BlankNodeOrIRI namedGraph) {
+		this.dataset = dataset;
+		this.namedGraph = namedGraph;
+		this.unionGraph = false;
+	}
+
+	@Override
+	public void close() throws Exception {
+		dataset.close();
+
+	}
+
+	@Override
+	public void add(Triple triple) {
+		dataset.add(namedGraph, triple.getSubject(), triple.getPredicate(), triple.getObject());
+	}
+
+	@Override
+	public void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		dataset.add(namedGraph, subject, predicate, object);
+	}
+
+	@Override
+	public boolean contains(Triple triple) {
+		return dataset.contains(unionOrNamedGraph(), triple.getSubject(), triple.getPredicate(), triple.getObject());
+	}
+
+	private Optional<BlankNodeOrIRI> unionOrNamedGraph() {
+		if (unionGraph) {
+			return null;
+		}
+		return Optional.ofNullable(namedGraph);
+	}
+
+	@Override
+	public boolean contains(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		return dataset.contains(unionOrNamedGraph(), subject, predicate, object);
+	}
+
+	@Override
+	public void remove(Triple triple) {
+		dataset.remove(unionOrNamedGraph(), triple.getSubject(), triple.getPredicate(), triple.getObject());
+	}
+
+	@Override
+	public void remove(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		dataset.remove(unionOrNamedGraph(), subject, predicate, object);
+	}
+
+	@Override
+	public void clear() {
+		dataset.remove(unionOrNamedGraph(), null, null, null);
+	}
+
+	@Override
+	public long size() {
+		return stream().count();
+	}
+
+	@Override
+	public Stream<? extends Triple> stream() {
+		return stream(null, null, null);
+	}
+
+	@Override
+	public Stream<? extends Triple> stream(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+		Stream<Triple> stream = dataset.stream(unionOrNamedGraph(), subject, predicate, object).map(Quad::asTriple);
+		if (unionGraph) {
+			// remove duplicates
+			return stream.distinct();
+		}
+		return stream;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/580484c9/simple/src/main/java/org/apache/commons/rdf/simple/DatasetImpl.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/DatasetImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/DatasetImpl.java
index 9de358f..c372012 100644
--- a/simple/src/main/java/org/apache/commons/rdf/simple/DatasetImpl.java
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/DatasetImpl.java
@@ -204,13 +204,7 @@ final class DatasetImpl implements Dataset {
 
 	@Override
 	public Optional<Graph> getGraph(BlankNodeOrIRI graphName) {
-		// NOTE: Always returns a new copy
-		Graph g = new GraphImpl(factory);
-		stream(Optional.ofNullable(graphName), null, null, null)
-			.map(Quad::asTriple)
-			.sequential()
-			.forEach(g::add);
-		return Optional.of(g);
+		return Optional.of(new DatasetGraphView(this, graphName));
 	}
 
 	@Override


[5/8] incubator-commonsrdf git commit: RepositoryDatasetImpl constructors

Posted by st...@apache.org.
RepositoryDatasetImpl constructors


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

Branch: refs/heads/rdf4j
Commit: b6e938c54c5d45a79f5d88b0661688bd60dc7315
Parents: ccd9e97
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 17:48:38 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 17:48:38 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/rdf4j/impl/RepositoryDatasetImpl.java  | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b6e938c5/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 50c7d20..7e18e5e 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
@@ -29,16 +29,23 @@ import org.apache.commons.rdf.api.Quad;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.rdf4j.RDF4JDataset;
 import org.apache.commons.rdf.rdf4j.RDF4JQuad;
-import org.apache.commons.rdf.rdf4j.RDF4JTriple;
 import org.eclipse.rdf4j.common.iteration.Iterations;
 import org.eclipse.rdf4j.model.Resource;
 import org.eclipse.rdf4j.model.Statement;
 import org.eclipse.rdf4j.model.Value;
+import org.eclipse.rdf4j.repository.Repository;
 import org.eclipse.rdf4j.repository.RepositoryConnection;
 import org.eclipse.rdf4j.repository.RepositoryResult;
 
 public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> implements RDF4JDataset, Dataset {
 
+	public RepositoryDatasetImpl(Repository repository, boolean includeInferred) {
+		super(repository, includeInferred);
+	}
+
+	public RepositoryDatasetImpl(Repository repository) {
+		super(repository);
+	}
 
 	@Override
 	public void add(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
@@ -127,8 +134,8 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 
 	@Override
 	public Optional<Graph> getGraph(BlankNodeOrIRI graphName) {
-		Resource context = (Resource) rdf4jTermFactory.asValue(graphName);
-		return new RepositoryGraphImpl(repository, includeInferred, context);		
+		Resource context = (Resource) rdf4jTermFactory.asValue(graphName);		
+		return Optional.of(new RepositoryGraphImpl(repository, includeInferred, context));		
 	}
 
 	@Override


[6/8] incubator-commonsrdf git commit: Use contextFilter for graph modifications

Posted by st...@apache.org.
Use contextFilter for graph modifications


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/4dab5103
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/4dab5103
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/4dab5103

Branch: refs/heads/rdf4j
Commit: 4dab5103d56f396dd17a3dd67f0980c0bad525c4
Parents: b6e938c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Tue Jun 14 16:40:37 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Tue Jun 14 16:40:37 2016 +0100

----------------------------------------------------------------------
 .../apache/commons/rdf/rdf4j/RDF4JGraph.java    |  4 ++
 .../rdf4j/impl/AbstractRepositoryGraphLike.java | 46 +------------------
 .../rdf/rdf4j/impl/RepositoryDatasetImpl.java   | 46 ++++++++++++++++++-
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     | 48 ++++++++++++++++++++
 4 files changed, 98 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/4dab5103/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 d7cb50e..5333f31 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
@@ -19,11 +19,15 @@ package org.apache.commons.rdf.rdf4j;
 
 import org.apache.commons.rdf.api.Graph;
 import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
+import org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl;
 
 
 /**
  * Marker interface for RDF4J implementations of Graph.
  * 
+ * @see ModelGraphImpl
+ * @see RepositoryGraphImpl
  */
 public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
 	

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/4dab5103/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
index b048674..bd47436 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
@@ -61,51 +61,7 @@ public abstract class AbstractRepositoryGraphLike<T extends TripleLike<BlankNode
 		// down
 	}
 
-	@Override
-	public void add(T tripleLike) {
-		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.add(statement);
-			conn.commit();
-		}
-	}
-
-
-	@Override
-	public boolean contains(T tripleLike) {
-		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			return conn.hasStatement(statement, includeInferred);
-		}
-	}
-
-	@Override
-	public void remove(T tripleLike) {
-		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.remove(statement);
-			conn.commit();
-		}
-	}
-
-	@Override
-	public void clear() {
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.clear();
-			conn.commit();
-		}
-	}
-
-	@Override
-	public long size() {
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			// FIXME: The below might contain duplicate statements across
-			// multiple contexts
-			return conn.size();
-		}
-
-	}
-
+	
 	protected abstract T asTripleLike(Statement s);
 
 	protected RepositoryConnection getRepositoryConnection() {

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/4dab5103/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 7e18e5e..0fb8a78 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
@@ -47,6 +47,50 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 		super(repository);
 	}
 
+
+	@Override
+	public void add(Quad tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.add(statement);
+			conn.commit();
+		}
+	}
+
+
+	@Override
+	public boolean contains(Quad tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			return conn.hasStatement(statement, includeInferred);
+		}
+	}
+
+	@Override
+	public void remove(Quad tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.remove(statement);
+			conn.commit();
+		}
+	}
+
+	@Override
+	public void clear() {
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.clear();
+			conn.commit();
+		}
+	}
+
+	@Override
+	public long size() {
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			return conn.size();
+		}
+	}
+
+	
 	@Override
 	public void add(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
 		Resource context = (Resource) rdf4jTermFactory.asValue(graphName);
@@ -128,7 +172,7 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 
 	@Override
 	public Graph getGraph() {
-		// TODO:  Specify default context only
+		// TODO:  Specify default context only? (the below will give the union graph)
 		return new RepositoryGraphImpl(repository, includeInferred);		
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/4dab5103/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 574ddb1..2950579 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
@@ -48,6 +48,54 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		this.contextFilter = contextFilter;
 	}
 
+
+	@Override
+	public void add(Triple tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.add(statement, contextFilter);
+			conn.commit();
+		}
+	}
+
+
+	@Override
+	public boolean contains(Triple tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			return conn.hasStatement(statement, includeInferred, contextFilter);
+		}
+	}
+
+	@Override
+	public void remove(Triple tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.remove(statement, contextFilter);
+			conn.commit();
+		}
+	}
+
+	@Override
+	public void clear() {
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.clear(contextFilter);
+			conn.commit();
+		}
+	}
+
+	@Override
+	public long size() {
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			if (! includeInferred && contextFilter.length == 0) { 
+				return conn.size();
+			} else {
+				return stream().count();
+			}
+		}
+	}
+
+	
 	@Override
 	public void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
 		Resource subj = (Resource) rdf4jTermFactory.asValue(subject);


[8/8] incubator-commonsrdf git commit: Merge branch 'quad' into rdf4j

Posted by st...@apache.org.
Merge branch 'quad' into rdf4j


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/81f195f3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/81f195f3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/81f195f3

Branch: refs/heads/rdf4j
Commit: 81f195f3183bd8a22063a1d719182e74bd83203c
Parents: 4dab510 580484c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Tue Jun 14 16:44:45 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Tue Jun 14 16:44:45 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/simple/DatasetGraphView.java    | 138 +++++++++++++++++++
 .../apache/commons/rdf/simple/DatasetImpl.java  |   8 +-
 2 files changed, 139 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[3/8] incubator-commonsrdf git commit: Split out AbstractRepositoryGraphLike

Posted by st...@apache.org.
Split out AbstractRepositoryGraphLike

.. to be used by RepositoryDataset


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

Branch: refs/heads/rdf4j
Commit: e477b937ecd9b20970ff720e2711ee844b9e9e94
Parents: 3af404e
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 15:26:26 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 15:27:13 2016 +0100

----------------------------------------------------------------------
 .../apache/commons/rdf/rdf4j/RDF4JDataset.java  |  30 +++++
 .../apache/commons/rdf/rdf4j/RDF4JGraph.java    |  33 +----
 .../commons/rdf/rdf4j/RDF4JGraphLike.java       |  63 ++++++++++
 .../rdf4j/impl/AbstractRepositoryGraphLike.java | 125 +++++++++++++++++++
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     |  94 ++------------
 5 files changed, 230 insertions(+), 115 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e477b937/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
new file mode 100644
index 0000000..b0ca08d
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JDataset.java
@@ -0,0 +1,30 @@
+/**
+ * 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;
+
+import org.apache.commons.rdf.api.Dataset;
+import org.apache.commons.rdf.api.Quad;
+
+
+/**
+ * Marker interface for RDF4J implementations of Dataset.
+ * 
+ */
+public interface RDF4JDataset extends Dataset, RDF4JGraphLike<Quad> {
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e477b937/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 abc4a98..d7cb50e 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
@@ -17,43 +17,14 @@
  */
 package org.apache.commons.rdf.rdf4j;
 
-import java.util.Optional;
-
 import org.apache.commons.rdf.api.Graph;
-import org.eclipse.rdf4j.model.Model;
-import org.eclipse.rdf4j.repository.Repository;
+import org.apache.commons.rdf.api.Triple;
 
 
 /**
  * Marker interface for RDF4J implementations of Graph.
  * 
  */
-public interface RDF4JGraph extends Graph {
-	
-	/**
-	 * Return the corresponding RDF4J {@link Model}, if present.
-	 * <p>
-	 * The return value is {@link Optional#isPresent()} if this graph is
-	 * backed by a Model.
-	 * <p>
-	 * Changes to the Model are reflected in this Graph, and
-	 * vice versa.
-	 * 
-	 * @return The corresponding RDF4J Model.
-	 */
-	public Optional<Model> asModel();
+public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
 	
-	/**
-	 * Return the corresponding RDF4J {@link Repository}, if present.
-	 * <p>
-	 * The return value is {@link Optional#isPresent()} if this graph is
-	 * backed by a Repository.
-	 * <p>
-	 * Changes to the Repository are reflected in this Graph, and
-	 * vice versa.
-	 * 
-	 * @return The corresponding RDF4J Repository.
-	 */
-	public Optional<Repository> asRepository();
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e477b937/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
new file mode 100644
index 0000000..1750bd8
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
@@ -0,0 +1,63 @@
+/**
+ * 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;
+
+import java.util.Optional;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.GraphLike;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.commons.rdf.api.TripleLike;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.repository.Repository;
+
+/**
+ * Marker interface for RDF4J implementations of GraphLike.
+ * 
+ * @see RDF4JGraph
+ * 
+ */
+public interface RDF4JGraphLike<T extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm>>
+		extends GraphLike<T, BlankNodeOrIRI, IRI, RDFTerm>, AutoCloseable {
+
+	/**
+	 * Return the corresponding RDF4J {@link Model}, if present.
+	 * <p>
+	 * The return value is {@link Optional#isPresent()} if this is backed by a
+	 * Model.
+	 * <p>
+	 * Changes to the Model are reflected in both directions.
+	 * 
+	 * @return The corresponding RDF4J Model.
+	 */
+	public Optional<Model> asModel();
+
+	/**
+	 * Return the corresponding RDF4J {@link Repository}, if present.
+	 * <p>
+	 * The return value is {@link Optional#isPresent()} if this is backed by a
+	 * Repository.
+	 * <p>
+	 * Changes to the Repository are reflected in both directions.
+	 * 
+	 * @return The corresponding RDF4J Repository.
+	 */
+	public Optional<Repository> asRepository();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e477b937/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
new file mode 100644
index 0000000..1283e2e
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
@@ -0,0 +1,125 @@
+/**
+ * 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.Optional;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.RDFTerm;
+//import org.apache.commons.rdf.api.tripleLike;
+import org.apache.commons.rdf.api.TripleLike;
+import org.apache.commons.rdf.rdf4j.RDF4JGraphLike;
+import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Statement;
+import org.eclipse.rdf4j.repository.Repository;
+import org.eclipse.rdf4j.repository.RepositoryConnection;
+
+public abstract class AbstractRepositoryGraphLike<T extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm>>
+		implements RDF4JGraphLike<T> {
+
+	protected Repository repository;
+	protected boolean includeInferred;
+	protected boolean shouldWeShutdown = false;
+	protected RDF4JTermFactory rdf4jTermFactory;
+
+	public AbstractRepositoryGraphLike(Repository repository) {
+		this(repository, false);
+	}
+
+	public AbstractRepositoryGraphLike(Repository repository, boolean includeInferred) {
+		this.repository = repository;
+		this.includeInferred = includeInferred;
+		if (!repository.isInitialized()) {
+			repository.initialize();
+			shouldWeShutdown = true;
+		}
+		rdf4jTermFactory = new RDF4JTermFactory(repository.getValueFactory());
+	}
+
+	@Override
+	public void close() throws Exception {
+		if (shouldWeShutdown) {
+			repository.shutDown();
+		}
+		// else: repository was initialized outside, so we should not shut it
+		// down
+	}
+
+	@Override
+	public void add(T tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.add(statement);
+			conn.commit();
+		}
+	}
+
+
+	@Override
+	public boolean contains(T tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			return conn.hasStatement(statement, includeInferred);
+		}
+	}
+
+	@Override
+	public void remove(T tripleLike) {
+		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.remove(statement);
+			conn.commit();
+		}
+	}
+
+	@Override
+	public void clear() {
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			conn.clear();
+			conn.commit();
+		}
+	}
+
+	@Override
+	public long size() {
+		try (RepositoryConnection conn = getRepositoryConnection()) {
+			// FIXME: The below might contain duplicate statements across
+			// multiple contexts
+			return conn.size();
+		}
+
+	}
+
+	protected abstract T asTripleLike(Statement s);
+
+	protected RepositoryConnection getRepositoryConnection() {
+		return repository.getConnection();
+	}
+
+	public Optional<Repository> asRepository() {
+		return Optional.of(repository);
+	}
+
+	@Override
+	public Optional<Model> asModel() {
+		return Optional.empty();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e477b937/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 2e608a1..1fe1498 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
@@ -17,7 +17,6 @@
  */
 package org.apache.commons.rdf.rdf4j.impl;
 
-import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -26,10 +25,8 @@ import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.rdf4j.RDF4JGraph;
-import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
 import org.apache.commons.rdf.rdf4j.RDF4JTriple;
 import org.eclipse.rdf4j.common.iteration.Iterations;
-import org.eclipse.rdf4j.model.Model;
 import org.eclipse.rdf4j.model.Resource;
 import org.eclipse.rdf4j.model.Statement;
 import org.eclipse.rdf4j.model.Value;
@@ -37,43 +34,14 @@ import org.eclipse.rdf4j.repository.Repository;
 import org.eclipse.rdf4j.repository.RepositoryConnection;
 import org.eclipse.rdf4j.repository.RepositoryResult;
 
-public class RepositoryGraphImpl implements Graph, RDF4JGraph {
-
-	private Repository repository;
-	private boolean includeInferred;
-	boolean shouldWeShutdown = false;
-	private RDF4JTermFactory rdf4jTermFactory;
+public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> implements Graph, RDF4JGraph {
 
 	public RepositoryGraphImpl(Repository repository) {
-		this(repository, false);
+		super(repository, false);
 	}
 
 	public RepositoryGraphImpl(Repository repository, boolean includeInferred) {
-		this.repository = repository;
-		this.includeInferred = includeInferred;
-		if (!repository.isInitialized()) {
-			repository.initialize();
-			shouldWeShutdown = true;
-		}
-		rdf4jTermFactory = new RDF4JTermFactory(repository.getValueFactory());
-	}
-
-	@Override
-	public void close() throws Exception {
-		if (shouldWeShutdown) {
-			repository.shutDown();
-		}
-		// else: repository was initialized outside, so we should not shut it
-		// down
-	}
-
-	@Override
-	public void add(Triple triple) {
-		Statement statement = rdf4jTermFactory.asStatement(triple);
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.add(statement);
-			conn.commit();
-		}
+		super(repository, includeInferred);
 	}
 
 	@Override
@@ -86,14 +54,8 @@ public class RepositoryGraphImpl implements Graph, RDF4JGraph {
 			conn.commit();
 		}
 	}
-
-	@Override
-	public boolean contains(Triple triple) {
-		Statement statement = rdf4jTermFactory.asStatement(triple);
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			return conn.hasStatement(statement, includeInferred);
-		}
-	}
+	
+	
 
 	@Override
 	public boolean contains(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
@@ -106,15 +68,6 @@ public class RepositoryGraphImpl implements Graph, RDF4JGraph {
 	}
 
 	@Override
-	public void remove(Triple triple) {
-		Statement statement = rdf4jTermFactory.asStatement(triple);
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.remove(statement);
-			conn.commit();
-		}
-	}
-
-	@Override
 	public void remove(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
 		Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
 		org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
@@ -126,28 +79,10 @@ public class RepositoryGraphImpl implements Graph, RDF4JGraph {
 	}
 
 	@Override
-	public void clear() {
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.clear();
-			conn.commit();
-		}
-	}
-
-	@Override
-	public long size() {
-		try (RepositoryConnection conn = getRepositoryConnection()) {
-			// FIXME: The below might contain duplicate statements across
-			// multiple contexts
-			return conn.size();
-		}
-
-	}
-
-	@Override
 	public Stream<RDF4JTriple> stream() {
 		return stream(null, null, null);
 	}
-
+	
 	@Override
 	public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
 		Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
@@ -156,21 +91,12 @@ public class RepositoryGraphImpl implements Graph, RDF4JGraph {
 		RepositoryConnection conn = getRepositoryConnection();
 		// FIXME: Is it OK that we don't close the connection?
 		RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj);
-		return Iterations.stream(statements).map(rdf4jTermFactory::asTriple);
-
+		return Iterations.stream(statements).map(this::asTripleLike);
 	}
-
-	private RepositoryConnection getRepositoryConnection() {
-		return repository.getConnection();
-	}
-
-	public Optional<Repository> asRepository() {
-		return Optional.of(repository);
-	}
-
+	
 	@Override
-	public Optional<Model> asModel() {
-		return Optional.empty();
+	protected RDF4JTriple asTripleLike(Statement statement) {
+		return rdf4jTermFactory.asTriple(statement);
 	}
 
 }