Add pipe response for the metadata web-service.
Change-Id: I072525f6edfe3850f15da1326d7483eb45f93185
diff --git a/Changes b/Changes
index 71ce573..6b8d71c 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
# version 1.1-SNAPSHOT
- Change VC and query names to lowercase
- Implemented pipe response rewriting for match info API (#814)
+- Add pipe response for the metadata web-service.
# version 1.0.1
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
index a139a4d..b2857f2 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
@@ -574,7 +574,8 @@
}
public String retrieveDocMetadata (String corpusId, String docId,
- String textId, String fields, String username, HttpHeaders headers)
+ String textId, String fields, String username, HttpHeaders headers,
+ String responsePipes)
throws KustvaktException {
List<String> fieldList = null;
if (fields != null && !fields.isEmpty()) {
@@ -588,6 +589,8 @@
String textSigle = searchKrill.getTextSigle(corpusId, docId, textId);
String results = searchKrill.getFields(textSigle, fieldList, p);
+ results = runPipes(results, responsePipes);
+
return results;
}
diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
index 6f40ba2..a5903f1 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
@@ -418,12 +418,14 @@
@PathParam("docId") String docId,
@PathParam("textId") String textId,
@QueryParam("fields") String fields,
+ @QueryParam("response-pipes") String responsePipes,
@Context SecurityContext ctx,
@Context HttpHeaders headers) throws KustvaktException {
TokenContext tokenContext = (TokenContext) ctx.getUserPrincipal();
try {
String results = searchService.retrieveDocMetadata(corpusId, docId,
- textId, fields, tokenContext.getUsername(), headers);
+ textId, fields, tokenContext.getUsername(), headers,
+ responsePipes);
return Response.ok(results).build();
}
catch (KustvaktException e) {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java
index 41fe378..0ffa391 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPipeTest.java
@@ -46,6 +46,8 @@
private String glemmUri = "http://localhost:" + port + "/glemm";
private String termMapperUri = "http://localhost:" + port
+ "/term-mapper?foundry=corenlp";
+ private String termMapperUri2 = "http://localhost:" + port
+ + "/term-mapper?fields=@all";
public SearchPipeTest () throws URISyntaxException, IOException {
pipeJson = IOUtils.toString(
@@ -139,6 +141,40 @@
+ "\"corenlp/p:ADJA\">freie</span> <span title="
+ "\"corenlp/p:NN\">Weg</span>"));
}
+
+ @Test
+ public void testRetrieveMetadataWithResponsePipe ()
+ throws KustvaktException {
+
+ mockClient.reset()
+ .when(request().withMethod("POST")
+ .withPath("/term-mapper")
+ .withQueryStringParameter("fields", "@all")
+ .withHeaders(
+ new Header("Content-Type",
+ "application/json; charset=utf-8"),
+ new Header("Accept", "application/json")))
+ .respond(response()
+ .withHeader(new Header("Content-Type",
+ "application/json; charset=utf-8"))
+ .withBody(termMapperJson).withStatusCode(200));
+
+ Response response = target().path(API_VERSION).path("corpus")
+ .path("GOE").path("AGA").path("01784")
+ .queryParam("fields", "@all")
+ .queryParam("response-pipes", termMapperUri2)
+ .request().get();
+ assertEquals(Status.OK.getStatusCode(), response.getStatus());
+ String entity = response.readEntity(String.class);
+ JsonNode node = JsonUtils.readTree(entity);
+
+ assertTrue(node.at("/snippet").asText().startsWith(
+ "<span class=\"context-left\"></span><span class=\"match\">"
+ + "<span title=\"corenlp/p:ART\">der</span> <span title="
+ + "\"corenlp/p:ADJA\">alte</span> <span title="
+ + "\"corenlp/p:ADJA\">freie</span> <span title="
+ + "\"corenlp/p:NN\">Weg</span>"));
+ }
@Test
public void testSearchWithPipes ()