blob: 6bf685a625867551570b56fb8a9d94e0c28e4a95 [file] [log] [blame]
/**
* 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.impl;
import java.util.UUID;
import org.apache.commons.rdf.api.BlankNode;
import org.apache.commons.rdf.rdf4j.RDF4JBlankNode;
import org.apache.commons.rdf.rdf4j.RDF4JDataset;
import org.apache.commons.rdf.rdf4j.RDF4JGraph;
import org.apache.commons.rdf.rdf4j.RDF4JIRI;
import org.apache.commons.rdf.rdf4j.RDF4JLiteral;
import org.apache.commons.rdf.rdf4j.RDF4JQuad;
import org.apache.commons.rdf.rdf4j.RDF4JTerm;
import org.apache.commons.rdf.rdf4j.RDF4J;
import org.apache.commons.rdf.rdf4j.RDF4JTriple;
import org.eclipse.rdf4j.model.BNode;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Literal;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.repository.Repository;
/**
* Factory for {@link RDF4JTerm} instances.
* <p>
* <strong>Internal class:</strong> This "abstract" class is intended for
* internal use by Commons RDF and may change in any minor update. Use instead
* {@link RDF4J} methods like {@link RDF4J#createBlankNode()},
* {@link RDF4J#asRDFTerm(org.eclipse.rdf4j.model.Value)} and
* {@link RDF4J#asGraph(Repository, Option...)}
* <p>
* This class exists as a <code>public</code> bridge between the packages
* {@link org.apache.commons.rdf.rdf4j} and
* {@link org.apache.commons.rdf.rdf4j.impl} by exposing the package-public
* constructors.
*
* @see RDF4J
*/
public abstract class InternalRDF4JFactory {
/**
* Construct a {@link RDF4JBlankNode} from a RDF4J {@link BNode}.
*
* @param bNode
* RDF4J {@link BNode} to adapt
* @param salt
* {@link UUID} to use for {@link BlankNode#uniqueReference()} in
* combination with {@link BNode#getID()}
* @return Adapted {@link RDF4JBlankNode}
*/
public RDF4JBlankNode createBlankNodeImpl(final BNode bNode, final UUID salt) {
return new BlankNodeImpl(bNode, salt);
}
/**
* Construct a {@link RDF4JIRI} from a RDF4J {@link IRI}.
*
* @param iri
* RDF4J {@link IRI} to adapt
* @return Adapted {@link RDF4JIRI}
*/
public RDF4JIRI createIRIImpl(final IRI iri) {
return new IRIImpl(iri);
}
/**
* Construct a {@link RDF4JLiteral} from a RDF4J {@link Literal}.
*
* @param literal
* RDF4J {@link Literal}
* @return Adapted {@link RDF4JLiteral}
*/
public RDF4JLiteral createLiteralImpl(final Literal literal) {
return new LiteralImpl(literal);
}
/**
* Construct a {@link RDF4JGraph} from a RDF4J {@link Model}.
* <p>
* Changes in the graph will be reflected in the model, and vice versa.
*
* @param model
* RDF4J {@link Model} to adapt
* @param rdf4jTermFactory
* factory to use for adapting graph triples
* @return Adapted {@link RDF4JGraph}
*/
public RDF4JGraph createModelGraphImpl(final Model model, final RDF4J rdf4jTermFactory) {
return new ModelGraphImpl(model, rdf4jTermFactory);
}
/**
* Construct a {@link RDF4JQuad} from a RDF4J {@link Statement}.
*
* @param statement
* RDF4J {@link Statement} to adapt
* @param salt
* {@link UUID} for adapting any {@link BNode}s
* @return Adapted {@link RDF4JQuad}
*/
public RDF4JQuad createQuadImpl(final Statement statement, final UUID salt) {
return new QuadImpl(statement, salt);
}
/**
* Construct a {@link RDF4JDataset} from a RDF4J {@link Repository}.
* <p>
* Changes in the dataset will be reflected in the repsitory, and vice
* versa.
*
* @param repository
* RDF4J {@link Repository} to adapt
* @param handleInitAndShutdown
* If <code>true</code>, the {@link RDF4JDataset} will initialize
* the repository (if needed), and shut it down on
* {@link RDF4JDataset#close()}.
* @param includeInferred
* If true, any inferred quads are included in the dataset
*
* @return Adapted {@link RDF4JDataset}
*/
public RDF4JDataset createRepositoryDatasetImpl(final Repository repository, final boolean handleInitAndShutdown,
final boolean includeInferred) {
return new RepositoryDatasetImpl(repository, UUID.randomUUID(), handleInitAndShutdown, includeInferred);
}
/**
* Construct a {@link RDF4JGraph} from a RDF4J {@link Model}.
* <p>
* Changes in the graph will be reflected in the model, and vice versa.
*
* @param repository
* RDF4J {@link Repository} to adapt
* @param handleInitAndShutdown
* If <code>true</code>, the {@link RDF4JGraph} will initialize
* the repository (if needed), and shut it down on
* {@link RDF4JGraph#close()}.
* @param includeInferred
* If true, any inferred quads are included in the dataset
* @param contextMask
* Zero or more {@link Resource}s contexts. The array may contain
* the value <code>null</code> for the default graph - however
* care must be taken to not provide a null-array
* <code>(Resource[]) null</code>.
* @return Adapted {@link RDF4JGraph}
*/
public RDF4JGraph createRepositoryGraphImpl(final Repository repository, final boolean handleInitAndShutdown,
final boolean includeInferred, final Resource... contextMask) {
return new RepositoryGraphImpl(repository, UUID.randomUUID(), handleInitAndShutdown, includeInferred,
contextMask);
}
/**
* Construct a {@link RDF4JTriple} from a RDF4J {@link Statement}.
*
* @param statement
* RDF4J {@link Statement} to adapt
* @param salt
* {@link UUID} for adapting any {@link BNode}s
* @return Adapted {@link RDF4JTriple}
*/
public RDF4JTriple createTripleImpl(final Statement statement, final UUID salt) {
return new TripleImpl(statement, salt);
}
}