package net.fortytwo.sesametools;
import info.aduna.iteration.CloseableIteration;
import org.openrdf.model.IRI;
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;
/**
* A <code>TripleSource</code> which is based on a <code>SailConnection</code>
*
* @author Joshua Shinavier (http://fortytwo.net)
*/
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 IRI pred,
final Value obj,
final Resource... contexts) {
try {
return new QueryEvaluationIteration(
baseConnection.getStatements(subj, pred, obj, includeInferred, contexts));
} catch (SailException e) {
return new EmptyCloseableIteration<>();
}
}
public ValueFactory getValueFactory() {
return valueFactory;
}
public static class QueryEvaluationIteration implements CloseableIteration<Statement, QueryEvaluationException> {
private CloseableIteration<? extends Statement, SailException> baseIteration;
public QueryEvaluationIteration(final CloseableIteration<? extends Statement, SailException> baseIteration) {
this.baseIteration = baseIteration;
}
public void close() throws QueryEvaluationException {
try {
baseIteration.close();
} catch (SailException e) {
throw new QueryEvaluationException(e);
}
}
public boolean hasNext() throws QueryEvaluationException {
try {
return baseIteration.hasNext();
} catch (SailException e) {
throw new QueryEvaluationException(e);
}
}
public Statement next() throws QueryEvaluationException {
try {
return baseIteration.next();
} catch (SailException e) {
throw new QueryEvaluationException(e);
}
}
public void remove() throws QueryEvaluationException {
try {
baseIteration.remove();
} catch (SailException e) {
throw new QueryEvaluationException(e);
}
}
}
}