ensure Graph works on the correct graph names

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

Branch: refs/heads/rdf4j
Commit: e3a4fbaa5b871ce83045d50d2929534ed21d8f09
Parents: ca11a42
Author: Stian Soiland-Reyes <[email protected]>
Authored: Fri Sep 9 15:24:03 2016 +0100
Committer: Stian Soiland-Reyes <[email protected]>
Committed: Fri Sep 9 15:24:03 2016 +0100

----------------------------------------------------------------------
 .../commons/rdf/jsonldjava/JsonLdDataset.java   | 13 ++++++
 .../commons/rdf/jsonldjava/JsonLdGraph.java     | 25 ++++++++++-
 .../commons/rdf/jsonldjava/JsonLdGraphLike.java | 44 ++++++++------------
 .../rdf/jsonldjava/JsonLdRDFTermFactory.java    |  3 +-
 .../rdf/jsonldjava/JsonLdUnionGraph.java        | 44 ++++++++++++++++++--
 5 files changed, 96 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e3a4fbaa/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdDataset.java
----------------------------------------------------------------------
diff --git 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdDataset.java
 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdDataset.java
index 0e9422f..569180e 100644
--- 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdDataset.java
+++ 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdDataset.java
@@ -20,6 +20,7 @@ package org.apache.commons.rdf.jsonldjava;
 import java.util.List;
 import java.util.Optional;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -82,6 +83,12 @@ public class JsonLdDataset extends 
JsonLdGraphLike<org.apache.commons.rdf.api.Qu
                super.remove(graphName, subject, predicate, object);
        }
 
+
+       @Override
+       public void remove(Quad q) {
+               remove(q.getGraphName(), q.getSubject(), q.getPredicate(), 
q.getObject());
+       }
+       
        @Override
        public Stream<? extends Quad> stream(Optional<BlankNodeOrIRI> 
graphName, BlankNodeOrIRI subject, IRI predicate,
                        RDFTerm object) {               
@@ -92,8 +99,14 @@ public class JsonLdDataset extends 
JsonLdGraphLike<org.apache.commons.rdf.api.Qu
        }
 
        @Override
+       public long size() {            
+               return 
rdfDataSet.graphNames().parallelStream().map(rdfDataSet::getQuads).collect(Collectors.summingLong(List::size));
+       }
+
+       @Override
        Quad asTripleOrQuad(com.github.jsonldjava.core.RDFDataset.Quad 
jsonldQuad) {
                return factory.createQuad(jsonldQuad);
        }
 
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e3a4fbaa/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
----------------------------------------------------------------------
diff --git 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
index b8dc869..5e13a4e 100644
--- 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
+++ 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
@@ -18,6 +18,7 @@
 package org.apache.commons.rdf.jsonldjava;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Stream;
 
@@ -25,6 +26,7 @@ import org.apache.commons.rdf.api.BlankNodeOrIRI;
 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 com.github.jsonldjava.core.RDFDataset;
 
@@ -39,7 +41,7 @@ public class JsonLdGraph extends 
JsonLdGraphLike<org.apache.commons.rdf.api.Trip
        
        JsonLdGraph(RDFDataset rdfDataSet, Optional<BlankNodeOrIRI> graphName, 
String bnodePrefix) {
                super(rdfDataSet, bnodePrefix);
-               this.graphName = graphName;
+               this.graphName = Objects.requireNonNull(graphName);
        }
        
        JsonLdGraph(String bnodePrefix) {
@@ -47,8 +49,18 @@ public class JsonLdGraph extends 
JsonLdGraphLike<org.apache.commons.rdf.api.Trip
                this.graphName = Optional.empty();
        }
 
+       @Override
+       public void clear() {
+               filteredGraphs(graphName).forEach(l -> l.clear());
+       }
 
        @Override
+       public void add(Triple t) {
+               // Ensure it's added in the correct graph
+               super.add(graphName.orElse(null), t.getSubject(), 
t.getPredicate(), t.getObject());
+       }
+       
+       @Override
        public void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
                super.add(graphName.orElse(null), subject, predicate, object);
        }
@@ -59,9 +71,20 @@ public class JsonLdGraph extends 
JsonLdGraphLike<org.apache.commons.rdf.api.Trip
        }
        
        @Override
