Skip to content

Commit

Permalink
Update FedoraSparql to use streaming RDF output
Browse files Browse the repository at this point in the history
  • Loading branch information
cbeer authored and Andrew Woods committed Oct 15, 2014
1 parent eb51549 commit e085c4a
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 42 deletions.
Expand Up @@ -20,15 +20,14 @@
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Resource;
import org.apache.commons.io.IOUtils;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFLanguages;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.fcrepo.http.api.FedoraBaseResource;
import org.fcrepo.http.commons.responses.ViewHelpers;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.impl.rdf.impl.NamespaceRdfContext;
import org.fcrepo.kernel.utils.iterators.RdfStream;
import org.fcrepo.transform.http.responses.ResultSetStreamingOutput;
import org.fcrepo.transform.sparql.JQLConverter;
import org.fcrepo.transform.sparql.SparqlServiceDescription;
Expand Down Expand Up @@ -115,31 +114,15 @@ public class FedoraSparql extends FedoraBaseResource {
@GET
@Timed
@Produces({RDF_XML + ";qs=20", TURTLE, N3, N3_ALT2, NTRIPLES, TEXT_PLAIN, APPLICATION_XML, TURTLE_X, JSON_LD})
public Response sparqlServiceDescription(@Context final Request request,
public RdfStream sparqlServiceDescription(@Context final Request request,
@Context final UriInfo uriInfo) {

final SparqlServiceDescription sd = new SparqlServiceDescription(session, uriInfo);
final Variant bestPossibleResponse = request.selectVariant(POSSIBLE_RDF_VARIANTS);

LOGGER.debug("Getting sparql service description with media type {} ...", bestPossibleResponse);

Lang tmpLang;
if (bestPossibleResponse == null ||
(tmpLang = RDFLanguages.contentTypeToLang(bestPossibleResponse.getMediaType().toString())) == null) {
// set default format to rdf/xml
tmpLang = RDFLanguages.RDFXML;
}
final Lang rdfLang = tmpLang;
final StreamingOutput stream = new StreamingOutput() {
@Override
public void write(final OutputStream output) {

LOGGER.debug("Writting sparql service description with jena RdfLanguages name {}.", rdfLang.getName());
final Writer outWriter = new OutputStreamWriter(output);
sd.createServiceDescription().asModel().write(outWriter, rdfLang.getName());
}
};
return ok(stream).header("Content-Type", rdfLang.getContentType().getContentType()).build();
return sd.createServiceDescription();
}

/**
Expand Down
Expand Up @@ -15,27 +15,25 @@
*/
package org.fcrepo.transform.http;

import static com.hp.hpl.jena.rdf.model.ResourceFactory.createProperty;
import static javax.ws.rs.core.Response.Status.OK;
import static javax.ws.rs.core.Response.ok;

import static org.fcrepo.kernel.RdfLexicon.SPARQL_SD_NAMESPACE;
import static org.junit.Assert.assertFalse;
import static org.springframework.test.util.ReflectionTestUtils.setField;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Resource;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFLanguages;
import org.fcrepo.http.commons.api.rdf.UriAwareIdentifierConverter;
import org.fcrepo.kernel.RdfLexicon;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.transform.http.responses.ResultSetStreamingOutput;
import org.fcrepo.transform.sparql.JQLResultSet;
import org.fcrepo.transform.sparql.SparqlServiceDescription;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
Expand All @@ -58,7 +56,6 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Variant;

Expand Down Expand Up @@ -160,21 +157,10 @@ public void setUp() throws RepositoryException {

@Test
public void testSparqlServiceDescription() {
final Response response = testObj.sparqlServiceDescription(mockRequest, uriInfo);
assertTrue(response.getStatus() == OK.getStatusCode());
final StreamingOutput stream = new StreamingOutput() {
@Override
public void write(final OutputStream output) {
final SparqlServiceDescription sd = new SparqlServiceDescription(mockSession, uriInfo);
final Lang rdfLang = RDFLanguages.contentTypeToLang(response.getMediaType().toString());
final Writer outWriter = new OutputStreamWriter(output);
sd.createServiceDescription().asModel().write(outWriter, rdfLang.getName());
}
};
final String expected = ok(stream).header("Content-Type",
RDFLanguages.contentTypeToLang(response.getMediaType().toString()))
.build().toString();
assertEquals(expected, response.toString());
final Model response = testObj.sparqlServiceDescription(mockRequest, uriInfo).asModel();
assertFalse(response.isEmpty());
assertTrue(response.contains(null,
createProperty(SPARQL_SD_NAMESPACE + "resultFormat")));
}

@Test
Expand Down

0 comments on commit e085c4a

Please sign in to comment.