1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.rdf.simple;
19
20 import java.util.Optional;
21 import java.util.stream.Stream;
22
23 import org.apache.commons.rdf.api.BlankNode;
24 import org.apache.commons.rdf.api.BlankNodeOrIRI;
25 import org.apache.commons.rdf.api.Dataset;
26 import org.apache.commons.rdf.api.Graph;
27 import org.apache.commons.rdf.api.IRI;
28 import org.apache.commons.rdf.api.Quad;
29 import org.apache.commons.rdf.api.RDFTerm;
30 import org.apache.commons.rdf.api.Triple;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public class DatasetGraphView implements Graph {
54
55 private final boolean unionGraph;
56 private final BlankNodeOrIRI namedGraph;
57 private final Dataset dataset;
58
59 public DatasetGraphView(final Dataset dataset) {
60 this.dataset = dataset;
61 this.namedGraph = null;
62 this.unionGraph = true;
63 }
64
65 public DatasetGraphView(final Dataset dataset, final BlankNodeOrIRI namedGraph) {
66 this.dataset = dataset;
67 this.namedGraph = namedGraph;
68 this.unionGraph = false;
69 }
70
71 @Override
72 public void close() throws Exception {
73 dataset.close();
74
75 }
76
77 @Override
78 public void add(final Triple triple) {
79 dataset.add(namedGraph, triple.getSubject(), triple.getPredicate(), triple.getObject());
80 }
81
82 @Override
83 public void add(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
84 dataset.add(namedGraph, subject, predicate, object);
85 }
86
87 @Override
88 public boolean contains(final Triple triple) {
89 return dataset.contains(unionOrNamedGraph(), triple.getSubject(), triple.getPredicate(), triple.getObject());
90 }
91
92 private Optional<BlankNodeOrIRI> unionOrNamedGraph() {
93 if (unionGraph) {
94 return null;
95 }
96 return Optional.ofNullable(namedGraph);
97 }
98
99 @Override
100 public boolean contains(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
101 return dataset.contains(unionOrNamedGraph(), subject, predicate, object);
102 }
103
104 @Override
105 public void remove(final Triple triple) {
106 dataset.remove(unionOrNamedGraph(), triple.getSubject(), triple.getPredicate(), triple.getObject());
107 }
108
109 @Override
110 public void remove(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
111 dataset.remove(unionOrNamedGraph(), subject, predicate, object);
112 }
113
114 @Override
115 public void clear() {
116 dataset.remove(unionOrNamedGraph(), null, null, null);
117 }
118
119 @Override
120 public long size() {
121 return stream().count();
122 }
123
124 @Override
125 public Stream<? extends Triple> stream() {
126 return stream(null, null, null);
127 }
128
129 @Override
130 public Stream<? extends Triple> stream(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
131 final Stream<Triple> stream = dataset.stream(unionOrNamedGraph(), subject, predicate, object).map(Quad::asTriple);
132 if (unionGraph) {
133
134 return stream.distinct();
135 }
136 return stream;
137 }
138
139 }