+       public boolean contains(Triple t) {
+               return contains(graphName, t.getSubject(), t.getPredicate(), 
t.getObject());
+       }
+       
+       @Override
        public void remove(BlankNodeOrIRI subject, IRI predicate, RDFTerm 
object) {
                super.remove(graphName, subject, predicate, object);
        }
+       
+       @Override
+       public void remove(Triple t) {
+               // Only remove from the particular graph
+               remove(graphName, t.getSubject(), t.getPredicate(), 
t.getObject());             
+       }
 
        @Override
        public long size() {

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e3a4fbaa/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
----------------------------------------------------------------------
diff --git 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
index 2047a6e..ad2cc23 100644
--- 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
+++ 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
@@ -19,10 +19,10 @@ package org.apache.commons.rdf.jsonldjava;
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.UUID;
 import java.util.function.Predicate;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNode;
@@ -73,9 +73,9 @@ abstract class JsonLdGraphLike<T extends 
TripleLike<BlankNodeOrIRI, IRI, RDFTerm
                this(rdfDataSet, "urn:uuid:" + SALT + "#" +  "g"+ 
System.identityHashCode(rdfDataSet));
        }
 
-       JsonLdGraphLike(RDFDataset rdfDataset, String bnodePrefix) {
-               rdfDataSet = rdfDataset;
-               this.bnodePrefix = bnodePrefix;
+       JsonLdGraphLike(RDFDataset rdfDataSet, String bnodePrefix) {
+               this.rdfDataSet = Objects.requireNonNull(rdfDataSet);
+               this.bnodePrefix = Objects.requireNonNull(bnodePrefix);
                this.factory = new JsonLdRDFTermFactory(bnodePrefix);
        }
        
@@ -86,7 +86,6 @@ abstract class JsonLdGraphLike<T extends 
TripleLike<BlankNodeOrIRI, IRI, RDFTerm
        @Override
        public void add(T tripleOrQuad) {
                String g = graphNameAsJsonLdString(tripleOrQuad);
-
                String s = asJsonLdString(tripleOrQuad.getSubject());
                String p = asJsonLdString(tripleOrQuad.getPredicate());
                
@@ -100,11 +99,6 @@ abstract class JsonLdGraphLike<T extends 
TripleLike<BlankNodeOrIRI, IRI, RDFTerm
                        rdfDataSet.addQuad(s,p,literal.getLexicalForm(), 
datatype, language, g);
                }
        }
-
-       @Override
-       public void clear() {
-               rdfDataSet.clear();
-       }
        
        public void close() {
                // Drop the memory reference, but don't clear it
@@ -112,6 +106,16 @@ abstract class JsonLdGraphLike<T extends 
TripleLike<BlankNodeOrIRI, IRI, RDFTerm
        }       
 
        @Override
+       public void clear() {           
+               filteredGraphs(null).forEach(s -> s.clear());
+               //   In theory we could use
+               //rdfDataSet.clear();
+               //   but then we would need to also do
+               //rdfDataSet.put("@default",  new ArrayList());
+               //   .. both of which seems to be touching too much on 
JsonLd-Java's internal structure
+       }
+
+       @Override
        public boolean contains(T tripleOrQuad) {               
                return stream().anyMatch(Predicate.isEqual(tripleOrQuad));
        }
@@ -119,21 +123,7 @@ abstract class JsonLdGraphLike<T extends 
TripleLike<BlankNodeOrIRI, IRI, RDFTerm
        public RDFDataset getRdfDataSet() {
                return rdfDataSet;
        }
-       
-       @Override
-       public void remove(T t) {
-               if (t instanceof org.apache.commons.rdf.api.Quad) {
-                       org.apache.commons.rdf.api.Quad q = 
(org.apache.commons.rdf.api.Quad) t;
-                       remove(q.getGraphName(), q.getSubject(), 
q.getPredicate(), q.getObject());
-               } else {
-                       remove(Optional.empty(), t.getSubject(), 
t.getPredicate(), t.getObject());
-               }
-       }
-       
-       @Override
-       public long size() {            
-               return 
rdfDataSet.graphNames().parallelStream().map(rdfDataSet::getQuads).collect(Collectors.summingLong(List::size));
-       }
+
        
        @Override
        public Stream<? extends T> stream() {
@@ -209,11 +199,11 @@ abstract class JsonLdGraphLike<T extends 
TripleLike<BlankNodeOrIRI, IRI, RDFTerm
                                .map(rdfDataSet::getQuads);
        }
 
