All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.rdf4j.model.util.Values Maven / Gradle / Ivy

There is a newer version: 5.1.0-M1
Show newest version
/*******************************************************************************
 * Copyright (c) 2020 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/
package org.eclipse.rdf4j.model.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalAmount;
import java.util.Date;
import java.util.Objects;

import javax.xml.datatype.XMLGregorianCalendar;

import org.eclipse.rdf4j.model.BNode;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Literal;
import org.eclipse.rdf4j.model.Namespace;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.Triple;
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.base.CoreDatatype;
import org.eclipse.rdf4j.model.impl.SimpleNamespace;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.model.impl.ValidatingValueFactory;
import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.model.vocabulary.XSD;

/**
 * Factory methods to quickly create {@link Value} objects ( {@link IRI}, {@link Literal}, {@link BNode}, and
 * {@link Triple}) without having to create a {@link ValueFactory} first.
 * 

* Example usage: * *

 * import static org.eclipse.rdf4j.model.util.Values.iri;
 *
 * ...
 * IRI foo = iri("http://example.org/foo");
 * 
*

* * @author Jeen Broekstra * @see Statements * @since 3.5.0 */ public class Values { /** * Internal shared value factory used for creating all values. We use a {@link ValidatingValueFactory} to ensure * created values are syntactically legal. */ private static final ValueFactory VALUE_FACTORY = new ValidatingValueFactory(SimpleValueFactory.getInstance()); /* private constructor */ private Values() { } /* IRI factory methods */ /** * Create a new {@link IRI} using the supplied iri string * * @param iri a string representing a valid (absolute) iri * @return an {@link IRI} object for the supplied iri string. * @throws NullPointerException if the suppplied iri is null * @throws IllegalArgumentException if the supplied iri string can not be parsed as a legal IRI. */ public static IRI iri(String iri) throws IllegalArgumentException { return iri(VALUE_FACTORY, iri); } /** * Create a new {@link IRI} using the supplied iri string * * @param vf the {@link ValueFactory} to use for creation of the IRI. * @param iri a string representing a valid (absolute) iri * @return an {@link IRI} object for the supplied iri string. * @throws NullPointerException if any of the input parameters is null * @throws IllegalArgumentException if the supplied iri string can not be parsed as a legal IRI by the supplied * {@link ValueFactory} . */ public static IRI iri(ValueFactory vf, String iri) throws IllegalArgumentException { return vf.createIRI(Objects.requireNonNull(iri, "iri may not be null")); } /** * Create a new {@link IRI} using the supplied namespace name and local name * * @param namespace the IRI's namespace name * @param localName the IRI's local name * @return an {@link IRI} object for the supplied IRI namespace name and localName. * @throws NullPointerException if any of the input parameters is null * @throws IllegalArgumentException if the supplied iri string can not be parsed as a legal IRI. */ public static IRI iri(String namespace, String localName) throws IllegalArgumentException { return iri(VALUE_FACTORY, namespace, localName); } /** * Create a new {@link IRI} using the supplied {@link Namespace} and local name * * @param namespace the IRI's {@link Namespace} * @param localName the IRI's local name * @return an {@link IRI} object for the supplied IRI namespace and localName. * @throws NullPointerException if any of the input parameters is null * @throws IllegalArgumentException if the supplied iri string can not be parsed as a legal IRI. * @since 3.6.0 */ public static IRI iri(Namespace namespace, String localName) throws IllegalArgumentException { return iri(VALUE_FACTORY, Objects.requireNonNull(namespace.getName()), localName); } /** * Create a new {@link IRI} from a supplied prefixed name, using the supplied {@link Namespace namespaces} * * @param namespaces the Namespaces from which to find the correct namespace to map the prefixed name to * @param prefixedName a prefixed name that is a shorthand for a full iri, using syntax form * prefix:localName. For example, rdf:type is a prefixed name where * rdf is the prefix. If the correct {@link Namespace} definition is also supplied * this expands to the full namespace name * http://www.w3.org/1999/02/22-rdf-syntax-ns#, leading to a full IRI * http://www.w3.org/1999/02/22-rdf-syntax-ns#type. * @return an {@link IRI} object for the supplied IRI namespace and localName. * @throws NullPointerException if any of the input parameters is null * @throws IllegalArgumentException if the supplied prefixed name can not be transformed to a legal IRI. * @since 3.6.0 */ public static IRI iri(Iterable namespaces, String prefixedName) throws IllegalArgumentException { if (prefixedName.indexOf(':') < 0) { throw new IllegalArgumentException("Invalid prefixed name: '" + prefixedName + "'"); } final String prefix = prefixedName.substring(0, prefixedName.indexOf(':')); for (Namespace ns : namespaces) { if (prefix.equals(ns.getPrefix())) { return iri(ns.getName(), prefixedName.substring(prefixedName.indexOf(':') + 1)); } } throw new IllegalArgumentException("Prefix '" + prefix + "' not identified in supplied namespaces"); } /** * Create a new {@link IRI} using the supplied namespace and local name * * @param vf the {@link ValueFactory} to use for creation of the IRI. * @param namespace the IRI's namespace * @param localName the IRI's local name * @return an {@link IRI} object for the supplied IRI namespace and localName. * @throws NullPointerException if any of the input parameters is null * @throws IllegalArgumentException if the supplied iri string can not be parsed as a legal IRI by the supplied * {@link ValueFactory} */ public static IRI iri(ValueFactory vf, String namespace, String localName) throws IllegalArgumentException { return vf.createIRI(Objects.requireNonNull(namespace, "namespace may not be null"), Objects.requireNonNull(localName, "localName may not be null")); } /* blank node factory methods */ /** * Creates a new {@link BNode} * * @return a new {@link BNode} */ public static BNode bnode() { return bnode(VALUE_FACTORY); } /** * Creates a new {@link BNode} * * @param vf the {@link ValueFactory} to use for creation of the {@link BNode} * @return a new {@link BNode} * @throws NullPointerException if any of the input parameters is null */ public static BNode bnode(ValueFactory vf) { return vf.createBNode(); } /** * Creates a new {@link BNode} with the supplied node identifier. * * @param nodeId the node identifier * @return a new {@link BNode} * @throws NullPointerException if the supplied node identifier is null. * @throws IllegalArgumentException if the supplied node identifier is not valid */ public static BNode bnode(String nodeId) throws IllegalArgumentException { return bnode(VALUE_FACTORY, nodeId); } /** * Creates a new {@link BNode} with the supplied node identifier. * * @param vf the {@link ValueFactory} to use for creation of the {@link BNode} * @param nodeId the node identifier * @return a new {@link BNode} * @throws NullPointerException if any of the input parameters is null * @throws IllegalArgumentException if the supplied node identifier is not valid */ public static BNode bnode(ValueFactory vf, String nodeId) throws IllegalArgumentException { return vf.createBNode(Objects.requireNonNull(nodeId, "nodeId may not be null")); } /* Literal factory methods */ /** * Creates a new {@link Literal} with the supplied lexical value. * * @param lexicalValue the lexical value for the literal * @return a new {@link Literal} of type {@link XSD#STRING} * @throws NullPointerException if the supplied lexical value is null. */ public static Literal literal(String lexicalValue) { return literal(VALUE_FACTORY, lexicalValue); } /** * Creates a new {@link Literal} with the supplied lexical value. * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param lexicalValue the lexical value for the literal * @return a new {@link Literal} of type {@link XSD#STRING} * @throws NullPointerException if any of the input parameters is null */ public static Literal literal(ValueFactory vf, String lexicalValue) { return vf.createLiteral(Objects.requireNonNull(lexicalValue, "lexicalValue may not be null")); } /** * Creates a new {@link Literal} with the supplied lexical value. * * @param lexicalValue the lexical value for the literal * @param languageTag the language tag for the literal. * @return a new {@link Literal} of type {@link RDF#LANGSTRING} * @throws NullPointerException if the supplied lexical value or language tag is null. */ public static Literal literal(String lexicalValue, String languageTag) { return literal(VALUE_FACTORY, lexicalValue, languageTag); } /** * Creates a new {@link Literal} with the supplied lexical value. * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param lexicalValue the lexical value for the literal * @param languageTag the language tag for the literal. * @return a new {@link Literal} of type {@link RDF#LANGSTRING} * @throws NullPointerException if any of the input parameters is null */ public static Literal literal(ValueFactory vf, String lexicalValue, String languageTag) { return vf.createLiteral(Objects.requireNonNull(lexicalValue, "lexicalValue may not be null"), Objects.requireNonNull(languageTag, "languageTag may not be null")); } /** * Creates a new {@link Literal} with the supplied lexical value and datatype. * * @param lexicalValue the lexical value for the literal * @param datatype the datatype IRI * @return a new {@link Literal} with the supplied lexical value and datatype * @throws NullPointerException if the supplied lexical value or datatype is null. * @throws IllegalArgumentException if the supplied lexical value is not valid for the given datatype */ public static Literal literal(String lexicalValue, IRI datatype) throws IllegalArgumentException { return literal(VALUE_FACTORY, lexicalValue, datatype); } /** * Creates a new {@link Literal} with the supplied lexical value and datatype. * * @param lexicalValue the lexical value for the literal * @param datatype the CoreDatatype * @return a new {@link Literal} with the supplied lexical value and datatype * @throws NullPointerException if the supplied lexical value or datatype is null. * @throws IllegalArgumentException if the supplied lexical value is not valid for the given datatype */ public static Literal literal(String lexicalValue, CoreDatatype datatype) throws IllegalArgumentException { return literal(VALUE_FACTORY, lexicalValue, datatype); } /** * Creates a new {@link Literal} with the supplied lexical value and datatype. * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param lexicalValue the lexical value for the literal * @param datatype the datatype IRI * @return a new {@link Literal} with the supplied lexical value and datatype * @throws NullPointerException if any of the input parameters is null. * @throws IllegalArgumentException if the supplied lexical value is not valid for the given datatype */ public static Literal literal(ValueFactory vf, String lexicalValue, IRI datatype) throws IllegalArgumentException { return vf.createLiteral(Objects.requireNonNull(lexicalValue, "lexicalValue may not be null"), Objects.requireNonNull(datatype, "datatype may not be null")); } /** * Creates a new {@link Literal} with the supplied lexical value and datatype. * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param lexicalValue the lexical value for the literal * @param datatype the CoreDatatype * @return a new {@link Literal} with the supplied lexical value and datatype * @throws NullPointerException if any of the input parameters is null. * @throws IllegalArgumentException if the supplied lexical value is not valid for the given datatype */ public static Literal literal(ValueFactory vf, String lexicalValue, CoreDatatype datatype) throws IllegalArgumentException { return vf.createLiteral(Objects.requireNonNull(lexicalValue, "lexicalValue may not be null"), Objects.requireNonNull(datatype, "datatype may not be null")); } /** * Creates a new {@link Literal} with the supplied boolean value * * @param booleanValue a boolean value * @return a {@link Literal} of type {@link XSD#BOOLEAN} with the supplied value */ public static Literal literal(boolean booleanValue) { return literal(VALUE_FACTORY, booleanValue); } /** * Creates a new {@link Literal} with the supplied boolean value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param booleanValue a boolean value * @return a {@link Literal} of type {@link XSD#BOOLEAN} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, boolean booleanValue) { return vf.createLiteral(booleanValue); } /** * Creates a new {@link Literal} with the supplied byte value * * @param byteValue a byte value * @return a {@link Literal} of type {@link XSD#BYTE} with the supplied value */ public static Literal literal(byte byteValue) { return literal(VALUE_FACTORY, byteValue); } /** * Creates a new {@link Literal} with the supplied byte value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param byteValue a byte value * @return a {@link Literal} of type {@link XSD#BYTE} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, byte byteValue) { return vf.createLiteral(byteValue); } /** * Creates a new {@link Literal} with the supplied short value * * @param shortValue a short value * @return a {@link Literal} of type {@link XSD#SHORT} with the supplied value */ public static Literal literal(short shortValue) { return literal(VALUE_FACTORY, shortValue); } /** * Creates a new {@link Literal} with the supplied short value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param shortValue a short value * @return a {@link Literal} of type {@link XSD#SHORT} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, short shortValue) { return vf.createLiteral(shortValue); } /** * Creates a new {@link Literal} with the supplied int value * * @param intValue an int value * @return a {@link Literal} of type {@link XSD#INT} with the supplied value */ public static Literal literal(int intValue) { return literal(VALUE_FACTORY, intValue); } /** * Creates a new {@link Literal} with the supplied int value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param intValue an int value * @return a {@link Literal} of type {@link XSD#INT} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, int intValue) { return vf.createLiteral(intValue); } /** * Creates a new {@link Literal} with the supplied long value * * @param longValue a long value * @return a {@link Literal} of type {@link XSD#LONG} with the supplied value */ public static Literal literal(long longValue) { return literal(VALUE_FACTORY, longValue); } /** * Creates a new {@link Literal} with the supplied long value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param longValue a long value * @return a {@link Literal} of type {@link XSD#LONG} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, long longValue) { return vf.createLiteral(longValue); } /** * Creates a new {@link Literal} with the supplied float value * * @param floatValue a float value * @return a {@link Literal} of type {@link XSD#FLOAT} with the supplied value */ public static Literal literal(float floatValue) { return literal(VALUE_FACTORY, floatValue); } /** * Creates a new {@link Literal} with the supplied float value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param floatValue a float value * @return a {@link Literal} of type {@link XSD#FLOAT} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, float floatValue) { return vf.createLiteral(floatValue); } /** * Creates a new {@link Literal} with the supplied double value * * @param doubleValue a double value * @return a {@link Literal} of type {@link XSD#DOUBLE} with the supplied value */ public static Literal literal(double doubleValue) { return literal(VALUE_FACTORY, doubleValue); } /** * Creates a new {@link Literal} with the supplied double value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param doubleValue a double value * @return a {@link Literal} of type {@link XSD#DOUBLE} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, double doubleValue) { return vf.createLiteral(doubleValue); } /** * Creates a new {@link Literal} with the supplied {@link BigDecimal} value * * @param bigDecimal a {@link BigDecimal} value * @return a {@link Literal} of type {@link XSD#DECIMAL} with the supplied value * @throws NullPointerException if the supplied bigDecimal is null. */ public static Literal literal(BigDecimal bigDecimal) { return literal(VALUE_FACTORY, bigDecimal); } /** * Creates a new {@link Literal} with the supplied {@link BigDecimal} value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param bigDecimal a {@link BigDecimal} value * @return a {@link Literal} of type {@link XSD#DECIMAL} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, BigDecimal bigDecimal) { return vf.createLiteral(Objects.requireNonNull(bigDecimal, "bigDecimal may not be null")); } /** * Creates a new {@link Literal} with the supplied {@link BigInteger} value * * @param bigInteger a {@link BigInteger} value * @return a {@link Literal} of type {@link XSD#INTEGER} with the supplied value * @throws NullPointerException if the supplied bigInteger is null. */ public static Literal literal(BigInteger bigInteger) { return literal(VALUE_FACTORY, bigInteger); } /** * Creates a new {@link Literal} with the supplied {@link BigInteger} value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param bigInteger a {@link BigInteger} value * @return a {@link Literal} of type {@link XSD#INTEGER} with the supplied value * @throws NullPointerException if any of the input parameters is null. */ public static Literal literal(ValueFactory vf, BigInteger bigInteger) { return vf.createLiteral(Objects.requireNonNull(bigInteger, "bigInteger may not be null")); } /** * Creates a new {@link Literal} with the supplied {@link TemporalAccessor} value * * @param value a {@link TemporalAccessor} value. * @return a {@link Literal} with the supplied calendar value and the appropriate {@link XSD} date/time datatype for * the specific value. * @throws NullPointerException if the supplied {@link TemporalAccessor} value is null. * @throws IllegalArgumentException if value cannot be represented by an XML Schema date/time datatype */ public static Literal literal(TemporalAccessor value) throws IllegalArgumentException { return literal(VALUE_FACTORY, value); } /** * Creates a new {@link Literal} with the supplied {@link TemporalAccessor} value * * @param vf the {@link ValueFactory} to use for creation of the {@link Literal} * @param value a {@link TemporalAccessor} value. * @return a {@link Literal} with the supplied calendar value and the appropriate {@link XSD} date/time datatype for * the specific value. * @throws NullPointerException if any of the input parameters is null.. * @throws IllegalArgumentException if value cannot be represented by an XML Schema date/time datatype */ public static Literal literal(ValueFactory vf, TemporalAccessor value) throws IllegalArgumentException { return vf.createLiteral(Objects.requireNonNull(value, "value may not be null")); } /** * Creates a new typed {@link Literal} out of the supplied object, mapping the runtime type of the object to the * appropriate {@link XSD} datatype. If no mapping is available, the method returns a literal with the string * representation of the supplied object as the value, and {@link XSD#STRING} as the datatype. *

* Recognized types are {@link Boolean}, {@link Byte}, {@link Double}, {@link Float}, {@link Integer}, {@link Long}, * {@link Short}, {@link XMLGregorianCalendar } , {@link TemporalAccessor} and {@link Date}. * * @param object an object to be converted to a typed literal. * @return a typed literal representation of the supplied object. * @throws NullPointerException if the input parameter is null.. */ public static Literal literal(Object object) { return literal(VALUE_FACTORY, object, false); } /** * Creates a new typed {@link Literal} out of the supplied object, mapping the runtime type of the object to the * appropriate {@link XSD} datatype. *

* Recognized types are {@link Boolean}, {@link Byte}, {@link Double}, {@link Float}, {@link BigDecimal}, * {@link Integer}, {@link BigInteger}, {@link Long}, {@link Short}, {@link XMLGregorianCalendar}, * {@link TemporalAccessor}, {@link TemporalAmpount} and {@link Date}. * * @param object an object to be converted to a typed literal. * @param failOnUnknownType If no mapping is available and failOnUnknownType is false the * method returns a literal with the string representation of the supplied object as the * value, and {@link XSD#STRING} as the datatype. If set to true the method * throws an {@link IllegalArgumentException} if no mapping available. * @return a typed literal representation of the supplied object. * @throws NullPointerException if the input parameter is null.. */ public static Literal literal(Object object, boolean failOnUnknownType) { return literal(VALUE_FACTORY, object, failOnUnknownType); } /** * Creates a new typed {@link Literal} out of the supplied object, mapping the runtime type of the object to the * appropriate {@link XSD} datatype. *

* Recognized types are {@link Boolean}, {@link Byte}, {@link Double}, {@link Float}, {@link Integer}, {@link Long}, * {@link Short}, {@link XMLGregorianCalendar }, {@link TemporalAccessor} and {@link Date}. * * @param valueFactory the {@link ValueFactory}to use for creation of the {@link Literal} * @param object an object to be converted to a typed literal. * @param failOnUnknownType If no mapping is available and failOnUnknownType is false the * method returns a literal with the string representation of the supplied object as the * value, and {@link XSD#STRING} as the datatype. If set to true the method * throws an {@link IllegalArgumentException} if no mapping available. * @return a typed literal representation of the supplied object. * @throws NullPointerException if any of the input parameters is null. * @throws IllegalArgumentException if failOnUnknownType is set to true and the runtime * type of the supplied object could not be mapped. */ public static Literal literal(ValueFactory vf, Object object, boolean failOnUnknownType) { return createLiteralFromObject(vf, object, failOnUnknownType); } /* triple factory methods */ /** * Creates a new {@link Triple RDF-star embedded triple} with the supplied subject, predicate, and object. * * @param subject the Triple subject * @param predicate the Triple predicate * @param object the Triple object * @return a {@link Triple} with the supplied subject, predicate, and object. * @throws NullPointerException if any of the supplied input parameters is null. */ public static Triple triple(Resource subject, IRI predicate, Value object) { return triple(VALUE_FACTORY, subject, predicate, object); } /** * Creates a new {@link Triple RDF-star embedded triple} with the supplied subject, predicate, and object. * * @param vf the {@link ValueFactory} to use for creation of the {@link Triple} * @param subject the Triple subject * @param predicate the Triple predicate * @param object the Triple object * @return a {@link Triple} with the supplied subject, predicate, and object. * @throws NullPointerException if any of the supplied input parameters is null. */ public static Triple triple(ValueFactory vf, Resource subject, IRI predicate, Value object) { return vf.createTriple( Objects.requireNonNull(subject, "subject may not be null"), Objects.requireNonNull(predicate, "predicate may not be null"), Objects.requireNonNull(object, "object may not be null") ); } /** * Creates a new {@link Triple RDF-star embedded triple} using the subject, predicate and object from the supplied * {@link Statement}. * * @param statement the {@link Statement} from which to construct a {@link Triple} * @return a {@link Triple} with the same subject, predicate, and object as the supplied Statement. * @throws NullPointerException if statement is null. */ public static Triple triple(Statement statement) { Objects.requireNonNull(statement, "statement may not be null"); return VALUE_FACTORY.createTriple(statement.getSubject(), statement.getPredicate(), statement.getObject()); } /** * Creates a new {@link Triple RDF-star embedded triple} using the subject, predicate and object from the supplied * {@link Statement}. * * @param vf the {@link ValueFactory} to use for creation of the {@link Triple} * @param statement the {@link Statement} from which to construct a {@link Triple} * @return a {@link Triple} with the same subject, predicate, and object as the supplied Statement. * @throws NullPointerException if any of the supplied input parameters is null. */ public static Triple triple(ValueFactory vf, Statement statement) { Objects.requireNonNull(statement, "statement may not be null"); return vf.createTriple(statement.getSubject(), statement.getPredicate(), statement.getObject()); } /** * Create a new {@link Namespace} object. * * @param prefix the prefix associated with the namespace * @param name the namespace name (typically an IRI) for the namespace. * @return a {@link Namespace} object. * @since 3.6.0 */ public static Namespace namespace(String prefix, String name) { return new SimpleNamespace(prefix, name); } /** * Get a {@link ValueFactory}. * * @return a {@link ValueFactory}. */ public static ValueFactory getValueFactory() { return VALUE_FACTORY; } /* private methods */ /** * Creates a typed {@link Literal} out of the supplied object, mapping the runtime type of the object to the * appropriate XML Schema type. If no mapping is available, the method throws an exception if the boolean parameter * is true, or if it is false it returns a literal with the string representation of the supplied object as the * value, and {@link XSD#STRING} as the datatype. Recognized types are {@link Boolean}, {@link Byte}, * {@link Double}, {@link Float}, {@link Integer}, {@link Long}, {@link Short}, {@link XMLGregorianCalendar } , and * {@link Date}. * * @param valueFactory The {@link ValueFactory} to use when creating the result. * @param object an object to be converted to a typed literal. * @param throwExceptionOnFailure If true throws a {@link LiteralUtilException} when the object is not recognised. * If false it returns a string typed literal based on the objects toString method. * @return a typed literal representation of the supplied object. * @throws IllegalArgumentException If the literal could not be created. * @throws NullPointerException If the object was null. */ private static Literal createLiteralFromObject(ValueFactory valueFactory, Object object, boolean throwExceptionOnFailure) throws IllegalArgumentException { Objects.requireNonNull(valueFactory, "valueFactory may not be null"); Objects.requireNonNull(object, "object may not be null"); if (object instanceof Boolean) { return valueFactory.createLiteral((Boolean) object); } else if (object instanceof Byte) { return valueFactory.createLiteral((Byte) object); } else if (object instanceof Double) { return valueFactory.createLiteral((Double) object); } else if (object instanceof Float) { return valueFactory.createLiteral((Float) object); } else if (object instanceof BigDecimal) { return valueFactory.createLiteral((BigDecimal) object); } else if (object instanceof Integer) { return valueFactory.createLiteral((Integer) object); } else if (object instanceof BigInteger) { return valueFactory.createLiteral((BigInteger) object); } else if (object instanceof Long) { return valueFactory.createLiteral((Long) object); } else if (object instanceof Short) { return valueFactory.createLiteral((Short) object); } else if (object instanceof XMLGregorianCalendar) { return valueFactory.createLiteral((XMLGregorianCalendar) object); } else if (object instanceof Date) { return valueFactory.createLiteral((Date) object); } else if (object instanceof TemporalAccessor) { return valueFactory.createLiteral((TemporalAccessor) object); } else if (object instanceof TemporalAmount) { return valueFactory.createLiteral((TemporalAmount) object); } else if (object instanceof String) { return valueFactory.createLiteral(object.toString(), CoreDatatype.XSD.STRING); } else { if (throwExceptionOnFailure) { throw new IllegalArgumentException("Unrecognized object type: " + object); } return valueFactory.createLiteral(object.toString(), CoreDatatype.XSD.STRING); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy