package net.fortytwo.sesametools.rdftransaction; import org.openrdf.http.protocol.transaction.TransactionWriter; import org.openrdf.http.protocol.transaction.operations.TransactionOperation; import org.openrdf.sail.Sail; import org.openrdf.sail.SailConnection; import org.openrdf.sail.SailException; import org.openrdf.sail.helpers.SailWrapper; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; /** * A <code>Sail</code> which uploads committed transactions in the application/x-rdftransaction format * * @author Joshua Shinavier (http://fortytwo.net). */ public abstract class RDFTransactionSail extends SailWrapper { private final int commitsPerTransaction; private final TransactionWriter writer = new TransactionWriter(); public RDFTransactionSail(final Sail baseSail, final int commitsPerTransaction) { super(baseSail); this.commitsPerTransaction = commitsPerTransaction; } public RDFTransactionSail(final Sail baseSail) { this(baseSail, 1); } @Override public SailConnection getConnection() throws SailException { SailConnection b = this.getBaseSail().getConnection(); return new RDFTransactionSailConnection(b, this, commitsPerTransaction); } protected byte[] createTransactionEntity(final List<TransactionOperation> operations) throws SailException { try { try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { writer.serialize(operations, bos); return bos.toByteArray(); } } catch (IOException e) { throw new SailException(e); } } public abstract void handleTransaction(final List<TransactionOperation> operations) throws SailException; }