Add apiVersion for checking VC in caching process.

Since it involves actual caching process, it cannot be easily tested.

Change-Id: Iaaa4c449fab2917b8bf6c9c4b39fe7dac26eadf9
diff --git a/Changes b/Changes
index d24d91e..032d1ed 100644
--- a/Changes
+++ b/Changes
@@ -17,6 +17,7 @@
 - Add apiVersion to rewrite (#806)
 - Fix collection/corpus paths in the test suite (#806)
 - Fix authorization with POST tests.
+- Add apiVersion for checking VC in caching process (#806)
 
 # version 0.79.1
 
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/BasicService.java b/src/main/java/de/ids_mannheim/korap/core/service/BasicService.java
index cfd6e1c..6ea75dc 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/BasicService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/BasicService.java
@@ -63,14 +63,15 @@
 		}
 
 		if (json != null) {
-			checkVC(json);
+			checkVC(json, apiVersion);
 		}
 		return json;
 	}
 	
-    protected void checkVC (String json) throws KustvaktException {
+    protected void checkVC (String json, double apiVersion) throws KustvaktException {
         JsonNode node = JsonUtils.readTree(json);
-        node = node.at("/collection");
+		String nodeName = (apiVersion >= 1.1) ? "corpus" : "collection";
+        node = node.at("/"+nodeName);
         if (node.has("ref")) {
             String vcName = node.path("ref").asText();
             if (vcName.contains("/")) {
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
index 173981b..61b8cef 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
@@ -36,11 +36,12 @@
 		return stats;
 	}
 
-    public String retrieveStatisticsForKoralQuery (String koralQuery)
+    public String retrieveStatisticsForKoralQuery (String koralQuery, 
+    		double apiVersion)
             throws KustvaktException {
         String stats = null;
         if (koralQuery != null && !koralQuery.isEmpty()) {
-            checkVC(koralQuery);
+            checkVC(koralQuery, apiVersion);
             stats = searchKrill.getStatistics(koralQuery);
         }
         else {
diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java
index 466fa24..0fb7099 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java
@@ -105,9 +105,16 @@
     @Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
     public Response getStatisticsFromKoralQuery (
             @Context SecurityContext context, @Context Locale locale,
+            @Context ContainerRequestContext requestContext,
             String koralQuery) {
+    	List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
+        
         try {
-            String stats = service.retrieveStatisticsForKoralQuery(koralQuery);
+            String stats = service.retrieveStatisticsForKoralQuery(koralQuery,
+            		apiVersion);
             return Response.ok(stats)
                     .header("X-Index-Revision", service.getIndexFingerprint())
                     .build();
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 98c8c3d..d2316e0 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
@@ -108,6 +108,8 @@
                 node.at("/meta/fields").toString());
     }
 
+    // Kustvakt sends query with only corpus, but Krill returns both corpus and 
+    // collection
     @Test
     public void testSearchQueryPublicCorpora () throws KustvaktException {
         Response response = target().path(API_VERSION).path("search")
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
index 97b50c6..0c76c4b 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
@@ -148,9 +148,9 @@
     }
 
     @Test
-    public void testGetStatisticsWithKoralQuery ()
+    public void testGetStatisticsWithKoralQueryV1_0 ()
             throws IOException, KustvaktException {
-        Response response = target().path(API_VERSION).path("statistics")
+        Response response = target().path(API_VERSION_V1_0).path("statistics")
                 .request()
                 .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                 .post(Entity.json("{ \"collection\" : {\"@type\": "
@@ -167,6 +167,25 @@
         assertEquals(2985, node.at("/sentences").asInt());
         assertEquals(128, node.at("/paragraphs").asInt());
     }
+    
+    @Test
+    public void testGetStatisticsWithKoralQuery ()
+            throws IOException, KustvaktException {
+        Response response = target().path(API_VERSION).path("statistics")
+                .request()
+                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                .post(Entity.json("{ \"corpus\" : {\"@type\": "
+                        + "\"koral:docGroupRef\", \"ref\": \"system-vc\"} }"));
+        assertEquals("Wes8Bd4h1OypPqbWF5njeQ==",
+            response.getHeaders().getFirst("X-Index-Revision"));
+        assertEquals(Status.OK.getStatusCode(), response.getStatus());
+        String ent = response.readEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertEquals(2, node.at("/documents").asInt());
+        assertEquals(72770, node.at("/tokens").asInt());
+        assertEquals(2985, node.at("/sentences").asInt());
+        assertEquals(128, node.at("/paragraphs").asInt());
+    }
 
     @Test
     public void testGetStatisticsWithEmptyCollection ()