-       String graphNameAsJsonLdString(T tripleOrQuad) {
+       String graphNameAsJsonLdString(T tripleOrQuad) {                
                if (tripleOrQuad instanceof org.apache.commons.rdf.api.Quad) {
                        org.apache.commons.rdf.api.Quad quad = 
(org.apache.commons.rdf.api.Quad)tripleOrQuad;
                        return 
quad.getGraphName().map(this::asJsonLdString).orElse("@default");               
         
-               }
+               }               
                return "@default";
        }
        

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e3a4fbaa/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java
----------------------------------------------------------------------
diff --git 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java
 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java
index 15bc466..1dff9fb 100644
--- 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java
+++ 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java
@@ -18,6 +18,7 @@
 package org.apache.commons.rdf.jsonldjava;
 
 import java.nio.charset.StandardCharsets;
+import java.util.Objects;
 import java.util.UUID;
 
 import org.apache.commons.rdf.api.BlankNode;
@@ -49,7 +50,7 @@ public final class JsonLdRDFTermFactory implements 
RDFTermFactory {
        }
        
        JsonLdRDFTermFactory(String bnodePrefix) {
-               this.bnodePrefix = bnodePrefix;
+               this.bnodePrefix = Objects.requireNonNull(bnodePrefix);
        }
        
        public Node asJsonLdNode(RDFTerm term) {

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e3a4fbaa/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdUnionGraph.java
----------------------------------------------------------------------
diff --git 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdUnionGraph.java
 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdUnionGraph.java
index ce164c6..6b32f8c 100644
--- 
a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdUnionGraph.java
+++ 
b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdUnionGraph.java
@@ -24,9 +24,28 @@ import org.apache.commons.rdf.api.BlankNodeOrIRI;
 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 com.github.jsonldjava.core.RDFDataset;
 
+/**
+ * A <strong>union graph</em> representation of a JsonLd {@link RDFDataset}.
+ * <p>
+ * A union graph contains all the triples of the dataset, irregardless of their
+ * graph names.
+ * <p>
+ * {@link #add(Triple)} and {@link #add(BlankNodeOrIRI, IRI, RDFTerm)} 
+ * will add the triple to the default graph
+ * (e.g. <code>@default</code> in JSON-LD), while
+ * the remaining methods (including
+ * {@link #remove(Triple)} or {@link #remove(BlankNodeOrIRI, IRI, RDFTerm)}) 
+ * relate to triples from <strong>all</strong> graphs.
+ * <p>
+ * <strong>Note:</strong>
+ * Some operations like {@link #stream()} and {@link #size()} are
+ * inefficient as they skip any duplicate triples from multiple
+ * graphs.
+ */
 public class JsonLdUnionGraph extends 
JsonLdGraphLike<org.apache.commons.rdf.api.Triple> implements Graph {
 
        JsonLdUnionGraph(String bnodePrefix) {
@@ -58,12 +77,28 @@ public class JsonLdUnionGraph extends 
JsonLdGraphLike<org.apache.commons.rdf.api
        }
 
        @Override
+       public void remove(Triple t) {
+               // Remove from ALL graphs, not just default graph
+               super.remove(null, t.getSubject(), t.getPredicate(), 
t.getObject());
+       }
+       
+       @Override
        public Stream<JsonLdTriple> stream(BlankNodeOrIRI subject, IRI 
predicate,
-                       RDFTerm object) {               
+                       RDFTerm object) {                               
                return filteredGraphs(null)
                                .flatMap(List::stream)
                                .filter(quadFilter(subject, predicate, object))
-                               .map(factory::createTriple);
+                               .map(factory::createTriple)
+                               // Make sure we don't have duplicate triples
+                               // NOTE: This can be quite inefficient
+                               .distinct();
+       }
+       
+       @Override
+       public Stream<? extends Triple> stream() {              
+               // NOTE: inefficient as we have to remove duplicate triples 
+               // in different graphs :-(
+               return super.stream().distinct();
        }
 
        @Override
@@ -73,8 +108,9 @@ public class JsonLdUnionGraph extends 
JsonLdGraphLike<org.apache.commons.rdf.api
        
        @Override
        public long size() {
-               // NOTE: Inefficient as we'll have remove duplicate triples :-( 
-               return stream().distinct().count();
+               // Note: Our specialized stream() already removes duplicates 
using .distinct()
+               return stream().count();
        }
+
 }
 

Reply via email to