1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.rdf.rdf4j.impl;
19
20 import java.util.Collections;
21 import java.util.ConcurrentModificationException;
22 import java.util.Iterator;
23 import java.util.Optional;
24 import java.util.Set;
25 import java.util.stream.Stream;
26
27 import org.apache.commons.rdf.api.BlankNodeOrIRI;
28 import org.apache.commons.rdf.api.IRI;
29 import org.apache.commons.rdf.api.RDFTerm;
30 import org.apache.commons.rdf.api.Triple;
31 import org.apache.commons.rdf.rdf4j.ClosableIterable;
32 import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
33 import org.apache.commons.rdf.rdf4j.RDF4JGraph;
34 import org.apache.commons.rdf.rdf4j.RDF4J;
35 import org.apache.commons.rdf.rdf4j.RDF4JTriple;
36 import org.eclipse.rdf4j.model.Model;
37 import org.eclipse.rdf4j.model.Resource;
38 import org.eclipse.rdf4j.repository.Repository;
39
40 @SuppressWarnings("PMD.UnnecessaryFullyQualifiedName")
41 final class ModelGraphImpl implements RDF4JGraph {
42
43 private final Model model;
44 private final RDF4J rdf4jTermFactory;
45
46 ModelGraphImpl(final Model model, final RDF4J rdf4jTermFactory) {
47 this.model = model;
48 this.rdf4jTermFactory = rdf4jTermFactory;
49 }
50
51 @Override
52 public void add(final BlankNodeOrIRI subject, final org.apache.commons.rdf.api.IRI predicate, final RDFTerm object) {
53 model.add((Resource) rdf4jTermFactory.asValue(subject),
54 (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate), rdf4jTermFactory.asValue(object));
55 }
56
57 @Override
58 public void add(final Triple triple) {
59 model.add(rdf4jTermFactory.asStatement(triple));
60 }
61
62 @Override
63 public Optional<Model> asModel() {
64 return Optional.of(model);
65 }
66
67 @Override
68 public Optional<Repository> asRepository() {
69 return Optional.empty();
70 }
71
72 @Override
73 public void clear() {
74 model.clear();
75 }
76
77 @Override
78 public boolean contains(final BlankNodeOrIRI subject, final org.apache.commons.rdf.api.IRI predicate, final RDFTerm object) {
79 return model.contains((Resource) rdf4jTermFactory.asValue(subject),
80 (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate), rdf4jTermFactory.asValue(object));
81 }
82
83 @Override
84 public boolean contains(final Triple triple) {
85 return model.contains(rdf4jTermFactory.asStatement(triple));
86 }
87
88 @Override
89 public void remove(final BlankNodeOrIRI subject, final org.apache.commons.rdf.api.IRI predicate, final RDFTerm object) {
90 model.remove((Resource) rdf4jTermFactory.asValue(subject),
91 (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate), rdf4jTermFactory.asValue(object));
92 }
93
94 @Override
95 public void remove(final Triple triple) {
96 model.remove(rdf4jTermFactory.asStatement(triple));
97 }
98
99 @Override
100 public long size() {
101 final int size = model.size();
102 if (size < Integer.MAX_VALUE) {
103 return size;
104 }
105
106
107 return model.parallelStream().count();
108 }
109
110 @Override
111 public Stream<RDF4JTriple> stream() {
112 return model.parallelStream().map(rdf4jTermFactory::asTriple);
113 }
114
115 @Override
116 public Stream<RDF4JTriple> stream(final BlankNodeOrIRI subject, final org.apache.commons.rdf.api.IRI predicate,
117 final RDFTerm object) {
118 return model.filter((Resource) rdf4jTermFactory.asValue(subject),
119 (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate), rdf4jTermFactory.asValue(object))
120 .parallelStream().map(rdf4jTermFactory::asTriple);
121 }
122
123 @Override
124 public Set<RDF4JBlankNodeOrIRI> getContextMask() {
125
126 return Collections.emptySet();
127
128 }
129
130 @Override
131 public ClosableIterable<Triple> iterate(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
132 return new ClosableIterable<Triple>() {
133 @SuppressWarnings("unchecked")
134 @Override
135 public Iterator<Triple> iterator() {
136
137 final Stream<? extends Triple> s = stream(subject, predicate, object);
138 return (Iterator<Triple>) s.iterator();
139 }
140
141 @Override
142 public void close() throws Exception {
143
144 }
145 };
146 }
147
148 @Override
149 public ClosableIterable<Triple> iterate() throws ConcurrentModificationException, IllegalStateException {
150 return iterate(null, null, null);
151 }
152
153 }