Add API version to the QueryService.
Change-Id: Ie05d3b56a904e67f9c32a0dfab89f5e376c2489e
diff --git a/Changes b/Changes
index 5f1f4fe..a1d8465 100644
--- a/Changes
+++ b/Changes
@@ -6,6 +6,7 @@
- Remove deprecated user-group web-services for API v1.1 (#769)
- Remove deprecated vc web-services for API v1.1 (#771)
- Remove deprecated authorized_only parameter in the client list API for v1.1 (#760)
+- Add API version to the QueryService (#806)
# version 0.79.1
diff --git a/src/main/java/de/ids_mannheim/korap/init/Initializator.java b/src/main/java/de/ids_mannheim/korap/init/Initializator.java
index 02a141d..586f275 100644
--- a/src/main/java/de/ids_mannheim/korap/init/Initializator.java
+++ b/src/main/java/de/ids_mannheim/korap/init/Initializator.java
@@ -79,7 +79,7 @@
q.setQuery("[]");
q.setDescription("\"system\" query");
q.setQueryType(QueryType.QUERY);
- queryService.handlePutRequest("system", "system", "system-q", q);
+ queryService.handlePutRequest("system", "system", "system-q", q, 1.1);
}
public void initResourceTest () throws IOException, KustvaktException {
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 344ba6f..faf5375 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -223,23 +223,27 @@
}
public Status handlePutRequest (String username, String queryCreator,
- String queryName, QueryJson queryJson) throws KustvaktException {
+ String queryName, QueryJson queryJson, double apiVersion)
+ throws KustvaktException {
verifyUsername(username, queryCreator);
QueryDO query = queryDao.retrieveQueryByName(queryName, queryCreator);
if (query == null) {
- storeQuery(queryJson, queryName, queryCreator, username);
+ storeQuery(queryJson, queryName, queryCreator, username,
+ apiVersion);
return Status.CREATED;
}
else {
- editQuery(query, queryJson, queryName, username);
+ editQuery(query, queryJson, queryName, username,
+ apiVersion);
return Status.NO_CONTENT;
}
}
public void editQuery (QueryDO existingQuery, QueryJson newQuery,
- String queryName, String username) throws KustvaktException {
+ String queryName, String username, double apiVersion)
+ throws KustvaktException {
if (!username.equals(existingQuery.getCreatedBy())
&& !adminDao.isAdmin(username)) {
@@ -253,13 +257,13 @@
String query = newQuery.getQuery();
String queryLanguage = newQuery.getQueryLanguage();
if (corpusQuery != null && !corpusQuery.isEmpty()) {
- koralQuery = serializeCorpusQuery(corpusQuery);
+ koralQuery = serializeCorpusQuery(corpusQuery, apiVersion);
requiredAccess = determineRequiredAccess(newQuery.isCached(),
queryName, koralQuery);
}
else if (query != null && !query.isEmpty() && queryLanguage != null
&& !queryLanguage.isEmpty()) {
- koralQuery = serializeQuery(query, queryLanguage);
+ koralQuery = serializeQuery(query, queryLanguage, apiVersion);
}
ResourceType type = newQuery.getType();
@@ -311,7 +315,8 @@
}
public void storeQuery (QueryJson query, String queryName,
- String queryCreator, String username) throws KustvaktException {
+ String queryCreator, String username, double apiVersion)
+ throws KustvaktException {
QueryType queryType = query.getQueryType();
if (!checkNumberOfQueryLimit(username, queryType)) {
String type = queryType.displayName().toLowerCase();
@@ -320,7 +325,7 @@
+ type + " has been reached.");
}
- String koralQuery = computeKoralQuery(query);
+ String koralQuery = computeKoralQuery(query, apiVersion);
storeQuery(username, queryName, query.getType(), query.getQueryType(),
koralQuery, query.getDefinition(), query.getDescription(),
query.getStatus(), query.isCached(), queryCreator,
@@ -336,19 +341,20 @@
return false;
}
- private String computeKoralQuery (QueryJson query)
+ private String computeKoralQuery (QueryJson query, double apiVersion)
throws KustvaktException {
if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
ParameterChecker.checkStringValue(query.getCorpusQuery(),
"corpusQuery");
- return serializeCorpusQuery(query.getCorpusQuery());
+ return serializeCorpusQuery(query.getCorpusQuery(), apiVersion);
}
if (query.getQueryType().equals(QueryType.QUERY)) {
ParameterChecker.checkStringValue(query.getQuery(), "query");
ParameterChecker.checkStringValue(query.getQueryLanguage(),
"queryLanguage");
- return serializeQuery(query.getQuery(), query.getQueryLanguage());
+ return serializeQuery(query.getQuery(), query.getQueryLanguage(),
+ apiVersion);
}
return null;
@@ -434,9 +440,9 @@
}
}
- public String serializeCorpusQuery (String corpusQuery)
+ public String serializeCorpusQuery (String corpusQuery, double apiVersion)
throws KustvaktException {
- QuerySerializer serializer = new QuerySerializer();
+ QuerySerializer serializer = new QuerySerializer(apiVersion);
serializer.setCollection(corpusQuery);
String koralQuery;
try {
@@ -452,9 +458,10 @@
return koralQuery;
}
- private String serializeQuery (String query, String queryLanguage)
+ private String serializeQuery (String query, String queryLanguage, double
+ apiVersion)
throws KustvaktException {
- QuerySerializer serializer = new QuerySerializer();
+ QuerySerializer serializer = new QuerySerializer(apiVersion);
String koralQuery;
koralQuery = serializer.setQuery(query, queryLanguage).toJSON();
if (DEBUG) {
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 0be121d..faf2a73 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
@@ -28,8 +28,10 @@
import jakarta.ws.rs.PathParam;
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.MediaType;
+import jakarta.ws.rs.core.PathSegment;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.core.SecurityContext;
@@ -83,10 +85,16 @@
@Path("/~{qCreator}/{qName}")
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
public Response createQuery (@Context SecurityContext securityContext,
+ @Context ContainerRequestContext requestContext,
@PathParam("qCreator") String qCreator,
@PathParam("qName") String qName, QueryJson query)
throws KustvaktException {
+ List<PathSegment> pathSegments = requestContext.getUriInfo()
+ .getPathSegments();
+ String version = pathSegments.get(0).getPath();
+ double requestedVersion = Double.parseDouble(version.substring(1));
+
TokenContext context = (TokenContext) securityContext
.getUserPrincipal();
@@ -97,7 +105,7 @@
query.setQueryType(QueryType.QUERY);
}
Status status = service.handlePutRequest(context.getUsername(),
- qCreator, qName, query);
+ qCreator, qName, query, requestedVersion);
return Response.status(status).build();
}
catch (KustvaktException 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 522cedb..1374278 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
@@ -36,8 +36,10 @@
import jakarta.ws.rs.PathParam;
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.MediaType;
+import jakarta.ws.rs.core.PathSegment;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.core.SecurityContext;
@@ -102,12 +104,18 @@
@Path("/~{vcCreator}/{vcName}")
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
public Response createUpdateVC (@Context SecurityContext securityContext,
+ @Context ContainerRequestContext requestContext,
@PathParam("vcCreator") String vcCreator,
@PathParam("vcName") String vcName, QueryJson vc)
throws KustvaktException {
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.CREATE_VC);
ParameterChecker.checkObjectValue(vc, "request entity");
@@ -115,7 +123,7 @@
vc.setQueryType(QueryType.VIRTUAL_CORPUS);
}
Status status = service.handlePutRequest(context.getUsername(),
- vcCreator, vcName, vc);
+ vcCreator, vcName, vc, apiVersion);
return Response.status(status).build();
}
catch (KustvaktException e) {