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/03 13:36:00 UTC

[1/4] incubator-commonsrdf git commit: COMMONSRDF-35 rdf4j add createDataset() using MemoryStore

Repository: incubator-commonsrdf
Updated Branches:
  refs/heads/rdf4j 06711f9c2 -> cd368d588


COMMONSRDF-35 rdf4j add createDataset() using MemoryStore

also: don't initialize/shutdown unless explicitly asked to do so


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

Branch: refs/heads/rdf4j
Commit: ed77aad82ea1cb4c9d5f694753fb9e04dd4a0b95
Parents: 06711f9
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Sat Oct 1 20:28:13 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Sat Oct 1 20:28:34 2016 +0100

----------------------------------------------------------------------
 rdf4j/pom.xml                                   |  9 +-
 .../commons/rdf/rdf4j/RDF4JTermFactory.java     | 88 +++++++++++---------
 .../rdf4j/impl/AbstractRepositoryGraphLike.java | 10 +--
 .../rdf/rdf4j/impl/RepositoryDatasetImpl.java   | 26 +++---
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     |  8 +-
 5 files changed, 74 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ed77aad8/rdf4j/pom.xml
----------------------------------------------------------------------
diff --git a/rdf4j/pom.xml b/rdf4j/pom.xml
index db51613..ce21b98 100644
--- a/rdf4j/pom.xml
+++ b/rdf4j/pom.xml
@@ -121,20 +121,19 @@
 
 
 		<!-- There are multiple RDF4J sail/repository implementations, we use the 
-			below for testing. -->
+			below from RDF4JTermFactory. -->
 		<dependency>
 			<groupId>org.eclipse.rdf4j</groupId>
 			<artifactId>rdf4j-sail-memory</artifactId>
-			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.eclipse.rdf4j</groupId>
-			<artifactId>rdf4j-sail-nativerdf</artifactId>
-			<scope>test</scope>
+			<artifactId>rdf4j-repository-sail</artifactId>
 		</dependency>
+		<!--  and nativerdf for testing -->
 		<dependency>
 			<groupId>org.eclipse.rdf4j</groupId>
-			<artifactId>rdf4j-repository-sail</artifactId>
+			<artifactId>rdf4j-sail-nativerdf</artifactId>
 			<scope>test</scope>
 		</dependency>
 

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ed77aad8/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 32044f1..04598d4 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
@@ -19,7 +19,7 @@ package org.apache.commons.rdf.rdf4j;
 
 import java.util.UUID;
 
-// To avoid confusion, avoid importing 
+// To avoid confusion, avoid importing
 // classes that are in both
 // commons.rdf and openrdf.model (e.g. IRI)
 import org.apache.commons.rdf.api.BlankNode;
@@ -48,6 +48,9 @@ import org.eclipse.rdf4j.model.ValueFactory;
 import org.eclipse.rdf4j.model.impl.LinkedHashModel;
 import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
 import org.eclipse.rdf4j.repository.Repository;
