package org.neo4j.rdf.sail;
import org.neo4j.rdf.model.Context;
import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.ValueFactoryImpl;
/**
* Author: josh
* Date: Apr 25, 2008
* Time: 7:17:16 PM
*/
public class GraphDatabaseSesameMapper {
// TODO: check whether ValueFactoryImpl is thread-safe
private static final ValueFactory VALUE_FACTORY = new ValueFactoryImpl();
public static Literal createLiteral(final org.neo4j.rdf.model.Literal from) {
return (null == from.getDatatype())
? (null == from.getLanguage())
// FIXME: casting to String may not be safe
? VALUE_FACTORY.createLiteral((String) from.getValue())
: VALUE_FACTORY.createLiteral((String) from.getValue(), from.getLanguage())
: VALUE_FACTORY.createLiteral((String) from.getValue(), createUri(from.getDatatype()));
}
public static BNode createBlankNode(final org.neo4j.rdf.model.BlankNode from) {
// FIXME: possible null pointer exception
return VALUE_FACTORY.createBNode(from.getInternalIdOrNull());
}
public static URI createUri(final org.neo4j.rdf.model.Uri from) {
return VALUE_FACTORY.createURI(from.getUriAsString());
}
public static Resource createResource(final org.neo4j.rdf.model.Resource from) {
return (from instanceof org.neo4j.rdf.model.Uri)
? createUri((org.neo4j.rdf.model.Uri) from)
: createBlankNode((org.neo4j.rdf.model.BlankNode) from);
}
public static Value createValue(final org.neo4j.rdf.model.Value from) {
return (from instanceof org.neo4j.rdf.model.Literal)
? createLiteral((org.neo4j.rdf.model.Literal) from)
: (from instanceof org.neo4j.rdf.model.Uri)
? createUri((org.neo4j.rdf.model.Uri) from)
: createBlankNode((org.neo4j.rdf.model.BlankNode) from);
}
public static Resource createContext(final org.neo4j.rdf.model.Context from) {
// TODO: blank node contexts
return from == null || from.equals( org.neo4j.rdf.model.Context.NULL ) ? null :
VALUE_FACTORY.createURI(from.getUriAsString());
}
public static Statement createStatement(final org.neo4j.rdf.model.CompleteStatement from,
final boolean readMetadata) {
Context context = from.getContext();
if (context != null && context.isWildcard()) {
throw new IllegalArgumentException("Cannot have wildcard context");
}
//System.out.println("context = " + context);
//System.out.println(" actually null?: " + (null == context.getUriAsString()));
Statement result = (null == context)
? VALUE_FACTORY.createStatement(createResource(from.getSubject()),
createUri(from.getPredicate()),
createValue(from.getObject()))
: VALUE_FACTORY.createStatement(
createResource(from.getSubject()),
createUri(from.getPredicate()),
createValue(from.getObject()),
createContext(context));
if ( readMetadata )
{
result = new GraphDatabaseStatementImpl( result, from );
}
return result;
}
// TODO (maybe): createNamespace
}