Add corpus support at VirtualCorpusRewrite (#806)

Change-Id: I4308419f2a4099db92f6091dc2154542aba33357
diff --git a/Changes b/Changes
index edd54e1..122a8d9 100644
--- a/Changes
+++ b/Changes
@@ -13,6 +13,7 @@
 - Add API version to KoralCollectionQueryBuilder (#806)
 - Clean up collection node from Krill response (#806)
 - Add API version to NamedVCLoader (#806)
+- Add corpus support at VirtualCorpusRewrite (#806)
 
 # version 0.79.1
 
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
index ca8673e..ccdc704 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
@@ -32,7 +32,12 @@
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
             User user) throws KustvaktException {
-        if (node.has("collection")) {
+    	if (node.has("corpus")) {
+            node = node.at("/corpus");
+            findVCRef(user.getUsername(), node);
+        }
+    	// EM: legacy
+    	else if (node.has("collection")) {
             node = node.at("/collection");
             findVCRef(user.getUsername(), node);
         }
@@ -106,8 +111,14 @@
     protected void rewriteVC (QueryDO vc, KoralNode koralNode)
             throws KustvaktException {
         String koralQuery = vc.getKoralQuery();
-        JsonNode newKoralQuery = JsonUtils.readTree(koralQuery).at("/collection");
-        
+        JsonNode queryNode = JsonUtils.readTree(koralQuery);
+        JsonNode newKoralQuery;
+        if (queryNode.has("collection")) {
+        	newKoralQuery = JsonUtils.readTree(koralQuery).at("/collection");
+        }
+        else {
+        	newKoralQuery = JsonUtils.readTree(koralQuery).at("/corpus");
+        }
         String source = koralNode.rawNode().toString();
         JsonNode sourceNode = JsonUtils.readTree(source);
         
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java
index fd2bd2d..dc66fc9 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java
@@ -11,7 +11,6 @@
 
 import de.ids_mannheim.korap.config.SpringJerseyTest;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.utils.JsonUtils;
 
 public class MultipleCorpusQueryTest extends SpringJerseyTest {
@@ -26,7 +25,7 @@
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
-        node = node.at("/collection/operands/1");
+        node = node.at("/corpus/operands/1");
         assertEquals("koral:docGroup", node.at("/@type").asText());
         assertEquals("operation:and", node.at("/operation").asText());
         assertEquals(2, node.at("/operands").size());
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
index 90ec30a..e047793 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
@@ -140,7 +140,7 @@
         assertEquals(302, node.at("/errors/0/0").asInt());
         assertEquals(302, node.at("/errors/1/0").asInt());
         assertTrue(node.at("/errors/2").isMissingNode());
-        assertFalse(node.at("/collection").isMissingNode());
+        assertFalse(node.at("/corpus").isMissingNode());
         assertEquals(13, node.at("/meta/count").asInt());
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
index bb75a43..7a0554a 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
@@ -444,30 +444,31 @@
             throws ProcessingException, KustvaktException {
     	createDoryVC();
         JsonNode node = testRetrieveKoralQuery("dory", "dory-vc");
-        assertEquals("koral:docGroup", node.at("/collection/@type").asText());
-        assertEquals("operation:and",
-            node.at("/collection/operation").asText());
-        assertEquals(2, node.at("/collection/operands").size());
+        node = node.at("/corpus");
+        assertEquals("koral:docGroup", node.at("/@type").asText());
+        assertEquals(
+                "operation:and",node.at("/operation").asText());
+        assertEquals(2, node.at("/operands").size());
         String json = "{\"corpusQuery\": \"corpusSigle=WPD17\"}";
         editVC("dory", "dory", "dory-vc", json);
+        
         node = testRetrieveKoralQuery("dory", "dory-vc");
-        assertEquals("koral:doc", node.at("/collection/@type").asText());
-        assertEquals("corpusSigle", node.at("/collection/key").asText());
-        assertEquals("WPD17", node.at("/collection/value").asText());
+        node = node.at("/corpus");
+        assertEquals("koral:doc",node.at("/@type").asText());
+        assertEquals("corpusSigle",node.at("/key").asText());
+        assertEquals("WPD17",node.at("/value").asText());
         
         json = "{\"corpusQuery\": \"corpusSigle=GOE AND creationDate since "
                 + "1820\"}";
         editVC("dory", "dory", "dory-vc", json);
         node = testRetrieveKoralQuery("dory", "dory-vc");
-        assertEquals("koral:docGroup", node.at("/collection/@type").asText());
-        assertEquals("operation:and",
-            node.at("/collection/operation").asText());
-        assertEquals("corpusSigle",
-            node.at("/collection/operands/0/key").asText());
-        assertEquals("GOE", node.at("/collection/operands/0/value").asText());
-        assertEquals("creationDate",
-            node.at("/collection/operands/1/key").asText());
-        assertEquals("1820", node.at("/collection/operands/1/value").asText());
+        node = node.at("/corpus");
+        assertEquals("koral:docGroup", node.at("/@type").asText());
+        assertEquals("operation:and", node.at("/operation").asText());
+        assertEquals("corpusSigle",node.at("/operands/0/key").asText());
+        assertEquals("GOE",node.at("/operands/0/value").asText());
+        assertEquals("creationDate", node.at("/operands/1/key").asText());
+        assertEquals("1820", node.at("/operands/1/value").asText());
         
         deleteVC("dory-vc", "dory", "dory");
     }