in commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/DatasetImpl.java [122:146]
private <T extends RDFTerm> RDFTerm internallyMap(final T object) {
if (object == null || object instanceof SimpleRDFTerm) {
return object;
}
if (object instanceof BlankNode && !(object instanceof BlankNodeImpl)) {
final BlankNode blankNode = (BlankNode) object;
// This guarantees that adding the same BlankNode multiple times to
// this graph will generate a local object that is mapped to an
// equivalent object, based on the code in the package private
// BlankNodeImpl class
return factory.createBlankNode(blankNode.uniqueReference());
}
if (object instanceof IRI && !(object instanceof IRIImpl)) {
final IRI iri = (IRI) object;
return factory.createIRI(iri.getIRIString());
}
if (!(object instanceof Literal) || object instanceof LiteralImpl) {
throw new IllegalArgumentException("Not a BlankNode, IRI or Literal: " + object);
}
final Literal literal = (Literal) object;
if (literal.getLanguageTag().isPresent()) {
return factory.createLiteral(literal.getLexicalForm(), literal.getLanguageTag().get());
}
return factory.createLiteral(literal.getLexicalForm(), (IRI) internallyMap(literal.getDatatype()));
}