Add apiVersion to rewrite (#806).
Change-Id: I393fb9397dd143e6026e8c17ebed61cb10ac5652
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 97bcc70..4624720 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
@@ -102,11 +102,12 @@
// return ss.toJSON();
String query = ss.toJSON();
- query = rewriteHandler.processQuery(ss.toJSON(), null);
+ query = rewriteHandler.processQuery(ss.toJSON(), null, apiVersion);
return query;
}
- public String search (String jsonld, String username, HttpHeaders headers)
+ public String search (String jsonld, String username, HttpHeaders headers,
+ double apiVersion)
throws KustvaktException {
User user = createUser(username, headers);
@@ -117,7 +118,7 @@
user.setCorpusAccess(CorpusAccess.ALL);
}
- String query = this.rewriteHandler.processQuery(jsonld, user);
+ String query = this.rewriteHandler.processQuery(jsonld, user, apiVersion);
// MH: todo: should be possible to add the meta part to
// the query serialization
// User user = controller.getUser(ctx.getUsername());
@@ -178,7 +179,7 @@
// Query pipe rewrite
query = runPipes(query, pipes);
- query = this.rewriteHandler.processQuery(query, user);
+ query = this.rewriteHandler.processQuery(query, user, apiVersion);
if (DEBUG) {
jlog.debug("the serialized query " + query);
}
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 aae79dd..173981b 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
@@ -25,7 +25,7 @@
//System.out.println("Before:" + json + "\n");
if (!cqList.isEmpty() && !combineMultipleCorpusQuery(cqList).isEmpty()) {
User user = createUser(username, headers);
- json = statisticsRewriteHandler.processQuery(json, user);
+ json = statisticsRewriteHandler.processQuery(json, user, apiVersion);
}
//System.out.println("After:" + json);
String stats = searchKrill.getStatistics(json);
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 6dc08d6..e2613ce 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
@@ -166,6 +166,7 @@
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
//@SearchResourceFilters
public Response searchPost (@Context SecurityContext context,
+ @Context ContainerRequestContext requestContext,
@Context Locale locale, @Context HttpHeaders headers,
String jsonld) {
@@ -173,11 +174,16 @@
jlog.debug("Serialized search: " + jsonld);
}
+ List<PathSegment> pathSegments = requestContext.getUriInfo()
+ .getPathSegments();
+ String version = pathSegments.get(0).getPath();
+ double requestedVersion = Double.parseDouble(version.substring(1));
+
TokenContext ctx = (TokenContext) context.getUserPrincipal();
try {
scopeService.verifyScope(ctx, OAuth2Scope.SEARCH);
String result = searchService.search(jsonld, ctx.getUsername(),
- headers);
+ headers, requestedVersion);
return Response.ok(result).build();
}
catch (KustvaktException e) {
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
index d0c0f38..764abc8 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
@@ -44,8 +44,6 @@
public static Logger jlog = LogManager.getLogger(AvailabilityRewrite.class);
- private double apiVersion = 1.1;
-
public AvailabilityRewrite () {
super();
}
@@ -107,7 +105,8 @@
@Override
public KoralNode rewriteQuery (KoralNode koralNode,
- KustvaktConfiguration config, User user) throws KustvaktException {
+ KustvaktConfiguration config, User user, double apiVersion)
+ throws KustvaktException {
JsonNode jsonNode = koralNode.rawNode();
FullConfiguration fullConfig = (FullConfiguration) config;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java
index 0ac1de3..3955209 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java
@@ -22,7 +22,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) {
+ User user, double apiVersion) {
JsonNode jsonNode = process(node.rawNode());
return node.wrapNode(jsonNode);
}
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
index 6342dbb..cc9b774 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
@@ -19,7 +19,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) {
+ User user, double apiVersion) {
if (node.get("@type").equals("koral:doc")) {
if (node.get("key").equals(Attributes.CORPUS_SIGLE)) {
String id = node.get("value");
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
index 846d2e5..f57bbeb 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
@@ -20,14 +20,14 @@
@Override
public KoralNode rewriteQuery (KoralNode koralNode, KustvaktConfiguration config,
- User user) throws KustvaktException {
+ User user, double apiVersion) throws KustvaktException {
// EM: I don't know the purpose of the following code and it is not
// tested
if (koralNode.get("@type").equals("koral:span")) {
if (!koralNode.isMissingNode("/wrap")) {
koralNode = koralNode.at("/wrap");
- JsonNode term = rewriteQuery(koralNode, config, user).rawNode();
+ JsonNode term = rewriteQuery(koralNode, config, user, apiVersion).rawNode();
koralNode.replaceAt("/wrap", term,
new RewriteIdentifier("koral:term", "replace", ""));
}
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
index c59097c..743daf0 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
@@ -19,7 +19,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) throws KustvaktException {
+ User user, double apiVersion) throws KustvaktException {
String username = user.getUsername();
String jsonSettings = settingService.retrieveDefaultSettings(username);
if (jsonSettings != null) {
@@ -27,6 +27,6 @@
jsonSettings);
user.setUserSettingProcessor(processor);
}
- return super.rewriteQuery(node, config, user);
+ return super.rewriteQuery(node, config, user, apiVersion);
}
}
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java b/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java
index 113c176..bc98530 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java
@@ -1,8 +1,7 @@
package de.ids_mannheim.korap.rewrite;
import com.fasterxml.jackson.databind.JsonNode;
-import de.ids_mannheim.korap.config.BeanInjectable;
-import de.ids_mannheim.korap.config.ContextHolder;
+
import de.ids_mannheim.korap.config.KustvaktConfiguration;
import de.ids_mannheim.korap.user.User;
@@ -20,7 +19,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) {
+ User user, double apiVersion) {
if (node.get("@type").equals("koral:token")) {
String s = extractToken(node.rawNode());
if (s != null && !s.isEmpty())
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java
index 2838f67..a3c17d9 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java
@@ -1,7 +1,7 @@
package de.ids_mannheim.korap.rewrite;
import com.fasterxml.jackson.databind.JsonNode;
-import de.ids_mannheim.korap.config.BeanInjectable;
+
import de.ids_mannheim.korap.config.KustvaktConfiguration;
import de.ids_mannheim.korap.user.User;
@@ -13,7 +13,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) {
+ User user, double apiVersion) {
// redundant
if (node.rawNode().has("meta")) {
JsonNode meta = node.rawNode().path("meta");
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
index e5f3bee..6e7fa1c 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
@@ -19,7 +19,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) throws KustvaktException {
+ User user, double apiVersion) throws KustvaktException {
if (config.getMaxTokenContext() > 0) {
boolean isContextCut = false;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
index e5f6a36..7b4d2b3 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
@@ -31,7 +31,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) throws KustvaktException {
+ User user, double apiVersion) throws KustvaktException {
if (node.has("query")) {
node = node.at("/query");
findQueryRef(user.getUsername(), node);
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java
index 6bad856..29e27cb 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java
@@ -99,7 +99,7 @@
* @return boolean if rewriter class was successfully added to
* rewrite handler!
*/
- @Deprecated
+ // EM: MH marked this as @Deprecated
public boolean add (Class<? extends RewriteTask> rewriter) {
RewriteTask task;
try {
@@ -114,27 +114,27 @@
return addProcessor(task);
}
- public String processQuery (JsonNode root, User user)
+ public String processQuery (JsonNode root, User user, double apiVersion)
throws KustvaktException {
RewriteProcess process = new RewriteProcess(root, user);
- JsonNode pre = process.start(false);
+ JsonNode pre = process.start(false, apiVersion);
return JsonUtils.toJSON(pre);
}
- public String processQuery (String json, User user)
+ public String processQuery (String json, User user, double apiVersion)
throws KustvaktException {
- return processQuery(JsonUtils.readTree(json), user);
+ return processQuery(JsonUtils.readTree(json), user, apiVersion);
}
- public String processResult (String json, User user)
+ public String processResult (String json, User user, double apiVersion)
throws KustvaktException {
- return processResult(JsonUtils.readTree(json), user);
+ return processResult(JsonUtils.readTree(json), user, apiVersion);
}
- public String processResult (JsonNode node, User user)
+ public String processResult (JsonNode node, User user, double apiVersion)
throws KustvaktException {
RewriteProcess process = new RewriteProcess(node, user);
- JsonNode pre = process.start(true);
+ JsonNode pre = process.start(true, apiVersion);
return JsonUtils.toJSON(pre);
}
@@ -161,7 +161,7 @@
}
private KoralNode processNode (String key, JsonNode value,
- boolean result) throws KustvaktException {
+ boolean result, double apiVersion) throws KustvaktException {
KoralNode kroot = KoralNode.wrapNode(value);
if (value.isObject()) {
if (value.has("operands")) {
@@ -169,7 +169,7 @@
Iterator<JsonNode> it = ops.elements();
while (it.hasNext()) {
JsonNode next = it.next();
- KoralNode kn = processNode(key, next, result);
+ KoralNode kn = processNode(key, next, result, apiVersion);
if (kn.isRemove())
it.remove();
}
@@ -177,19 +177,19 @@
else if (value.path("@type").asText().equals("koral:token")) {
// todo: koral:token nodes cannot be flagged for deletion --> creates the possibility for empty koral:token nodes
rewrite(key, kroot,
- RewriteHandler.this.token_node_processors, result);
- return processNode(key, value.path("wrap"), result);
+ RewriteHandler.this.token_node_processors, result, apiVersion);
+ return processNode(key, value.path("wrap"), result, apiVersion);
}
else {
return rewrite(key, kroot,
- RewriteHandler.this.node_processors, result);
+ RewriteHandler.this.node_processors, result, apiVersion);
}
}
else if (value.isArray()) {
Iterator<JsonNode> it = value.elements();
while (it.hasNext()) {
JsonNode next = it.next();
- KoralNode kn = processNode(key, next, result);
+ KoralNode kn = processNode(key, next, result, apiVersion);
if (kn.isRemove())
it.remove();
}
@@ -197,7 +197,7 @@
return kroot;
}
- private JsonNode start (boolean result) throws KustvaktException {
+ private JsonNode start (boolean result, double apiVersion) throws KustvaktException {
if (DEBUG) {
jlog.debug("Running rewrite process on query " + root);
}
@@ -205,10 +205,10 @@
Iterator<Map.Entry<String, JsonNode>> it = root.fields();
while (it.hasNext()) {
Map.Entry<String, JsonNode> next = it.next();
- processNode(next.getKey(), next.getValue(), result);
+ processNode(next.getKey(), next.getValue(), result, apiVersion);
}
processFixedNode(root, RewriteHandler.this.query_processors,
- result);
+ result, apiVersion);
}
return root;
}
@@ -216,12 +216,13 @@
/**
* @param node
* @param tasks
+ * @param apiVersion
* @return boolean true if node is to be removed from parent!
* Only
* applies if parent is an array node
*/
private KoralNode rewrite (String rootNode, KoralNode node,
- Collection<? extends RewriteTask> tasks, boolean result)
+ Collection<? extends RewriteTask> tasks, boolean result, double apiVersion)
throws KustvaktException {
if (RewriteHandler.this.config == null)
throw new RuntimeException(
@@ -249,7 +250,7 @@
}
if (!result && task instanceof RewriteTask.RewriteQuery) {
((RewriteTask.RewriteQuery) task).rewriteQuery(node,
- RewriteHandler.this.config, this.user);
+ RewriteHandler.this.config, this.user, apiVersion);
}
else if (task instanceof RewriteTask.RewriteResult) {
((RewriteTask.RewriteResult) task).rewriteResult(node);
@@ -267,7 +268,7 @@
// fixme: merge with processNode!
private void processFixedNode (JsonNode node,
- Collection<RewriteTask> tasks, boolean post)
+ Collection<RewriteTask> tasks, boolean post, double apiVersion)
throws KustvaktException {
for (RewriteTask task : tasks) {
KoralNode next = KoralNode.wrapNode(node);
@@ -280,7 +281,7 @@
if (!post & task instanceof RewriteTask.RewriteQuery)
next = ((RewriteTask.RewriteQuery) task).rewriteQuery(next,
- RewriteHandler.this.config, user);
+ RewriteHandler.this.config, user, apiVersion);
else if (task instanceof RewriteTask.RewriteResult)
((RewriteTask.RewriteResult) task).rewriteResult(next);
next.buildRewrites();
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java
index b015c0e..feec93a 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java
@@ -26,10 +26,12 @@
* injected by rewrite handler if available. Might
* cause {@link NullPointerException} if not
* checked properly
+ * @param apiVersion
+ * the version of the API
* @return
*/
KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) throws KustvaktException;
+ User user, double apiVersion) throws KustvaktException;
}
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java
index 1cdfd2f..eddfcd3 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java
@@ -9,7 +9,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) throws KustvaktException {
+ User user, double apiVersion) throws KustvaktException {
CorpusAccess access = user.getCorpusAccess();
if (node.has("meta")) {
node = node.at("/meta");
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java
index 81f254a..a7d0983 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java
@@ -59,7 +59,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) {
+ User user, double apiVersion) {
System.out.println("FIND PATH " + node.rawNode().findParent(pointer));
return node;
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 ccdc704..7792c88 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
@@ -31,7 +31,7 @@
@Override
public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
- User user) throws KustvaktException {
+ User user, double apiVersion) throws KustvaktException {
if (node.has("corpus")) {
node = node.at("/corpus");
findVCRef(user.getUsername(), node);