package net.fortytwo.sesametools.ldserver.query;
import org.openrdf.sail.Sail;
import org.openrdf.sail.SailConnection;
import org.restlet.data.MediaType;
import org.restlet.representation.OutputRepresentation;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* A SPARQL query result as an HTTP entity.
*
* @author Joshua Shinavier (http://fortytwo.net)
*/
public class SparqlQueryRepresentation extends OutputRepresentation {
private final ByteArrayOutputStream data;
public SparqlQueryRepresentation(final String query,
final Sail sail,
final int limit,
final MediaType mediaType) throws Exception {
super(mediaType);
try {
data = new ByteArrayOutputStream();
SailConnection sc = sail.getConnection();
try {
SparqlTools.SparqlResultFormat format
= SparqlTools.SparqlResultFormat.lookup(this.getMediaType());
SparqlTools.executeQuery(query, sc, data, limit, format);
} finally {
sc.close();
}
} catch (Throwable e) {
// TODO: use logging instead
e.printStackTrace(System.err);
throw new Exception(e);
}
}
public void write(final OutputStream out) throws IOException {
data.writeTo(out);
}
}