package org.aksw.jena_sparql_api.mapper.model; import java.util.function.Function; import org.aksw.jena_sparql_api.mapper.impl.type.RdfTypeFactoryImpl; import org.aksw.jena_sparql_api.utils.NodeUtils; import org.apache.jena.datatypes.TypeMapper; import org.apache.jena.graph.Node; /** * Convert a Java object to an RDF node. * Complex objects are represented as an IRI. * * @author raven * */ public class F_ObjectToNode implements Function<Object, Node> { protected TypeMapper typeMapper; protected RdfTypeFactoryImpl rdfClassFactory; public F_ObjectToNode(RdfTypeFactoryImpl rdfClassFactory, TypeMapper typeMapper) { this.rdfClassFactory = rdfClassFactory; this.typeMapper = typeMapper; } @Override public Node apply(Object o) { Node result; Class<?> clazz = o.getClass(); if(String.class.isAssignableFrom(clazz)) { // Check whether and which language tags need to be applied } if(clazz.isPrimitive()) { // Use jena's type mapper result = NodeUtils.createTypedLiteral(typeMapper, o); } else { RdfType rdfType = rdfClassFactory.forJavaType(clazz); result = rdfType.getRootNode(o); } return result; } }