package org.ilrt.mca.rest.providers; import org.apache.log4j.Logger; import org.ilrt.mca.RdfMediaType; import org.ilrt.mca.rest.resources.SparqlEndpointResource; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; import java.io.IOException; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @Provider @Produces({MediaType.WILDCARD, RdfMediaType.APPLICATION_RDF_XML, RdfMediaType.TEXT_RDF_N3, MediaType.APPLICATION_JSON, RdfMediaType.SPARQL_RESULTS_JSON, RdfMediaType.SPARQL_RESULTS_XML}) public class SparqlQueryResultsProvider implements MessageBodyWriter<SparqlEndpointResource.SparqlQueryResults>{ @Override public boolean isWriteable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) { return SparqlEndpointResource.SparqlQueryResults.class.isAssignableFrom(aClass); } @Override public long getSize(SparqlEndpointResource.SparqlQueryResults sparqlQueryResults, Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) { return -1; } @Override public void writeTo(SparqlEndpointResource.SparqlQueryResults sparqlQueryResults, Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> stringObjectMultivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { logger.info("Executing and streaming the SPARQL results"); sparqlQueryResults.executeAndStreamResults(outputStream, mediaType); } private final Logger logger = Logger.getLogger(SparqlQueryResultsProvider.class); }