Skip to content
Snippets Groups Projects
Commit 3ece7cae authored by Thorsten Vitt's avatar Thorsten Vitt
Browse files

Plain text support for the aggregator

parent 257f93c6
No related branches found
No related tags found
No related merge requests found
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
import javax.ws.rs.core.StreamingOutput; import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import info.textgrid.services.aggregator.text.PlainTextWriter;
import org.apache.cxf.jaxrs.model.wadl.Description; import org.apache.cxf.jaxrs.model.wadl.Description;
import org.apache.cxf.jaxrs.model.wadl.Descriptions; import org.apache.cxf.jaxrs.model.wadl.Descriptions;
import org.apache.cxf.jaxrs.model.wadl.DocTarget; import org.apache.cxf.jaxrs.model.wadl.DocTarget;
...@@ -150,6 +151,24 @@ public Response getHTML( ...@@ -150,6 +151,24 @@ public Response getHTML(
return writer.createResponse().build(); return writer.createResponse().build();
} }
@GET
@Path(value = "/text/{object}")
@Produces(value = "text/plain")
@Descriptions({
@Description(target = DocTarget.METHOD, value="Generates plain text output."),
@Description(target = DocTarget.RETURN, value = "A plain text document.")
})
public Response getText(
@Description("The TextGrid URIs of the TEI document(s) or aggregation(s) to transform, separated by commas") @PathParam("object") final String uriList,
@Description("Session ID to access protected resources") @QueryParam("sid") final String sid,
@Description("Also access sandboxed data") @QueryParam("sandbox") final boolean sandbox,
@Context final Request request) throws IoFault, AuthFault, IOException, SaxonApiException, ObjectNotFoundFault, MetadataParseFault, ProtocolNotImplementedFault {
PlainTextWriter writer = new PlainTextWriter(repository, getStylesheetManager(), uriList, request);
writer.sid(sid);
writer.sandbox(sandbox);
return writer.createResponse().build();
}
@GET @GET
@Path(value = "/zip/{objects}") @Path(value = "/zip/{objects}")
@Produces("application/zip") @Produces("application/zip")
......
package info.textgrid.services.aggregator.text;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.*;
import info.textgrid.services.aggregator.ITextGridRep;
import info.textgrid.services.aggregator.html.TGUriResolver;
import info.textgrid.services.aggregator.teicorpus.CorpusBasedExporter;
import info.textgrid.services.aggregator.util.StylesheetManager;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.Serializer;
import net.sf.saxon.s9api.XsltTransformer;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
public class PlainTextWriter extends CorpusBasedExporter {
private static final URI TO_TEXT_XSL = java.net.URI.create("/tei-stylesheets/txt/tei-to-text.xsl");
private final StylesheetManager stylesheetManager;
public PlainTextWriter(ITextGridRep repository, StylesheetManager stylesheetManager, String uriList, Request request) {
super(repository, request, uriList);
this.stylesheetManager = stylesheetManager;
setMediaType(MediaType.TEXT_PLAIN + "; charset=UTF-8");
setFileExtension(".txt");
}
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {
try {
final XsltTransformer transformer = stylesheetManager.getStylesheet(TO_TEXT_XSL, getSid(), false, true).load();
if (getSid().isPresent())
transformer.setURIResolver(new TGUriResolver(repository, getSid()));
transformer.setSource(loadSource(false));
final Serializer serializer = stylesheetManager.xsltProcessor.newSerializer(output);
transformer.setDestination(serializer);
transformer.transform();
} catch (SaxonApiException | IoFault | MetadataParseFault | ProtocolNotImplementedFault e) {
throw new WebApplicationException(e);
} catch (ObjectNotFoundFault objectNotFoundFault) {
throw new WebApplicationException(objectNotFoundFault, 404);
} catch (AuthFault authFault) {
throw new WebApplicationException(authFault, 403);
}
}
}
package info.textgrid.services.aggregator;
import org.apache.commons.io.IOUtils;
import org.hamcrest.CoreMatchers;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.HttpURLConnection;
import static org.junit.Assert.*;
import static org.junit.Assume.*;
import static org.hamcrest.CoreMatchers.*;
public class PlainTextIT extends AbstractIntegrationTest {
@Test
public void testText() throws IOException {
final HttpURLConnection connection = createRequest("/text/textgrid:qdnf.0");
connection.connect();
assertThat(connection.getResponseCode(), is(200));
assertThat(connection.getContentType(), is("text/plain;charset=UTF-8"));
assertThat(IOUtils.toString(connection.getInputStream()),
CoreMatchers.<Object>is("Den Pessimisten\n" +
"Ghasel\n" +
"Solang uns Liebe lockt mit Lust und Plagen,\n" +
"Solang Begeistrung wechselt und Verzagen,\n" +
"Solange wird auf Erden nicht die Zeit,\n" +
"Die schreckliche, die dichterlose tagen:\n" +
"Solang in tausend Formen Schönheit blüht,\n" +
"Schlägt auch ein Herz, zu singen und zu sagen,\n" +
"Solang das Leid, das ewge, uns umflicht,\n" +
"Solange werden wirs in Tönen klagen,\n" +
"Und es erlischt erst dann der letzte Traum,\n" +
"Wenn er das letzte Herz zu Gott getragen!\n"));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment