Add API version to KoralCollectionQueryBuilder (#806)

Change-Id: I413c642704ee62d981d951228bdb71283b4d303a
diff --git a/Changes b/Changes
index 6e14348..f9faab0 100644
--- a/Changes
+++ b/Changes
@@ -10,6 +10,7 @@
 - Add API version to the search service (#806)
 - Add API version to ResourceParser & ServiceInfo (#806)
 - Update Query QuerySerializer with API version in the test suite (#806)
+- Add API version to KoralCollectionQueryBuilder (#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 da07290..cfd6e1c 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
@@ -51,9 +51,10 @@
         return user;
     }
     
-	protected String buildKoralQueryFromCorpusQuery (List<String> cqList)
-			throws KustvaktException {
-		KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+	protected String buildKoralQueryFromCorpusQuery (List<String> cqList,
+			double apiVersion) throws KustvaktException {
+		KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder(
+				apiVersion);
 		String cq = combineMultipleCorpusQuery(cqList);
 		String json = null;
 		if (cq != null && !cq.isEmpty()) {
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 54452fa..aae79dd 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
@@ -18,9 +18,10 @@
 	private RewriteHandler statisticsRewriteHandler;
 	
 	public String retrieveStatisticsForCorpusQuery (List<String> cqList,
-			String username, HttpHeaders headers) throws KustvaktException {
+			String username, HttpHeaders headers, double apiVersion) 
+					throws KustvaktException {
 
-		String json = buildKoralQueryFromCorpusQuery(cqList);
+		String json = buildKoralQueryFromCorpusQuery(cqList, apiVersion);
 		//System.out.println("Before:" + json + "\n");
 		if (!cqList.isEmpty() && !combineMultipleCorpusQuery(cqList).isEmpty()) {
 			User user = createUser(username, headers);
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 998f48a..466fa24 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
@@ -22,9 +22,11 @@
 import jakarta.ws.rs.Path;
 import jakarta.ws.rs.Produces;
 import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.container.ContainerRequestContext;
 import jakarta.ws.rs.core.Context;
 import jakarta.ws.rs.core.HttpHeaders;
 import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.PathSegment;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.SecurityContext;
 
@@ -70,16 +72,22 @@
      */
 	@GET
 	public Response getStatistics (@Context SecurityContext securityContext,
+			@Context ContainerRequestContext requestContext,
 			@Context Locale locale, @Context HttpHeaders headers,
 			@QueryParam("cq") List<String> cq) {
 
+		List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
+        
 		TokenContext context = (TokenContext) securityContext
 				.getUserPrincipal();
 
         String stats;
         try {
 			stats = service.retrieveStatisticsForCorpusQuery(cq,
-					context.getUsername(), headers);
+					context.getUsername(), headers, apiVersion);
             if (DEBUG) {
                 jlog.debug("Stats: " + stats);
             }
diff --git a/src/main/java/de/ids_mannheim/korap/service/QueryService.java b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
index faf5375..5d0a4f9 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -110,37 +110,37 @@
         }
     }
 
-    public List<QueryDto> listOwnerQuery (String username, QueryType queryType)
-            throws KustvaktException {
+	public List<QueryDto> listOwnerQuery (String username, QueryType queryType,
+			double apiVersion) throws KustvaktException {
         List<QueryDO> list = queryDao.retrieveOwnerQuery(username, queryType);
-        return createQueryDtos(list, queryType);
+        return createQueryDtos(list, queryType, apiVersion);
     }
 
-    public List<QueryDto> listSystemQuery (QueryType queryType)
-            throws KustvaktException {
+	public List<QueryDto> listSystemQuery (QueryType queryType,
+			double apiVersion) throws KustvaktException {
         List<QueryDO> list = queryDao.retrieveQueryByType(ResourceType.SYSTEM,
                 null, queryType);
-        return createQueryDtos(list, queryType);
+        return createQueryDtos(list, queryType, apiVersion);
     }
 
     public List<QueryDto> listAvailableQueryForUser (String username,
-            QueryType queryType) throws KustvaktException {
+            QueryType queryType, double apiVersion) throws KustvaktException {
         List<QueryDO> list = queryDao.retrieveQueryByUser(username, queryType);
-        return createQueryDtos(list, queryType);
+        return createQueryDtos(list, queryType, apiVersion);
     }
 
     public List<QueryDto> listQueryByType (String createdBy, ResourceType type,
-            QueryType queryType) throws KustvaktException {
+            QueryType queryType, double apiVersion) throws KustvaktException {
 
         List<QueryDO> virtualCorpora = queryDao.retrieveQueryByType(type,
                 createdBy, queryType);
         Collections.sort(virtualCorpora);
-        return createQueryDtos(virtualCorpora, queryType);
+        return createQueryDtos(virtualCorpora, queryType, apiVersion);
 
     }
 
     private ArrayList<QueryDto> createQueryDtos (List<QueryDO> queryList,
-            QueryType queryType) throws KustvaktException {
+            QueryType queryType, double apiVersion) throws KustvaktException {
         ArrayList<QueryDto> dtos = new ArrayList<>(queryList.size());
         QueryDO query;
         Iterator<QueryDO> i = queryList.iterator();
@@ -259,7 +259,7 @@
         if (corpusQuery != null && !corpusQuery.isEmpty()) {
             koralQuery = serializeCorpusQuery(corpusQuery, apiVersion);
             requiredAccess = determineRequiredAccess(newQuery.isCached(),
-                    queryName, koralQuery);
+                    queryName, koralQuery, apiVersion);
         }
         else if (query != null && !query.isEmpty() && queryLanguage != null
                 && !queryLanguage.isEmpty()) {
@@ -329,7 +329,7 @@
         storeQuery(username, queryName, query.getType(), query.getQueryType(),
                 koralQuery, query.getDefinition(), query.getDescription(),
                 query.getStatus(), query.isCached(), queryCreator,
-                query.getQuery(), query.getQueryLanguage());
+                query.getQuery(), query.getQueryLanguage(), apiVersion);
     }
 
     private boolean checkNumberOfQueryLimit (String username,
@@ -364,17 +364,17 @@
             ResourceType type, QueryType queryType, String koralQuery,
             String definition, String description, String status,
             boolean isCached, String queryCreator, String query,
-            String queryLanguage) throws KustvaktException {
+            String queryLanguage, double apiVersion) throws KustvaktException {
         storeQuery(null, username, queryName, type, queryType, koralQuery,
                 definition, description, status, isCached, queryCreator, query,
-                queryLanguage);
+                queryLanguage, apiVersion);
     }
     
     public void storeQuery (QueryDO existingQuery, String username, String queryName,
             ResourceType type, QueryType queryType, String koralQuery,
             String definition, String description, String status,
             boolean isCached, String queryCreator, String query,
-            String queryLanguage) throws KustvaktException {
+            String queryLanguage, double apiVersion) throws KustvaktException {
         ParameterChecker.checkNameValue(queryName, "queryName");
         ParameterChecker.checkObjectValue(type, "type");
 
@@ -401,7 +401,7 @@
         CorpusAccess requiredAccess = CorpusAccess.FREE;
         if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
             requiredAccess = determineRequiredAccess(isCached, queryName,
-                    koralQuery);
+                    koralQuery, apiVersion);
         }
 
         if (DEBUG) {
@@ -472,10 +472,11 @@
     }
 
     public CorpusAccess determineRequiredAccess (boolean isCached, String name,
-            String koralQuery) throws KustvaktException {
+            String koralQuery, double apiVersion) throws KustvaktException {
 
         if (isCached) {
-            KoralCollectionQueryBuilder koral = new KoralCollectionQueryBuilder();
+            KoralCollectionQueryBuilder koral = 
+            		new KoralCollectionQueryBuilder(apiVersion);
             koral.with("referTo " + name);
             koralQuery = koral.toJSON();
             if (DEBUG) {
@@ -484,20 +485,23 @@
 
         }
 
-        if (findDocWithLicense(koralQuery, config.getAllOnlyRegex())) {
-            return CorpusAccess.ALL;
-        }
-        else if (findDocWithLicense(koralQuery, config.getPublicOnlyRegex())) {
-            return CorpusAccess.PUB;
+		if (findDocWithLicense(koralQuery, config.getAllOnlyRegex(),
+				apiVersion)) {
+			return CorpusAccess.ALL;
+		}
+		else if (findDocWithLicense(koralQuery, config.getPublicOnlyRegex(),
+				apiVersion)) {
+			return CorpusAccess.PUB;
         }
         else {
             return CorpusAccess.FREE;
         }
     }
 
-    private boolean findDocWithLicense (String koralQuery, String license)
-            throws KustvaktException {
-        KoralCollectionQueryBuilder koral = new KoralCollectionQueryBuilder();
+    private boolean findDocWithLicense (String koralQuery, String license, 
+    		double apiVersion) throws KustvaktException {
+        KoralCollectionQueryBuilder koral = 
+        		new KoralCollectionQueryBuilder(apiVersion);
         koral.setBaseQuery(koralQuery);
         koral.with("availability=/" + license + "/");
         String json = koral.toJSON();
@@ -721,7 +725,8 @@
     }
 
 	public QueryDto retrieveQueryByName (String username, String queryName,
-            String createdBy, QueryType queryType) throws KustvaktException {
+            String createdBy, QueryType queryType, double apiVersion) 
+            		throws KustvaktException {
         QueryDO query = searchQueryByName(username, queryName, createdBy,
                 queryType);
 
@@ -731,7 +736,7 @@
 			if (query.isCached()) {
 				List<String> cqList = new ArrayList<>(1);
 				cqList.add("referTo " + query.getName());
-				json = buildKoralQueryFromCorpusQuery(cqList);
+				json = buildKoralQueryFromCorpusQuery(cqList, apiVersion);
 			}
 			else { 
 				json = query.getKoralQuery();
diff --git a/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java b/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java
index 28e75e9..286920d 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java
@@ -30,16 +30,18 @@
     private JsonNode base;
     private StringBuilder builder;
     private String mergeOperator;
+    private double apiVersion;
 
-    public KoralCollectionQueryBuilder () {
-        this(false);
+    public KoralCollectionQueryBuilder (double apiVersion) {
+        this(false, apiVersion);
     }
 
-    public KoralCollectionQueryBuilder (boolean verbose) {
+    public KoralCollectionQueryBuilder (boolean verbose, double apiVersion) {
         this.verbose = verbose;
         this.builder = new StringBuilder();
         this.base = null;
         this.mergeOperator = null;
+        this.apiVersion = apiVersion;
     }
 
     /**
@@ -102,7 +104,7 @@
         JsonNode request = null;
         if (this.builder.length() != 0) {
             CollectionQueryProcessor tree = new CollectionQueryProcessor(
-                    this.verbose);
+                    this.verbose, apiVersion);
             tree.process(this.builder.toString());
             if (tree.getErrors().size() > 0) {
                 // legacy support
@@ -143,11 +145,14 @@
     }
 
     public JsonNode mergeWith (JsonNode node) {
+    	String nodeName = (apiVersion >= 1.1) ? "corpus"
+				: "collection";
+    	
         if (this.base != null) {
             if (node != null) {
-                JsonNode tobase = node.at("/collection");
+                JsonNode tobase = node.at("/"+nodeName);
                 JsonNode base = this.base.deepCopy();
-                JsonNode result = base.at("/collection");
+                JsonNode result = base.at("/"+nodeName);
 
                 if (result.isMissingNode() && !tobase.isMissingNode())
                     result = tobase;
@@ -159,7 +164,7 @@
                                     ? this.mergeOperator.toLowerCase()
                                     : "and", result, tobase);
                 }
-                ((ObjectNode) base).put("collection", result);
+                ((ObjectNode) base).put(nodeName, result);
                 return base;
             }
             return this.base;
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java b/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java
index faf2a73..97ffc41 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java
@@ -130,14 +130,21 @@
             DemoUserFilter.class})
     public QueryDto retrieveQueryByName (
             @Context SecurityContext securityContext,
+            @Context ContainerRequestContext requestContext,
             @PathParam("createdBy") String createdBy,
             @PathParam("qName") String qName) {
+    	
+    	List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
+        
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
         try {
             scopeService.verifyScope(context, OAuth2Scope.VC_INFO);
             return service.retrieveQueryByName(context.getUsername(), qName,
-                    createdBy, QueryType.QUERY);
+                    createdBy, QueryType.QUERY, apiVersion);
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
@@ -194,13 +201,19 @@
     @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
     public List<QueryDto> listAvailableQuery (
             @Context SecurityContext securityContext,
+            @Context ContainerRequestContext requestContext,
             @QueryParam("username") String username) {
+    	List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
+        
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
         try {
             scopeService.verifyScope(context, OAuth2Scope.VC_INFO);
             List<QueryDto> dtos = service.listAvailableQueryForUser(
-                    context.getUsername(), QueryType.QUERY);
+                    context.getUsername(), QueryType.QUERY, apiVersion);
             return dtos;
         }
         catch (KustvaktException e) {
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusAdminController.java b/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusAdminController.java
index 0613a47..86ef738 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusAdminController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusAdminController.java
@@ -20,7 +20,10 @@
 import jakarta.ws.rs.POST;
 import jakarta.ws.rs.Path;
 import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.container.ContainerRequestContext;
+import jakarta.ws.rs.core.Context;
 import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.PathSegment;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 
@@ -66,11 +69,16 @@
     @Path("list")
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     public List<QueryDto> listVCByType (
+    		@Context ContainerRequestContext requestContext,
             @FormParam("createdBy") String createdBy,
             @FormParam("type") ResourceType type) {
+    	List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
         try {
             return service.listQueryByType(createdBy, type,
-                    QueryType.VIRTUAL_CORPUS);
+                    QueryType.VIRTUAL_CORPUS, apiVersion);
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java b/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
index 1374278..418b542 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
@@ -150,14 +150,19 @@
     @ResourceFilters({ APIVersionFilter.class, AuthenticationFilter.class,
             DemoUserFilter.class})
     public QueryDto retrieveVCByName (@Context SecurityContext securityContext,
+    		@Context ContainerRequestContext requestContext,
             @PathParam("createdBy") String createdBy,
             @PathParam("vcName") String vcName) {
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
+        List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
         try {
             scopeService.verifyScope(context, OAuth2Scope.VC_INFO);
             return service.retrieveQueryByName(context.getUsername(), vcName,
-                    createdBy, QueryType.VIRTUAL_CORPUS);
+                    createdBy, QueryType.VIRTUAL_CORPUS, apiVersion);
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
@@ -227,21 +232,27 @@
      */
     @GET
     public List<QueryDto> listAvailableVC (
+    		@Context ContainerRequestContext requestContext,
             @Context SecurityContext securityContext,
             @QueryParam("filter-by") String filter) {
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
+        List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
 
         try {
             scopeService.verifyScope(context, OAuth2Scope.VC_INFO);
             if (filter != null && !filter.isEmpty()) {
                 filter = filter.toLowerCase();
                 if (filter.equals("system")) {
-                    return service.listSystemQuery(QueryType.VIRTUAL_CORPUS);
+                    return service.listSystemQuery(QueryType.VIRTUAL_CORPUS, 
+                    		apiVersion);
                 }
                 else if (filter.equals("own")) {
                     return service.listOwnerQuery(context.getUsername(),
-                            QueryType.VIRTUAL_CORPUS);
+                            QueryType.VIRTUAL_CORPUS, apiVersion);
                 }
                 else {
                     throw new KustvaktException(StatusCodes.UNSUPPORTED_VALUE,
@@ -250,7 +261,7 @@
             }
             else {
                 return service.listAvailableQueryForUser(context.getUsername(),
-                        QueryType.VIRTUAL_CORPUS);
+                        QueryType.VIRTUAL_CORPUS, apiVersion);
             }
         }
         catch (KustvaktException e) {
diff --git a/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java b/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java
index a6855e6..c611cbc 100644
--- a/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java
+++ b/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java
@@ -20,7 +20,7 @@
 	
     @Test
     public void testsimpleAdd () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("corpusSigle=WPD");
         JsonNode node = JsonUtils.readTree(b.toJSON());
         assertNotNull(node);
@@ -30,7 +30,7 @@
 
     @Test
     public void testSimpleConjunction () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("corpusSigle=WPD & textClass=freizeit");
         JsonNode node = JsonUtils.readTree(b.toJSON());
         assertNotNull(node);
@@ -45,7 +45,7 @@
 
     @Test
     public void testSimpleDisjunction () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("corpusSigle=WPD | textClass=freizeit");
         JsonNode node = JsonUtils.readTree(b.toJSON());
         assertNotNull(node);
@@ -58,7 +58,7 @@
 
     @Test
     public void testComplexSubQuery () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("(corpusSigle=WPD) | (textClass=freizeit & corpusSigle=BRZ13)");
         JsonNode node = JsonUtils.readTree(b.toJSON());
         assertNotNull(node);
@@ -71,9 +71,9 @@
 
     @Test
     public void testAddResourceQueryAfter () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("(textClass=politik & title=\"random title\") | textClass=wissenschaft");
-        KoralCollectionQueryBuilder c = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder c = new KoralCollectionQueryBuilder(apiVersion);
         c.setBaseQuery(b.toJSON());
         c.with("corpusSigle=WPD");
         JsonNode node = JsonUtils.readTree(c.toJSON());
@@ -97,9 +97,9 @@
 
     @Test
     public void testAddComplexResourceQueryAfter () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("(title=\"random title\") | (textClass=wissenschaft)");
-        KoralCollectionQueryBuilder c = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder c = new KoralCollectionQueryBuilder(apiVersion);
         c.setBaseQuery(b.toJSON());
         c.with("(corpusSigle=BRZ13 | corpusSigle=AZPS)");
         JsonNode node = JsonUtils.readTree(c.toJSON());
@@ -125,7 +125,7 @@
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.setBaseQuery(check.toJSON());
         b.with("textClass=freizeit");
         JsonNode res = (JsonNode) b.rebaseCollection();
@@ -152,9 +152,9 @@
 
     @Test
     public void testBaseQueryBuild () throws KustvaktException {
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.with("(corpusSigle=ADF) | (textClass=freizeit & corpusSigle=WPD)");
-        KoralCollectionQueryBuilder c = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder c = new KoralCollectionQueryBuilder(apiVersion);
         c.setBaseQuery(b.toJSON());
         c.with("corpusSigle=BRZ13");
         JsonNode base = (JsonNode) c.rebaseCollection();
@@ -175,9 +175,9 @@
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.setBaseQuery(check.toJSON());
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder(apiVersion);
         test.with("textClass=wissenschaft | textClass=politik");
         JsonNode node = (JsonNode) test.rebaseCollection();
         node = b.mergeWith(node);
@@ -193,9 +193,9 @@
         String query = "[base=Haus]";
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.setBaseQuery(check.toJSON());
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder(apiVersion);
         test.with("corpusSigle=WPD");
         // String json = test.toJSON();
         // System.out.println(json);
@@ -212,9 +212,9 @@
         String query = "[base=Haus]";
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder(apiVersion);
         b.setBaseQuery(check.toJSON());
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder(apiVersion);
         // operator is not supposed to be here!
         test.and().with("corpusSigle=WPD");
         // String json = test.toJSON();
@@ -236,7 +236,7 @@
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder(apiVersion);
         test.setBaseQuery(check.toJSON());
         test.or().with("textClass=wissenschaft | textClass=politik");
         JsonNode node = (JsonNode) test.rebaseCollection();
@@ -253,7 +253,7 @@
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder(apiVersion);
         test.setBaseQuery(check.toJSON());
         test.and().with("textClass=wissenschaft | textClass=politik");
         JsonNode node = (JsonNode) test.rebaseCollection();
@@ -271,7 +271,7 @@
         QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder(apiVersion);
         test.setBaseQuery(check.toJSON());
         test.with("textClass=wissenschaft | textClass=politik");
         JsonNode node = (JsonNode) test.rebaseCollection();
@@ -287,9 +287,9 @@
         // base is missing collection segment
         QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery("[base=Haus]", "poliqarp");
-        KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder(apiVersion);
         total.setBaseQuery(s.toJSON());
-        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder(apiVersion);
         builder.with("textClass=politik & corpusSigle=WPD");
         JsonNode node = total.and()
                 .mergeWith((JsonNode) builder.rebaseCollection());
@@ -313,9 +313,11 @@
         QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery("[base=Haus]", "poliqarp");
         s.setCollection("textClass=wissenschaft");
-        KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder total = 
+        		new KoralCollectionQueryBuilder(apiVersion);
         total.setBaseQuery(s.toJSON());
-        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        KoralCollectionQueryBuilder builder = 
+        		new KoralCollectionQueryBuilder(apiVersion);
         JsonNode node = total.and()
                 .mergeWith((JsonNode) builder.rebaseCollection());
         assertNotNull(node);