Add pipe response rewriting (#794)

limited to korap host by default. Configurable via kustvakt.conf.

Change-Id: Ifb0b6470a4b1fc6db79b3bb05443f6482f4b7ea8
diff --git a/src/test/java/de/ids_mannheim/korap/config/LiteJerseyTest.java b/src/test/java/de/ids_mannheim/korap/config/LiteJerseyTest.java
index 80b00a5..f48b8b3 100644
--- a/src/test/java/de/ids_mannheim/korap/config/LiteJerseyTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/LiteJerseyTest.java
@@ -22,6 +22,9 @@
 
     public static final String API_VERSION = "v1.0";
 
+	protected final static String freeCorpusAccess = "Free corpus access policy "
+			+ "has been added.";
+    
     @Autowired
     protected GenericApplicationContext applicationContext;
 
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 8f58c16..6b3dc7f 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
@@ -124,14 +124,14 @@
                 "operation:injection");
 		assertEquals(freeCorpusAccess,
 				node.at("/collection/rewrites/0/_comment").asText());
-        node = node.at("/query/wrap/rewrites");
-        assertEquals(2, node.size());
-        assertEquals(node.at("/0/src").asText(), "Glemm");
-        assertEquals(node.at("/0/operation").asText(), "operation:override");
-        assertEquals(node.at("/0/scope").asText(), "key");
-        assertEquals(node.at("/1/src").asText(), "Kustvakt");
-        assertEquals(node.at("/1/operation").asText(), "operation:injection");
-        assertEquals(node.at("/1/scope").asText(), "foundry");
+		node = node.at("/query/wrap/rewrites");
+		assertEquals(2, node.size());
+		assertEquals("Glemm", node.at("/0/src").asText());
+		assertEquals("operation:override", node.at("/0/operation").asText());
+		assertEquals("key", node.at("/0/scope").asText());
+		assertEquals("Kustvakt", node.at("/1/src").asText());
+		assertEquals("operation:injection", node.at("/1/operation").asText());
+		assertEquals("foundry", node.at("/1/scope").asText());
     }
 
     @Test
@@ -213,7 +213,7 @@
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/3").asText(), "404 Not Found");
+        assertEquals("404 Not Found", node.at("/warnings/0/3").asText());
     }
 
     @Test
@@ -225,7 +225,7 @@
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/3").asText(), "glemm");
+        assertEquals("Unrecognized pipe URL", node.at("/warnings/0/3").asText());
     }
 
     @Test
@@ -238,11 +238,11 @@
                 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
                 .queryParam("pipes", pipeUri).request().get();
         String entity = response.readEntity(String.class);
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/3").asText(),
-                "415 Unsupported Media Type");
+		assertEquals(Status.OK.getStatusCode(), response.getStatus());
+		JsonNode node = JsonUtils.readTree(entity);
+		assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
+		assertEquals("415 Unsupported Media Type",
+				node.at("/warnings/0/3").asText()        );
     }
 
     @Test
@@ -259,10 +259,11 @@
         assertEquals(2, node.at("/warnings").size());
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
         assertEquals(url, node.at("/warnings/0/2").asText());
-        assertEquals(node.at("/warnings/0/3").asText(), "404 Not Found");
-        assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/1/0").asInt());
-        assertEquals(node.at("/warnings/1/2").asText(), "http://glemm");
-        assertEquals(node.at("/warnings/1/3").asText(), "glemm");
+		assertEquals("404 Not Found", node.at("/warnings/0/3").asText());
+		assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/1/0").asInt());
+		assertEquals("http://glemm", node.at("/warnings/1/2").asText());
+		assertEquals("Unrecognized pipe URL",
+				node.at("/warnings/1/3").asText());
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchPipeTest.java b/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchPipeTest.java
index 704ae5f..da7b7e9 100644
--- a/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchPipeTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchPipeTest.java
@@ -115,14 +115,14 @@
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
         assertEquals(2, node.at("/query/wrap/key").size());
