package org.neo4j.rdf.sail.utils; import info.aduna.iteration.CloseableIteration; import org.neo4j.rdf.util.TemporaryLogger; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.algebra.evaluation.TripleSource; import org.openrdf.sail.SailConnection; import org.openrdf.sail.SailException; import org.openrdf.model.Resource; import org.openrdf.model.ValueFactory; import org.openrdf.model.Statement; import org.openrdf.model.Value; import org.openrdf.model.URI; public class SailConnectionTripleSource implements TripleSource { private SailConnection baseConnection; private ValueFactory valueFactory; private boolean includeInferred; public SailConnectionTripleSource(final SailConnection conn, final ValueFactory valueFactory, final boolean includeInferred) { baseConnection = conn; this.valueFactory = valueFactory; this.includeInferred = includeInferred; } public CloseableIteration<? extends Statement, QueryEvaluationException> getStatements(final Resource subj, final URI pred, final Value obj, final Resource... contexts) { TemporaryLogger.Timer timer = new TemporaryLogger.Timer(); try { return new QueryEvaluationIteration( baseConnection.getStatements(subj, pred, obj, includeInferred, contexts)); } catch (SailException e) { return new EmptyCloseableIteration<Statement, QueryEvaluationException>(); }/* finally { TemporaryLogger.getLogger().info( "SailConnectionTripleSource.getStatements: " + "S:" + subj + " P:" + pred + " O:" + obj + " G:" + contextsString( contexts ) + " time:" + timer.lap() ); }*/ } private String contextsString( Resource... contexts ) { if ( contexts == null ) { return "null"; } StringBuffer buffer = new StringBuffer( "[" ); int counter = 0; for ( Resource context : contexts ) { if ( counter++ > 0 ) { buffer.append( "," ); } buffer.append( (null == context) ? "null" : context.toString() ); } buffer.append( "]" ); return buffer.toString(); } public ValueFactory getValueFactory() { return valueFactory; } }