Add API version to the search service (#806)
Change-Id: I1ce7bb90d0f10efc91ae694a4fb043916bdefc1d
diff --git a/Changes b/Changes
index a1d8465..ffa748b 100644
--- a/Changes
+++ b/Changes
@@ -7,6 +7,7 @@
- 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)
+- Add API version to the search service (#806)
# version 0.79.1
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
index 4f96816..13db3ac 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
@@ -80,9 +80,10 @@
@SuppressWarnings("unchecked")
public String serializeQuery (String q, String ql, String v, String cq,
Integer pageIndex, Integer startPage, Integer pageLength,
- String context, Boolean cutoff, boolean accessRewriteDisabled)
+ String context, Boolean cutoff, boolean accessRewriteDisabled,
+ double apiVersion)
throws KustvaktException {
- QuerySerializer ss = new QuerySerializer().setQuery(q, ql, v);
+ QuerySerializer ss = new QuerySerializer(apiVersion).setQuery(q, ql, v);
if (cq != null)
ss.setCollection(cq);
@@ -125,7 +126,8 @@
}
@SuppressWarnings("unchecked")
- public String search (String engine, String username, HttpHeaders headers,
+ public String search (double requestedVersion, String engine,
+ String username, HttpHeaders headers,
String q, String ql, String v, List<String> cqList, String fields,
String pipes, String responsePipes, Integer pageIndex,
Integer pageInteger, String ctx, Integer pageLength, Boolean cutoff,
@@ -147,7 +149,7 @@
user.setCorpusAccess(CorpusAccess.ALL);
}
- QuerySerializer serializer = new QuerySerializer();
+ QuerySerializer serializer = new QuerySerializer(requestedVersion);
serializer.setQuery(q, ql, v);
String cq = combineMultipleCorpusQuery(cqList);
if (cq != null)
diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
index cc02588..6dc08d6 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
@@ -38,9 +38,11 @@
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.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;
@@ -127,6 +129,7 @@
// @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public Response serializeQuery (@Context Locale locale,
@Context SecurityContext securityContext, @QueryParam("q") String q,
+ @Context ContainerRequestContext requestContext,
@QueryParam("ql") String ql, @QueryParam("v") String v,
@QueryParam("context") String context,
@QueryParam("cutoff") Boolean cutoff,
@@ -135,12 +138,18 @@
@QueryParam("page") Integer startPage,
@QueryParam("access-rewrite-disabled") boolean accessRewriteDisabled,
@QueryParam("cq") String cq) {
+
+ List<PathSegment> pathSegments = requestContext.getUriInfo()
+ .getPathSegments();
+ String version = pathSegments.get(0).getPath();
+ double apiVersion = Double.parseDouble(version.substring(1));
+
TokenContext ctx = (TokenContext) securityContext.getUserPrincipal();
try {
scopeService.verifyScope(ctx, OAuth2Scope.SERIALIZE_QUERY);
String result = searchService.serializeQuery(q, ql, v, cq,
pageIndex, startPage, pageLength, context, cutoff,
- accessRewriteDisabled);
+ accessRewriteDisabled, apiVersion);
if (DEBUG) {
jlog.debug("Query: " + result);
}
@@ -217,6 +226,7 @@
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
//@SearchResourceFilters
public Response searchGet (@Context SecurityContext securityContext,
+ @Context ContainerRequestContext requestContext,
@Context HttpServletRequest request, @Context HttpHeaders headers,
@Context Locale locale, @QueryParam("q") String q,
@QueryParam("ql") String ql, @QueryParam("v") String v,
@@ -234,13 +244,19 @@
@QueryParam("cq") List<String> cq,
@QueryParam("engine") String engine) {
+ List<PathSegment> pathSegments = requestContext.getUriInfo()
+ .getPathSegments();
+ String version = pathSegments.get(0).getPath();
+ double requestedVersion = Double.parseDouble(version.substring(1));
+
TokenContext context = (TokenContext) securityContext
.getUserPrincipal();
String result;
try {
scopeService.verifyScope(context, OAuth2Scope.SEARCH);
- result = searchService.search(engine, context.getUsername(),
+ result = searchService.search(requestedVersion,
+ engine, context.getUsername(),
headers, q, ql, v, cq, fields, pipes, responsePipes,
pageIndex, pageInteger, ctx, pageLength, cutoff,
accessRewriteDisabled, showTokens, showSnippet);
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 538833e..90ec30a 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
@@ -6,16 +6,12 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import jakarta.ws.rs.client.Entity;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.Response.Status;
-
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.net.HttpHeaders;
-import jakarta.ws.rs.core.Response;
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
@@ -25,7 +21,10 @@
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.query.serialize.QuerySerializer;
import de.ids_mannheim.korap.utils.JsonUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
/**
* @author hanl, margaretha
@@ -35,6 +34,8 @@
@Autowired
private FullConfiguration config;
+
+ private double apiVersion = Double.parseDouble(API_VERSION.substring(1));
private JsonNode requestSearchWithFields (String fields)
throws KustvaktException {
@@ -49,7 +50,7 @@
}
private String createJsonQuery () {
- QuerySerializer s = new QuerySerializer();
+ QuerySerializer s = new QuerySerializer(apiVersion);
s.setQuery("[orth=der]", "poliqarp");
s.setCollection("corpusSigle=GOE");
s.setQuery("Wasser", "poliqarp");
@@ -397,7 +398,7 @@
@Disabled
@Test
public void testSearchSimpleCQL () throws KustvaktException {
- QuerySerializer s = new QuerySerializer();
+ QuerySerializer s = new QuerySerializer(apiVersion);
s.setQuery("(der) or (das)", "CQL");
Response response = target().path(API_VERSION).path("search").request()
.post(Entity.json(s.toJSON()));
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
index 31abd44..db5b538 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchPublicMetadataTest.java
@@ -22,6 +22,8 @@
public class SearchPublicMetadataTest extends VirtualCorpusTestBase {
+ private double apiVersion = Double.parseDouble(API_VERSION.substring(1));
+
@Test
public void testSearchPublicMetadata () throws KustvaktException {
Response response = target().path(API_VERSION).path("search")
@@ -92,7 +94,7 @@
@Disabled
@Test
public void testSearchPostPublicMetadata () throws KustvaktException {
- QuerySerializer s = new QuerySerializer();
+ QuerySerializer s = new QuerySerializer(apiVersion);
s.setQuery("[orth=der]", "poliqarp");
s.setCollection("corpusSigle=GOE");
s.setQuery("Wasser", "poliqarp");
diff --git a/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchControllerTest.java
index 5cf6774..e15f9aa 100644
--- a/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/lite/LiteSearchControllerTest.java
@@ -39,6 +39,9 @@
@Autowired
private KustvaktConfiguration config;
+
+ private double apiVersion = Double.parseDouble(API_VERSION.substring(1));
+
// EM: The API is disabled
@Disabled
@@ -139,7 +142,7 @@
@Test
@Disabled
public void testQueryPost () throws KustvaktException {
- QuerySerializer s = new QuerySerializer();
+ QuerySerializer s = new QuerySerializer(apiVersion);
s.setQuery("[orth=das]", "poliqarp");
Response response = target().path(API_VERSION).path("search").request()
.post(Entity.json(s.toJSON()));