-        node = node.at("/query/wrap/rewrites");
-        assertEquals(2, node.size());
-        assertEquals(node.at("/0/src").asText(), "Glemm");
-        assertEquals(node.at("/0/operation").asText(), "operation:override");
-        assertEquals(node.at("/0/scope").asText(), "key");
-        assertEquals(node.at("/1/src").asText(), "Kustvakt");
-        assertEquals(node.at("/1/operation").asText(), "operation:injection");
-        assertEquals(node.at("/1/scope").asText(), "foundry");
+		node = node.at("/query/wrap/rewrites");
+		assertEquals(2, node.size());
+		assertEquals("Glemm", node.at("/0/src").asText());
+		assertEquals("operation:override", node.at("/0/operation").asText());
+		assertEquals("key", node.at("/0/scope").asText());
+		assertEquals("Kustvakt", node.at("/1/src").asText());
+		assertEquals("operation:injection", node.at("/1/operation").asText());
+		assertEquals("foundry", node.at("/1/scope").asText());
     }
 
     @Test
@@ -182,7 +182,7 @@
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/3").asText(), "404 Not Found");
+        assertEquals("404 Not Found", node.at("/warnings/0/3").asText());
     }
 
     @Test
@@ -194,7 +194,7 @@
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/3").asText(), "glemm");
+        assertEquals("Unrecognized pipe URL", node.at("/warnings/0/3").asText());
     }
 
     @Test
@@ -207,11 +207,11 @@
                 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
                 .queryParam("pipes", pipeUri).request().get();
         String entity = response.readEntity(String.class);
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/3").asText(),
-                "415 Unsupported Media Type");
+		assertEquals(Status.OK.getStatusCode(), response.getStatus());
+		JsonNode node = JsonUtils.readTree(entity);
+		assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
+		assertEquals("415 Unsupported Media Type",
+				node.at("/warnings/0/3").asText()        );
     }
 
     @Test
@@ -228,10 +228,11 @@
         assertEquals(2, node.at("/warnings").size());
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
         assertEquals(url, node.at("/warnings/0/2").asText());
-        assertEquals(node.at("/warnings/0/3").asText(), "404 Not Found");
-        assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/1/0").asInt());
-        assertEquals(node.at("/warnings/1/2").asText(), "http://glemm");
-        assertEquals(node.at("/warnings/1/3").asText(), "glemm");
+		assertEquals("404 Not Found", node.at("/warnings/0/3").asText());
+		assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/1/0").asInt());
+		assertEquals("http://glemm", node.at("/warnings/1/2").asText());
+		assertEquals("Unrecognized pipe URL",
+				node.at("/warnings/1/3").asText());
     }
 
     @Test
@@ -307,4 +308,5 @@
         node = JsonUtils.readTree(entity);
         assertEquals(StatusCodes.PIPE_FAILED, node.at("/warnings/0/0").asInt());
     }
+
 }
diff --git a/src/test/resources/kustvakt-lite-test.conf b/src/test/resources/kustvakt-lite-test.conf
new file mode 100644
index 0000000..0143cec
--- /dev/null
+++ b/src/test/resources/kustvakt-lite-test.conf
@@ -0,0 +1,40 @@
+# Krill settings
+
+# index dir
+krill.indexDir= sample-index
+
+krill.index.commit.count = 134217000
+krill.index.commit.log = log/krill.commit.log
+krill.index.commit.auto = 500
+krill.index.relations.max = 100
+
+# krill.namedVC=data/vc
+
+
+# Kustvakt settings
+
+api.welcome.message = Welcome to KorAP API!
+current.api.version = v1.0
+# multiple versions separated by space
+supported.api.version = v1.0
+
+# default
+kustvakt.base.url=/api/*
+
+# server
+server.port=8089
+server.host=localhost
+
+# Pipe (optional) 
+# pipe.host=https://korap.ids-mannheim.de (default)
+# LOCALHOST ONLY FOR TESTING
+pipe.host=http://localhost
+
+# default foundries for layers
+default.foundry.partOfSpeech = tt
+default.foundry.lemma = tt
+default.foundry.orthography = opennlp
+default.foundry.dependency = malt
+default.foundry.constituent = corenlp
+default.foundry.morphology = marmot
+default.foundry.surface = base
\ No newline at end of file
diff --git a/src/test/resources/kustvakt-test.conf b/src/test/resources/kustvakt-test.conf
index d40c39f..a048478 100644
--- a/src/test/resources/kustvakt-test.conf
+++ b/src/test/resources/kustvakt-test.conf
@@ -31,6 +31,9 @@
 ## Cache
 cache.total.results.enabled = true
 
+# Pipe
+pipe.host=http://localhost
+
 # Default foundries for specific layers (optional)
 #
 default.foundry.partOfSpeech = tt