+import org.eclipse.rdf4j.repository.sail.SailRepository;
+import org.eclipse.rdf4j.sail.Sail;
+import org.eclipse.rdf4j.sail.memory.MemoryStore;
 
 /**
  * RDF4J implementation of RDFTermFactory
@@ -96,7 +99,7 @@ import org.eclipse.rdf4j.repository.Repository;
  * is to use the static methods {@link #asRDFTerm(Value, UUID)},
  * {@link #asQuad(Statement, UUID)} or {@link #asTriple(Statement, UUID)} with
  * a provided {@link UUID} salt.
- * 
+ *
  */
 public class RDF4JTermFactory implements RDFTermFactory {
 
@@ -110,7 +113,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * {@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
 	 *            The RDF4J {@link Value} to convert.
 	 * @param salt
@@ -141,7 +144,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 
 	/**
 	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}.
-	 * 
+	 *
 	 * @param statement
 	 *            The statement to convert
 	 * @param salt
@@ -171,18 +174,18 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	/**
 	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Quad}.
 	 * <p>
-	 * For the purpose of {@link BlankNode} equivalence, this 
-	 * method will use an internal salt UUID that is unique per instance of 
-	 * {@link RDF4JTermFactory}. 
+	 * For the purpose of {@link BlankNode} equivalence, this
+	 * method will use an internal salt UUID that is unique per instance of
+	 * {@link RDF4JTermFactory}.
 	 * <p>
 	 * <strong>NOTE:</strong> If combining RDF4J {@link Statement}s
-	 * multiple repositories or models, then their {@link BNode}s 
-	 * may have the same {@link BNode#getID()}, which with this method 
+	 * multiple repositories or models, then their {@link BNode}s
+	 * may have the same {@link BNode#getID()}, which with this method
 	 * would become equivalent according to {@link BlankNode#equals(Object)} and
-	 * {@link BlankNode#uniqueReference()}, 
+	 * {@link BlankNode#uniqueReference()},
 	 * unless a separate {@link RDF4JTermFactory}
-	 * instance is used per RDF4J repository/model.  
-	 * 
+	 * instance is used per RDF4J repository/model.
+	 *
 	 * @see #asQuad(Statement, UUID)
 	 * @param statement
 	 *            The statement to convert
@@ -210,9 +213,9 @@ public class RDF4JTermFactory implements RDFTermFactory {
 		return new QuadImpl(statement, salt);
 	}
 
-	
+
 	/**
-	 * 
+	 *
 	 * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}.
 	 * <p>
 	 * The value will be of the same kind as the term, e.g. a
@@ -223,23 +226,23 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * {@link org.eclipse.rdf4j.model.Literal}. is converted to a
 	 * {@link org.apache.commons.rdf.api.Literal}
 	 * <p>
-	 * For the purpose of {@link BlankNode} equivalence, this 
-	 * method will use an internal salt UUID that is unique per instance of 
-	 * {@link RDF4JTermFactory}. 
+	 * For the purpose of {@link BlankNode} equivalence, this
+	 * method will use an internal salt UUID that is unique per instance of
+	 * {@link RDF4JTermFactory}.
 	 * <p>
 	 * <strong>NOTE:</strong> If combining RDF4J values from
-	 * multiple repositories or models, then their {@link BNode}s 
-	 * may have the same {@link BNode#getID()}, which with this method 
+	 * multiple repositories or models, then their {@link BNode}s
+	 * may have the same {@link BNode#getID()}, which with this method
 	 * would become equivalent according to {@link BlankNode#equals(Object)} and
-	 * {@link BlankNode#uniqueReference()}, 
+	 * {@link BlankNode#uniqueReference()},
 	 * unless a separate {@link RDF4JTermFactory}
-	 * instance is used per RDF4J repository/model.  
-	 * 
+	 * instance is used per RDF4J repository/model.
+	 *
 	 * @param value The RDF4J {@link Value} to convert.
 	 * @param <T>
 	 *            The subclass of {@link Value}, e.g. {@link BNode}
 	 * @return A {@link RDFTerm} that corresponds to the RDF4J value
-	 * @throws IllegalArgumentException if the value is not a BNode, Literal or IRI 
+	 * @throws IllegalArgumentException if the value is not a BNode, Literal or IRI
 	 */
 	public <T extends Value> RDF4JTerm<T> asRDFTerm(T value) {
 		return asRDFTerm(value, salt);
@@ -249,20 +252,20 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Dataset}.
 	 * <p>
 	 * Changes to the dataset are reflected in the repository, and vice versa.
-	 * 
+	 *
 	 * @param repository
 	 *            RDF4J {@link Repository} to connect to.
 	 * @return A {@link Dataset} backed by the RDF4J repository.
 	 */
 	public RDF4JDataset asRDFTermDataset(Repository repository) {
-		return new RepositoryDatasetImpl(repository);
+		return new RepositoryDatasetImpl(repository, false, false);
 	}
 
 	/**
 	 * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Dataset}.
 	 * <p>
 	 * Changes to the dataset are reflected in the repository, and vice versa.
-	 * 
+	 *
 	 * @param repository
 	 *            RDF4J {@link Repository} to connect to.
 	 * @param includeInferred
@@ -270,14 +273,14 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * @return A {@link Dataset} backed by the RDF4J repository.
 	 */
 	public RDF4JDataset asRDFTermDataset(Repository repository, boolean includeInferred) {
-		return new RepositoryDatasetImpl(repository, includeInferred);
+		return new RepositoryDatasetImpl(repository, false, includeInferred);
 	}
-	
+
 	/**
 	 * Adapt an RDF4J {@link Model} as a Commons RDF {@link Graph}.
 	 * <p>
 	 * Changes to the graph are reflected in the model, and vice versa.
-	 * 
+	 *
 	 * @param model
 	 *            RDF4J {@link Model} to adapt.
 	 * @return Adapted {@link Graph}.
@@ -292,7 +295,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * The graph will include triples in any contexts (e.g. the union graph).
 	 * <p>
 	 * Changes to the graph are reflected in the repository, and vice versa.
-	 * 
+	 *
 	 * @param repository
 	 *            RDF4J {@link Repository} to connect to.
 	 * @return A {@link Graph} backed by the RDF4J repository.
@@ -307,7 +310,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * The graph will include triples in any contexts (e.g. the union graph).
 	 * <p>
 	 * Changes to the graph are reflected in the repository, and vice versa.
-	 * 
+	 *
 	 * @param repository
 	 *            RDF4J {@link Repository} to connect to.
 	 * @param includeInferred
@@ -329,10 +332,10 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * If the <code>tripleLike</code> argument is an {@link RDF4JTriple} or
 	 * a {@link RDF4JQuad}, then its {@link RDF4JTripleLike#asStatement()} is
 	 * returned as-is. Note that this means that a {@link RDF4JTriple} would
-	 * preserve its {@link Statement#getContext()}, and that any 
+	 * preserve its {@link Statement#getContext()}, and that any
 	 * {@link BlankNode}s would be deemed equivalent in RDF4J
 	 * if they have the same {@link BNode#getID()}.
-	 * 
+	 *
 	 * @param tripleLike
 	 *            A {@link Triple} or {@link Quad} to adapt
 	 * @return A corresponding {@link Statement}
@@ -371,7 +374,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * according to {@link BlankNode#equals(Object)} and
 	 * {@link BlankNode#uniqueReference()}, unless a separate
 	 * {@link RDF4JTermFactory} instance is used per RDF4J repository/model.
-	 * 
+	 *
 	 * @param statement
 	 *            The RDF4J {@link Statement} to adapt.
 	 * @return A {@link RDF4JTriple} that is equivalent to the statement
@@ -398,7 +401,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * {@link RDF4JTerm#asValue()} is returned without any conversion. Note that
 	 * 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
 	 * @return Adapted RDF4J {@link Value}
@@ -450,6 +453,13 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	}
 
 	@Override
+	public Dataset createDataset() {
+		Sail sail = new MemoryStore();
+		Repository repository = new SailRepository(sail);
+		return asRDFTermDataset(repository);
+	}
+
+	@Override
 	public RDF4JGraph createGraph() throws UnsupportedOperationException {
 		return asRDFTermGraph(new LinkedHashModel());
 	}
@@ -486,7 +496,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 			throws IllegalArgumentException, UnsupportedOperationException {
 		final Statement statement = getValueFactory().createStatement(
 				(org.eclipse.rdf4j.model.Resource) asValue(subject),
-				(org.eclipse.rdf4j.model.IRI) asValue(predicate), 
+				(org.eclipse.rdf4j.model.IRI) asValue(predicate),
 				asValue(object));
 		return asTriple(statement);
 	}
@@ -496,12 +506,12 @@ public class RDF4JTermFactory implements RDFTermFactory {
 			throws IllegalArgumentException, UnsupportedOperationException {
 		final Statement statement = getValueFactory().createStatement(
 				(org.eclipse.rdf4j.model.Resource) asValue(subject),
-				(org.eclipse.rdf4j.model.IRI) asValue(predicate), 
-				asValue(object), 
+				(org.eclipse.rdf4j.model.IRI) asValue(predicate),
+				asValue(object),
 				(org.eclipse.rdf4j.model.Resource)asValue(graphName));
 		return asQuad(statement);
 	}
-	
+
 	public ValueFactory getValueFactory() {
 		return valueFactory;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ed77aad8/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 bd47436..04c77fd 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
@@ -35,26 +35,26 @@ public abstract class AbstractRepositoryGraphLike<T extends TripleLike<BlankNode
 
 	protected Repository repository;
 	protected boolean includeInferred;
-	protected boolean shouldWeShutdown = false;
+	protected boolean handleInitAndShutdown = false;
 	protected RDF4JTermFactory rdf4jTermFactory;
 
 	public AbstractRepositoryGraphLike(Repository repository) {
-		this(repository, false);
+		this(repository, true, false);
 	}
 
-	public AbstractRepositoryGraphLike(Repository repository, boolean includeInferred) {
+	public AbstractRepositoryGraphLike(Repository repository, boolean handleInitAndShutdown, boolean includeInferred) {
 		this.repository = repository;
 		this.includeInferred = includeInferred;
 		if (!repository.isInitialized()) {
 			repository.initialize();
-			shouldWeShutdown = true;
+			handleInitAndShutdown = true;
 		}
 		rdf4jTermFactory = new RDF4JTermFactory(repository.getValueFactory());
 	}
 
 	@Override
 	public void close() throws Exception {
-		if (shouldWeShutdown) {
+		if (handleInitAndShutdown) {
 			repository.shutDown();
 		}
 		// else: repository was initialized outside, so we should not shut it

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ed77aad8/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 fa989a1..04d685c 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
@@ -38,12 +38,12 @@ 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, boolean handleInitAndShutdown, boolean includeInferred) {
+		super(repository, handleInitAndShutdown, includeInferred);
 	}
 
 	public RepositoryDatasetImpl(Repository repository) {
-		super(repository);
+		this(repository, false, false);
 	}
 
 
@@ -84,17 +84,16 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 
 	@Override
 	public long size() {
-		if (includeInferred) { 
+		if (includeInferred) {
 			// We'll need to count them all
 			return stream().count();
-		} 
+		}
 		// else: Ask directly
 		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);
@@ -113,7 +112,6 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 		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);
 		}
@@ -124,7 +122,7 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 		if (graphName == null) {
 			// no contexts == any contexts
 			 contexts = new Resource[0];
-		} else {	
+		} else {
 			BlankNodeOrIRI g = graphName.orElse(null);
 			Resource context = (Resource) rdf4jTermFactory.asValue(g);
 			contexts = new Resource[] { context };
@@ -149,14 +147,14 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 	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);
@@ -171,14 +169,14 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 	@Override
 	public Graph getGraph() {
 		// default context only
-		return new RepositoryGraphImpl(repository, includeInferred, (Resource)null);		
+		return new RepositoryGraphImpl(repository, false, includeInferred, (Resource)null);
 	}
 
 	@Override
 	public Optional<Graph> getGraph(BlankNodeOrIRI graphName) {
 		// NOTE: May be null to indicate default context
-		Resource context = (Resource) rdf4jTermFactory.asValue(graphName);		
-		return Optional.of(new RepositoryGraphImpl(repository, includeInferred, context));		
+		Resource context = (Resource) rdf4jTermFactory.asValue(graphName);
+		return Optional.of(new RepositoryGraphImpl(repository, false, includeInferred, context));
 	}
 
 	@Override
@@ -188,5 +186,5 @@ public class RepositoryDatasetImpl extends AbstractRepositoryGraphLike<Quad> imp
 		// 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/ed77aad8/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 401f221..e62fdc8 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
@@ -39,8 +39,8 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 
 	private final Resource[] contextFilter;
 
-	public RepositoryGraphImpl(Repository repository, boolean includeInferred, boolean unionGraph) {
-		super(repository, includeInferred);
+	public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, boolean unionGraph) {
+		super(repository, handleInitAndShutdown, includeInferred);
 		if (unionGraph) {
 			// no context filter aka any context
 			this.contextFilter = new Resource[] { };
@@ -50,8 +50,8 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		}
 	}
 
-	public RepositoryGraphImpl(Repository repository, boolean includeInferred, Resource... contextFilter) {
-		super(repository, includeInferred);
+	public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, Resource... contextFilter) {
+		super(repository, handleInitAndShutdown, includeInferred);
 		this.contextFilter = contextFilter;
 	}
 


[2/4] incubator-commonsrdf git commit: getContextFilter() -> getContextMask()

Posted by st...@apache.org.
getContextFilter() -> getContextMask()

See
https://github.com/apache/incubator-commonsrdf/pull/24#discussion_r81248908


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

Branch: refs/heads/rdf4j
Commit: 055c7c97146d60a5708281f5e69ae74f75c6bc17
Parents: ed77aad
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Sat Oct 1 20:34:58 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Sat Oct 1 20:34:58 2016 +0100

----------------------------------------------------------------------
 .../apache/commons/rdf/rdf4j/RDF4JGraph.java    | 23 +++++++++++---------
 .../rdf/rdf4j/experimental/RDF4JParser.java     |  4 ++--
 .../rdf4j/impl/AbstractRepositoryGraphLike.java | 12 +++++-----
 .../commons/rdf/rdf4j/impl/ModelGraphImpl.java  |  2 +-
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     |  2 +-
 5 files changed, 23 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/055c7c97/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 396a39b..31c6278 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
@@ -37,30 +37,33 @@ import org.eclipse.rdf4j.repository.Repository;
 public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
 	
 	/**
-	 * Return a copy of the context filter, if present.
+	 * Return a copy of the context mask, if present.
 	 * <p>
-	 * If {@link Optional#isPresent()}, the filter determines which
+	 * If {@link Optional#isPresent()}, the mask determines which
 	 * <em>contexts</em> in the corresponding RDF4J {@link Model} or
 	 * {@link Repository} that this graph reflect. Modifications to the graph
 	 * (e.g. {@link #add(Triple)} will be performed for all the specified
 	 * contexts, while retrieval (e.g. {@link #contains(Triple)}) will succeed
 	 * if the triple is in at least one of the specified contexts.
 	 * <p>
-	 * The context filter array may contain <code>null</code>, indicating the
-	 * default context (the <em>default graph</em> in RDF datasets).
+	 * The context mask array may contain the {@link Resource} 
+	 * <code>null</code>, indicating the default context 
+	 * (the <em>default graph</em> in RDF datasets).
 	 * <p>
-	 * If the context filter is {@link Optional#empty()}, then this is a
+	 * If the context mask is {@link Optional#empty()}, then this is a
 	 * <em>union graph</em> which triples reflecting statements in any contexts.
-	 * Triples added to the graph will be added in the default context
-	 * <code>null</code>.
+	 * Triples added to the graph will be added in the default context, e.g.
+	 * <code>new Resource[1]{null}</code>).
 	 * <p>
-	 * The filter array is a copy, and thus any modifications are not reflected
+	 * Note that the context mask itself cannot be <code>null</code>.
+	 * <p>
+	 * The mask array is a copy, and thus any modifications are not reflected
 	 * in the RDF4JGraph.
 	 * 
-	 * @return The context filter as an array of {@link Resource}s, or
+	 * @return The context mask as an array of {@link Resource}s, or
 	 *         {@link Optional#empty()} indicating the union graph (any
 	 *         context).
 	 */
-	public Optional<Resource[]> getContextFilter();
+	public Optional<Resource[]> getContextMask();
 	
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/055c7c97/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
index c185419..60692dc 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
@@ -180,10 +180,10 @@ public class RDF4JParser extends AbstractRDFParser<RDF4JParser> implements RDFPa
 
 			if (graph.asRepository().isPresent()) {
 				RDFInserter inserter = new RDFInserter(graph.asRepository().get().getConnection());
-				graph.getContextFilter().ifPresent(inserter::enforceContext);
+				graph.getContextMask().ifPresent(inserter::enforceContext);
 				return inserter;
 			}
-			if (graph.asModel().isPresent() && graph.getContextFilter().isPresent()) {
+			if (graph.asModel().isPresent() && graph.getContextMask().isPresent()) {
 				Model model = graph.asModel().get();
 				return new AddToModel(model);
 			}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/055c7c97/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 04c77fd..4ae7d5b 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
@@ -33,10 +33,10 @@ 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 handleInitAndShutdown = false;
-	protected RDF4JTermFactory rdf4jTermFactory;
+	protected final Repository repository;
+	protected final boolean includeInferred;
+	protected final boolean handleInitAndShutdown;
+	protected final RDF4JTermFactory rdf4jTermFactory;
 
 	public AbstractRepositoryGraphLike(Repository repository) {
 		this(repository, true, false);
@@ -45,9 +45,9 @@ public abstract class AbstractRepositoryGraphLike<T extends TripleLike<BlankNode
 	public AbstractRepositoryGraphLike(Repository repository, boolean handleInitAndShutdown, boolean includeInferred) {
 		this.repository = repository;
 		this.includeInferred = includeInferred;
-		if (!repository.isInitialized()) {
+		this.handleInitAndShutdown = handleInitAndShutdown;
+		if (handleInitAndShutdown && !repository.isInitialized()) {
 			repository.initialize();
-			handleInitAndShutdown = true;
 		}
 		rdf4jTermFactory = new RDF4JTermFactory(repository.getValueFactory());
 	}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/055c7c97/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
index 10347e3..f24aede 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
@@ -125,7 +125,7 @@ public final class ModelGraphImpl implements RDF4JGraph {
 	}
 	
 	@Override
-	public Optional<Resource[]> getContextFilter() {
+	public Optional<Resource[]> getContextMask() {
 		// ModelGraph always do the unionGraph
 		return Optional.empty();
 		// TODO: Should we support contextFilter like in RepositoryGraphImpl?

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/055c7c97/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 e62fdc8..47591be 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
@@ -156,7 +156,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		return rdf4jTermFactory.asTriple(statement);
 	}
 
-	public Optional<Resource[]> getContextFilter() {
+	public Optional<Resource[]> getContextMask() {
 		// Make sure we clone
 		return Optional.ofNullable(contextFilter).map(f -> f.clone());		
 	}


[3/4] incubator-commonsrdf git commit: Added Resource <> RDF4JBlankNodeOrIRI

Posted by st...@apache.org.
Added Resource <> RDF4JBlankNodeOrIRI

also removed duplicate asValue() definitions


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

Branch: refs/heads/rdf4j
Commit: b792b7b9dd9c92784e4bc7449dfb1f72daa60af0
Parents: 055c7c9
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Sat Oct 1 20:45:11 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Sat Oct 1 20:45:11 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/rdf4j/RDF4JBlankNode.java       | 17 +++++------
 .../commons/rdf/rdf4j/RDF4JBlankNodeOrIRI.java  | 32 ++++++++++++++++++++
 .../apache/commons/rdf/rdf4j/RDF4JGraph.java    |  3 +-
 .../org/apache/commons/rdf/rdf4j/RDF4JIRI.java  | 17 ++++-------
 .../apache/commons/rdf/rdf4j/RDF4JLiteral.java  | 16 +++-------
 5 files changed, 52 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b792b7b9/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java
index c0523e1..a383831 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNode.java
@@ -17,19 +17,16 @@
  */
 package org.apache.commons.rdf.rdf4j;
 
+import org.apache.commons.rdf.api.BlankNode;
 import org.eclipse.rdf4j.model.BNode;
 
 /**
- * Marker interface for RDF4J implementations of BlankNode.
+ * Marker interface for RDF4J implementations of 
+ * Commons RDF {@link org.apache.commons.rdf.api.BlankNode}.
+ * <p>
+ * The underlying RDF4J {@link BNode} instance can 
+ * be retrieved with {@link #asValue()}.
  * 
  */
-public interface RDF4JBlankNode 
-	extends RDF4JTerm<org.eclipse.rdf4j.model.BNode>, org.apache.commons.rdf.api.BlankNode {
-
-	/**
-	 * Return the corresponding RDF4J {@link BNode}.
-	 * 
-	 * @return The corresponding RDF4J BNode
-	 */
-	BNode asValue();
+public interface RDF4JBlankNode extends RDF4JBlankNodeOrIRI<BNode>, BlankNode {
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b792b7b9/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNodeOrIRI.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNodeOrIRI.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNodeOrIRI.java
new file mode 100644
index 0000000..5c83b55
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JBlankNodeOrIRI.java
@@ -0,0 +1,32 @@
+/**
+ * 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.BlankNodeOrIRI;
+import org.eclipse.rdf4j.model.Resource;
+
+/**
+ * Marker interface for RDF4J implementations of 
+ * Commons RDF {@link BlankNodeOrIRI}
+ * <p>
+ * The underlying RDF4J {@link org.eclipse.rdf4j.model.Resource} 
+ * instance can be retrieved with {@link #asValue()}.
+ */
+public interface RDF4JBlankNodeOrIRI<T extends Resource> 
+	extends RDF4JTerm<T>, BlankNodeOrIRI {
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b792b7b9/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 31c6278..aba3f5d 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,6 +19,7 @@ package org.apache.commons.rdf.rdf4j;
 
 import java.util.Optional;
 
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.Graph;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
@@ -64,6 +65,6 @@ public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
 	 *         {@link Optional#empty()} indicating the union graph (any
 	 *         context).
 	 */
-	public Optional<Resource[]> getContextMask();
+	public Optional<BlankNodeOrIRI[]> getContextMask();
 	
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b792b7b9/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java
index c29e8b2..95b5359 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JIRI.java
@@ -18,18 +18,13 @@
 package org.apache.commons.rdf.rdf4j;
 
 /**
- * Marker interface for RDF4J implementations of IRI.
+ * Marker interface for RDF4J implementations of 
+ * Commons RDF {@link org.apache.commons.rdf.api.IRI}.
+ * <p>
+ * The underlying RDF4J {@link org.eclipse.rdf4j.model.IRI} 
+ * instance can be retrieved with {@link #asValue()}.
  * 
  */
 public interface RDF4JIRI 
-	extends RDF4JTerm<org.eclipse.rdf4j.model.IRI>, org.apache.commons.rdf.api.IRI {
-	
-	/**
-	 * Return the corresponding RDF4J {@link org.eclipse.rdf4j.model.IRI}.
-	 * 
-	 * @return The corresponding RDF4J IRI
-	 */
-	public org.eclipse.rdf4j.model.IRI asValue();
-	
-	
+	extends RDF4JBlankNodeOrIRI<org.eclipse.rdf4j.model.IRI>, org.apache.commons.rdf.api.IRI {
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b792b7b9/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java
index 838074c..445a892 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JLiteral.java
@@ -17,19 +17,13 @@
  */
 package org.apache.commons.rdf.rdf4j;
 
-import org.eclipse.rdf4j.model.Literal;
-
 /**
- * Marker interface for RDF4J implementations of Literal.
- * 
+ * Marker interface for RDF4J implementations of 
+ * Commons RDF {@link org.apache.commons.rdf.api.Literal}.
+ * <p>
+ * The underlying RDF4J {@link org.eclipse.rdf4j.model.Literal} 
+ * instance can be retrieved with {@link #asValue()}.
  */
 public interface RDF4JLiteral 
 	extends RDF4JTerm<org.eclipse.rdf4j.model.Literal>, org.apache.commons.rdf.api.Literal {
-	
-	/**
-	 * Return the corresponding RDF4J {@link org.eclipse.rdf4j.model.Literal}.
-	 * 
-	 * @return The corresponding RDF4J Literal
-	 */
-	Literal asValue();
 }


[4/4] incubator-commonsrdf git commit: COMMONSRDF-35 getContextMask return Set>

Posted by st...@apache.org.
COMMONSRDF-35 getContextMask return Set<RDF4JBlankNodeOrIRI<Resource>>

does not expose the Resource[] array directly


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

Branch: refs/heads/rdf4j
Commit: cd368d5889593dfe21b13123258b1145234a4687
Parents: b792b7b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Oct 3 14:35:11 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Oct 3 14:35:11 2016 +0100

----------------------------------------------------------------------
 .../apache/commons/rdf/rdf4j/RDF4JGraph.java    | 27 +++----
 .../commons/rdf/rdf4j/RDF4JTermFactory.java     | 79 ++++++++++++++------
 .../rdf/rdf4j/experimental/RDF4JParser.java     | 13 +++-
 .../commons/rdf/rdf4j/impl/ModelGraphImpl.java  |  9 ++-
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     | 46 +++++++-----
 5 files changed, 115 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 aba3f5d..907300a 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
@@ -18,8 +18,8 @@
 package org.apache.commons.rdf.rdf4j;
 
 import java.util.Optional;
+import java.util.Set;
 
-import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.Graph;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
@@ -38,33 +38,34 @@ import org.eclipse.rdf4j.repository.Repository;
 public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
 	
 	/**
-	 * Return a copy of the context mask, if present.
+	 * Return a copy of the context mask as a {@link Set} of
+	 * {@link RDF4JBlankNodeOrIRI} graph names.
 	 * <p>
-	 * If {@link Optional#isPresent()}, the mask determines which
+	 * If the set is not {@link Set#isEmpty()}, the mask determines which
 	 * <em>contexts</em> in the corresponding RDF4J {@link Model} or
 	 * {@link Repository} that this graph reflect. Modifications to the graph
 	 * (e.g. {@link #add(Triple)} will be performed for all the specified
 	 * contexts, while retrieval (e.g. {@link #contains(Triple)}) will succeed
 	 * if the triple is in at least one of the specified contexts.
 	 * <p>
-	 * The context mask array may contain the {@link Resource} 
-	 * <code>null</code>, indicating the default context 
-	 * (the <em>default graph</em> in RDF datasets).
+	 * The context mask array may contain the {@link RDF4JBlankNodeOrIRI}
+	 * <code>null</code>, indicating the default context (the <em>default
+	 * graph</em> in RDF datasets).
 	 * <p>
-	 * If the context mask is {@link Optional#empty()}, then this is a
-	 * <em>union graph</em> which triples reflecting statements in any contexts.
-	 * Triples added to the graph will be added in the default context, e.g.
-	 * <code>new Resource[1]{null}</code>).
+	 * If the context mask is {@link Set#isEmpty()}, then this is a <em>union
+	 * graph</em> which triples reflect statements in any contexts. Triples
+	 * added to the graph will be added in the default context, e.g.
+	 * equivalent to <code>new Resource[1]{null}</code>) in RDF4J.
 	 * <p>
 	 * Note that the context mask itself cannot be <code>null</code>.
 	 * <p>
-	 * The mask array is a copy, and thus any modifications are not reflected
-	 * in the RDF4JGraph.
+	 * The returned set is an immutable copy, to specify a different mask, use 
+	 * {@link RDF4JTermFactory#asRDFTermGraph(Repository, Set)}.
 	 * 
 	 * @return The context mask as an array of {@link Resource}s, or
 	 *         {@link Optional#empty()} indicating the union graph (any
 	 *         context).
 	 */
-	public Optional<BlankNodeOrIRI[]> getContextMask();
+	public Set<RDF4JBlankNodeOrIRI<Resource>> getContextMask();
 	
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 04598d4..a844a1a 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
@@ -17,7 +17,9 @@
  */
 package org.apache.commons.rdf.rdf4j;
 
+import java.util.Arrays;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 // To avoid confusion, avoid importing
 // classes that are in both
@@ -42,6 +44,7 @@ import org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl;
 import org.apache.commons.rdf.rdf4j.impl.TripleImpl;
 import org.eclipse.rdf4j.model.BNode;
 import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
 import org.eclipse.rdf4j.model.Statement;
 import org.eclipse.rdf4j.model.Value;
 import org.eclipse.rdf4j.model.ValueFactory;
@@ -142,35 +145,23 @@ public class RDF4JTermFactory implements RDFTermFactory {
 		throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass());
 	}
 
-	/**
-	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}.
-	 *
-	 * @param statement
-	 *            The statement to convert
-	 * @param salt
-	 *            A {@link UUID} salt to use for uniquely mapping any
-	 *            {@link BNode}s. The salt should typically be the same for
-	 *            multiple statements in the same {@link Repository} or
-	 *            {@link Model} to ensure {@link BlankNode#equals(Object)} and
-	 *            {@link BlankNode#uniqueReference()} works as intended.
-	 * @return A {@link Triple} that corresponds to the RDF4J statement
-	 */
-	public static RDF4JTriple asTriple(final Statement statement, UUID salt) {
-		return new TripleImpl(statement, salt);
-	}
-
-	private UUID salt = UUID.randomUUID();
+	private final UUID salt;
 
 	private final ValueFactory valueFactory;
 
 	public RDF4JTermFactory() {
-		this.valueFactory = SimpleValueFactory.getInstance();
+		this(SimpleValueFactory.getInstance(), UUID.randomUUID());
 	}
 
 	public RDF4JTermFactory(ValueFactory valueFactory) {
-		this.valueFactory = valueFactory;
+		this(valueFactory, UUID.randomUUID());
 	}
 
+	public RDF4JTermFactory(ValueFactory valueFactory, UUID salt) {
+		this.valueFactory = valueFactory;
+		this.salt = salt;
+	}
+	
 	/**
 	 * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Quad}.
 	 * <p>
@@ -292,7 +283,8 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	/**
 	 * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
 	 * <p>
-	 * The graph will include triples in any contexts (e.g. the union graph).
+	 * The graph will only include triples in the default graph 
+	 * (equivalent to context <code>new Resource[0]{null})</code> in RDF4J).
 	 * <p>
 	 * Changes to the graph are reflected in the repository, and vice versa.
 	 *
@@ -301,7 +293,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * @return A {@link Graph} backed by the RDF4J repository.
 	 */
 	public RDF4JGraph asRDFTermGraph(Repository repository) {
-		return new RepositoryGraphImpl(repository, false, true);
+		return new RepositoryGraphImpl(repository, false, false);
 	}
 
 	/**
@@ -310,6 +302,49 @@ public class RDF4JTermFactory implements RDFTermFactory {
 	 * The graph will include triples in any contexts (e.g. the union graph).
 	 * <p>
 	 * Changes to the graph are reflected in the repository, and vice versa.
+	 * Triples added to the graph are added to the default context, 
+	 * e.g. an RDF4J context of new <code>Resource[1]{null})</code>.
+	 *
+	 * @param repository
+	 *            RDF4J {@link Repository} to connect to.
+	 * @return A union {@link Graph} backed by the RDF4J repository.
+	 */
+	public RDF4JGraph asRDFTermGraphUnion(Repository repository) {
+		return new RepositoryGraphImpl(repository, false, true);
+	}
+	
+	/**
+	 * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
+	 * <p>
+	 * The graph will include triples in the specified contexts.
+	 * <p>
+	 * Changes to the graph are reflected in the repository, and vice versa.
+	 * Triples added/removed to the graph are reflected in all the specified
+	 * contexts.
+	 *
+	 * @param repository
+	 *            RDF4J {@link Repository} to connect to.
+	 * @param contexts
+	 * 
+	 * @return A {@link Graph} backed by the RDF4J repository.
+	 */
+	public RDF4JGraph asRDFTermGraph(Repository repository, BlankNodeOrIRI... contexts) {
+		if (contexts.length == 0) {
+			throw new IllegalArgumentException("At least one context must be specified. Use asRDFTermGraphUnion for union graph.");
+		}
+		Resource[] resources = new Resource[contexts.length];
+		for (int i=0; i<contexts.length; i++) {
+			resources[i] = (Resource) asValue(contexts[i]);
+		}
+		return new RepositoryGraphImpl(repository, false, true, resources);
+	}	
+	
+	/**
+	 * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
+	 * <p>
+	 * The graph will include triples in any contexts (e.g. the union graph).
+	 * <p>
+	 * Changes to the graph are reflected in the repository, and vice versa.
 	 *
 	 * @param repository
 	 *            RDF4J {@link Repository} to connect to.

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
index 60692dc..88f79e1 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
@@ -25,16 +25,19 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Optional;
 import java.util.function.Consumer;
+import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.Quad;
 import org.apache.commons.rdf.api.RDFSyntax;
 import org.apache.commons.rdf.experimental.RDFParser;
+import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
 import org.apache.commons.rdf.rdf4j.RDF4JDataset;
 import org.apache.commons.rdf.rdf4j.RDF4JGraph;
 import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
 import org.apache.commons.rdf.simple.experimental.AbstractRDFParser;
 import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
 import org.eclipse.rdf4j.repository.util.RDFInserter;
 import org.eclipse.rdf4j.repository.util.RDFLoader;
 import org.eclipse.rdf4j.rio.ParserConfig;
@@ -180,10 +183,16 @@ public class RDF4JParser extends AbstractRDFParser<RDF4JParser> implements RDFPa
 
 			if (graph.asRepository().isPresent()) {
 				RDFInserter inserter = new RDFInserter(graph.asRepository().get().getConnection());
-				graph.getContextMask().ifPresent(inserter::enforceContext);
+				if (! graph.getContextMask().isEmpty()) {
+					Stream<RDF4JBlankNodeOrIRI<Resource>> b = graph.getContextMask().stream();
+					Stream<Resource> c = b.map(RDF4JBlankNodeOrIRI::asValue);
+					Resource[] contexts = c.toArray(Resource[]::new);
+					inserter.enforceContext(contexts);
+				}
 				return inserter;
 			}
-			if (graph.asModel().isPresent() && graph.getContextMask().isPresent()) {
+			if (graph.asModel().isPresent() && graph.getContextMask().isEmpty()) {
+				// the model accepts any quad
 				Model model = graph.asModel().get();
 				return new AddToModel(model);
 			}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
index f24aede..994bf81 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
@@ -17,12 +17,15 @@
  */
 package org.apache.commons.rdf.rdf4j.impl;
 
+import java.util.Collections;
 import java.util.Optional;
+import java.util.Set;
 import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
 import org.apache.commons.rdf.rdf4j.RDF4JGraph;
 import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
 import org.apache.commons.rdf.rdf4j.RDF4JTriple;
@@ -125,10 +128,10 @@ public final class ModelGraphImpl implements RDF4JGraph {
 	}
 	
 	@Override
-	public Optional<Resource[]> getContextMask() {
+	public Set<RDF4JBlankNodeOrIRI<Resource>> getContextMask() {
 		// ModelGraph always do the unionGraph
-		return Optional.empty();
-		// TODO: Should we support contextFilter like in RepositoryGraphImpl?
+		return Collections.emptySet();
+		// TODO: Should we support contextMask like in RepositoryGraphImpl?
 	}
 	
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 47591be..4c09110 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,10 @@
  */
 package org.apache.commons.rdf.rdf4j.impl;
 
-import java.util.Optional;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -25,6 +28,7 @@ import org.apache.commons.rdf.api.Graph;
 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.RDF4JBlankNodeOrIRI;
 import org.apache.commons.rdf.rdf4j.RDF4JGraph;
 import org.apache.commons.rdf.rdf4j.RDF4JTriple;
 import org.eclipse.rdf4j.common.iteration.Iterations;
@@ -37,22 +41,22 @@ import org.eclipse.rdf4j.repository.RepositoryResult;
 
 public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> implements Graph, RDF4JGraph {
 
-	private final Resource[] contextFilter;
+	private final Resource[] contextMask;
 
 	public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, boolean unionGraph) {
 		super(repository, handleInitAndShutdown, includeInferred);
 		if (unionGraph) {
-			// no context filter aka any context
-			this.contextFilter = new Resource[] { };
+			// no context mask, aka any context
+			this.contextMask = new Resource[] { };
 		} else {
 			// default context: null
-			this.contextFilter = new Resource[] { null };
+			this.contextMask = new Resource[] { null };
 		}
 	}
 
-	public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, Resource... contextFilter) {
+	public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, Resource... contextMask) {
 		super(repository, handleInitAndShutdown, includeInferred);
-		this.contextFilter = contextFilter;
+		this.contextMask = Objects.requireNonNull(contextMask);
 	}
 
 
@@ -60,7 +64,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 	public void add(Triple tripleLike) {
 		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.add(statement, contextFilter);
+			conn.add(statement, contextMask);
 			conn.commit();
 		}
 	}
@@ -70,7 +74,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 	public boolean contains(Triple tripleLike) {
 		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			return conn.hasStatement(statement, includeInferred, contextFilter);
+			return conn.hasStatement(statement, includeInferred, contextMask);
 		}
 	}
 
@@ -78,7 +82,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 	public void remove(Triple tripleLike) {
 		Statement statement = rdf4jTermFactory.asStatement(tripleLike);
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.remove(statement, contextFilter);
+			conn.remove(statement, contextMask);
 			conn.commit();
 		}
 	}
@@ -86,7 +90,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 	@Override
 	public void clear() {
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			conn.clear(contextFilter);
+			conn.clear(contextMask);
 			conn.commit();
 		}
 	}
@@ -94,7 +98,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 	@Override
 	public long size() {
 		try (RepositoryConnection conn = getRepositoryConnection()) {
-			if (! includeInferred && contextFilter.length == 0) { 
+			if (! includeInferred && contextMask.length == 0) { 
 				return conn.size();
 			} else {
 				return stream().count();
@@ -109,7 +113,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.add(subj, pred, obj, contextFilter);
+			conn.add(subj, pred, obj, contextMask);
 			conn.commit();
 		}
 	}
@@ -120,7 +124,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, contextFilter);
+			return conn.hasStatement(subj, pred, obj, includeInferred, contextMask);
 		}
 	}
 
@@ -130,7 +134,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, contextFilter);
+			conn.remove(subj, pred, obj, contextMask);
 			conn.commit();
 		}
 	}
@@ -147,7 +151,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, includeInferred, contextFilter);
+		RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj, includeInferred, contextMask);
 		return Iterations.stream(statements).map(this::asTripleLike);
 	}
 	
@@ -156,9 +160,13 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		return rdf4jTermFactory.asTriple(statement);
 	}
 
-	public Optional<Resource[]> getContextMask() {
-		// Make sure we clone
-		return Optional.ofNullable(contextFilter).map(f -> f.clone());		
+	@Override
+	public Set<RDF4JBlankNodeOrIRI<Resource>> getContextMask() {		
+		Set<RDF4JBlankNodeOrIRI<Resource>> mask = new HashSet<>();
+		for (Resource s : contextMask) {
+			mask.add((RDF4JBlankNodeOrIRI<Resource>) rdf4jTermFactory.asRDFTerm(s));
+		}
+		return Collections.unmodifiableSet(mask);
 	}
 	
 }