package net.fortytwo.twitlogic.larkc.sail; 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.sail.SailConnection; import org.openrdf.sail.SailConnectionListener; import org.openrdf.sail.SailException; import org.openrdf.sail.helpers.SailConnectionWrapper; /** * User: josh * Date: 1/8/11 * Time: 7:44 AM */ public class QueueingSailConnection extends SailConnectionWrapper { private static final Resource[] DEFAULT_CONTEXT = {null}; private final SailConnectionListener listener; private final ValueFactory valueFactory; public QueueingSailConnection(final SailConnection wrappedCon, final SailConnectionListener listener, final ValueFactory valueFactory) { super(wrappedCon); this.listener = listener; this.valueFactory = valueFactory; } @Override public void addStatement(Resource resource, URI uri, Value value, Resource... resources) throws SailException { if (0 == resources.length) { resources = DEFAULT_CONTEXT; } for (Resource c : resources) { Statement st = valueFactory.createStatement(resource, uri, value, c); listener.statementAdded(st); } // Elmo needs to be able to retrieve previously added statements, even within a single transaction. this.getWrappedConnection().addStatement(resource, uri, value, resources); } }