1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 package org.apache.commons.rdf.rdf4j.impl;
19
20 import java.util.UUID;
21
22 import org.apache.commons.rdf.api.BlankNode;
23 import org.apache.commons.rdf.rdf4j.RDF4JBlankNode;
24 import org.apache.commons.rdf.rdf4j.RDF4JDataset;
25 import org.apache.commons.rdf.rdf4j.RDF4JGraph;
26 import org.apache.commons.rdf.rdf4j.RDF4JIRI;
27 import org.apache.commons.rdf.rdf4j.RDF4JLiteral;
28 import org.apache.commons.rdf.rdf4j.RDF4JQuad;
29 import org.apache.commons.rdf.rdf4j.RDF4JTerm;
30 import org.apache.commons.rdf.rdf4j.RDF4J;
31 import org.apache.commons.rdf.rdf4j.RDF4JTriple;
32 import org.eclipse.rdf4j.model.BNode;
33 import org.eclipse.rdf4j.model.IRI;
34 import org.eclipse.rdf4j.model.Literal;
35 import org.eclipse.rdf4j.model.Model;
36 import org.eclipse.rdf4j.model.Resource;
37 import org.eclipse.rdf4j.model.Statement;
38 import org.eclipse.rdf4j.repository.Repository;
39
40 /**
41 * Factory for {@link RDF4JTerm} instances.
42 * <p>
43 * <strong>Internal class:</strong> This "abstract" class is intended for
44 * internal use by Commons RDF and may change in any minor update. Use instead
45 * {@link RDF4J} methods like {@link RDF4J#createBlankNode()},
46 * {@link RDF4J#asRDFTerm(org.eclipse.rdf4j.model.Value)} and
47 * {@link RDF4J#asGraph(Repository, Option...)}
48 * <p>
49 * This class exists as a <code>public</code> bridge between the packages
50 * {@link org.apache.commons.rdf.rdf4j} and
51 * {@link org.apache.commons.rdf.rdf4j.impl} by exposing the package-public
52 * constructors.
53 *
54 * @see RDF4J
55 */
56 public abstract class InternalRDF4JFactory {
57
58 /**
59 * Construct a {@link RDF4JBlankNode} from a RDF4J {@link BNode}.
60 *
61 * @param bNode
62 * RDF4J {@link BNode} to adapt
63 * @param salt
64 * {@link UUID} to use for {@link BlankNode#uniqueReference()} in
65 * combination with {@link BNode#getID()}
66 * @return Adapted {@link RDF4JBlankNode}
67 */
68 public RDF4JBlankNode createBlankNodeImpl(final BNode bNode, final UUID salt) {
69 return new BlankNodeImpl(bNode, salt);
70 }
71
72 /**
73 * Construct a {@link RDF4JIRI} from a RDF4J {@link IRI}.
74 *
75 * @param iri
76 * RDF4J {@link IRI} to adapt
77 * @return Adapted {@link RDF4JIRI}
78 */
79 public RDF4JIRI createIRIImpl(final IRI iri) {
80 return new IRIImpl(iri);
81 }
82
83 /**
84 * Construct a {@link RDF4JLiteral} from a RDF4J {@link Literal}.
85 *
86 * @param literal
87 * RDF4J {@link Literal}
88 * @return Adapted {@link RDF4JLiteral}
89 */
90 public RDF4JLiteral createLiteralImpl(final Literal literal) {
91 return new LiteralImpl(literal);
92 }
93
94 /**
95 * Construct a {@link RDF4JGraph} from a RDF4J {@link Model}.
96 * <p>
97 * Changes in the graph will be reflected in the model, and vice versa.
98 *
99 * @param model
100 * RDF4J {@link Model} to adapt
101 * @param rdf4jTermFactory
102 * factory to use for adapting graph triples
103 * @return Adapted {@link RDF4JGraph}
104 */
105 public RDF4JGraph createModelGraphImpl(final Model model, final RDF4J rdf4jTermFactory) {
106 return new ModelGraphImpl(model, rdf4jTermFactory);
107 }
108
109 /**
110 * Construct a {@link RDF4JQuad} from a RDF4J {@link Statement}.
111 *
112 * @param statement
113 * RDF4J {@link Statement} to adapt
114 * @param salt
115 * {@link UUID} for adapting any {@link BNode}s
116 * @return Adapted {@link RDF4JQuad}
117 */
118 public RDF4JQuad createQuadImpl(final Statement statement, final UUID salt) {
119 return new QuadImpl(statement, salt);
120 }
121
122 /**
123 * Construct a {@link RDF4JDataset} from a RDF4J {@link Repository}.
124 * <p>
125 * Changes in the dataset will be reflected in the repsitory, and vice
126 * versa.
127 *
128 * @param repository
129 * RDF4J {@link Repository} to adapt
130 * @param handleInitAndShutdown
131 * If <code>true</code>, the {@link RDF4JDataset} will initialize
132 * the repository (if needed), and shut it down on
133 * {@link RDF4JDataset#close()}.
134 * @param includeInferred
135 * If true, any inferred quads are included in the dataset
136 *
137 * @return Adapted {@link RDF4JDataset}
138 */
139 public RDF4JDataset createRepositoryDatasetImpl(final Repository repository, final boolean handleInitAndShutdown,
140 final boolean includeInferred) {
141 return new RepositoryDatasetImpl(repository, UUID.randomUUID(), handleInitAndShutdown, includeInferred);
142 }
143
144 /**
145 * Construct a {@link RDF4JGraph} from a RDF4J {@link Model}.
146 * <p>
147 * Changes in the graph will be reflected in the model, and vice versa.
148 *
149 * @param repository
150 * RDF4J {@link Repository} to adapt
151 * @param handleInitAndShutdown
152 * If <code>true</code>, the {@link RDF4JGraph} will initialize
153 * the repository (if needed), and shut it down on
154 * {@link RDF4JGraph#close()}.
155 * @param includeInferred
156 * If true, any inferred quads are included in the dataset
157 * @param contextMask
158 * Zero or more {@link Resource}s contexts. The array may contain
159 * the value <code>null</code> for the default graph - however
160 * care must be taken to not provide a null-array
161 * <code>(Resource[]) null</code>.
162 * @return Adapted {@link RDF4JGraph}
163 */
164 public RDF4JGraph createRepositoryGraphImpl(final Repository repository, final boolean handleInitAndShutdown,
165 final boolean includeInferred, final Resource... contextMask) {
166 return new RepositoryGraphImpl(repository, UUID.randomUUID(), handleInitAndShutdown, includeInferred,
167 contextMask);
168 }
169
170 /**
171 * Construct a {@link RDF4JTriple} from a RDF4J {@link Statement}.
172 *
173 * @param statement
174 * RDF4J {@link Statement} to adapt
175 * @param salt
176 * {@link UUID} for adapting any {@link BNode}s
177 * @return Adapted {@link RDF4JTriple}
178 */
179 public RDF4JTriple createTripleImpl(final Statement statement, final UUID salt) {
180 return new TripleImpl(statement, salt);
181 }
182
183 }