Add corpus support at VirtualCorpusRewrite (#806)

Change-Id: I4308419f2a4099db92f6091dc2154542aba33357
diff --git a/Changes b/Changes
index 7843981..e087b50 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
 
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 fba3947..34548ae 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(node.at("/@type").asText(), "koral:docGroup");
         assertEquals(node.at("/operation").asText(), "operation:and");
         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 d9178bf..91a1606 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 9f53164..0234c26 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,34 @@
             throws ProcessingException, KustvaktException {
     	createDoryVC();
         JsonNode node = testRetrieveKoralQuery("dory", "dory-vc");
-        assertEquals(node.at("/collection/@type").asText(), "koral:docGroup");
-        assertEquals(node.at("/collection/operation").asText(),
+        node = node.at("/corpus");
+        assertEquals(node.at("/@type").asText(), "koral:docGroup");
+        assertEquals(node.at("/operation").asText(),
                 "operation:and");
-        assertEquals(2, node.at("/collection/operands").size());
+        assertEquals(2, node.at("/operands").size());
         String json = "{\"corpusQuery\": \"corpusSigle=WPD17\"}";
         editVC("dory", "dory", "dory-vc", json);
+        
         node = testRetrieveKoralQuery("dory", "dory-vc");
-        assertEquals(node.at("/collection/@type").asText(), "koral:doc");
-        assertEquals(node.at("/collection/key").asText(), "corpusSigle");
-        assertEquals(node.at("/collection/value").asText(), "WPD17");
+        node = node.at("/corpus");
+        assertEquals(node.at("/@type").asText(), "koral:doc");
+        assertEquals(node.at("/key").asText(), "corpusSigle");
+        assertEquals(node.at("/value").asText(), "WPD17");
         
         json = "{\"corpusQuery\": \"corpusSigle=GOE AND creationDate since "
                 + "1820\"}";
         editVC("dory", "dory", "dory-vc", json);
         node = testRetrieveKoralQuery("dory", "dory-vc");
-        assertEquals(node.at("/collection/@type").asText(), "koral:docGroup");
-        assertEquals(node.at("/collection/operation").asText(),
+        node = node.at("/corpus");
+        assertEquals(node.at("/@type").asText(), "koral:docGroup");
+        assertEquals(node.at("/operation").asText(),
                 "operation:and");
-        assertEquals(node.at("/collection/operands/0/key").asText(),
+        assertEquals(node.at("/operands/0/key").asText(),
                 "corpusSigle");
-        assertEquals(node.at("/collection/operands/0/value").asText(), "GOE");
-        assertEquals(node.at("/collection/operands/1/key").asText(),
+        assertEquals(node.at("/operands/0/value").asText(), "GOE");
+        assertEquals(node.at("/operands/1/key").asText(),
                 "creationDate");
-        assertEquals(node.at("/collection/operands/1/value").asText(), "1820");
+        assertEquals(node.at("/operands/1/value").asText(), "1820");
         
         deleteVC("dory-vc", "dory", "dory");
     }