refactoring
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java
index 46c39f9..3f9ce89 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionCleanupFilter.java
@@ -19,7 +19,7 @@
@Override
public JsonNode preProcess (KoralNode node, KustvaktConfiguration config,
User user) {
- return process(node.rawNode());
+ return node.rawNode();
}
@@ -59,7 +59,7 @@
@Override
public JsonNode postProcess (KoralNode node) {
- return null;
+ return process(node.rawNode());
}
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java
index 13e6196..05b6168 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/CollectionConstraint.java
@@ -2,8 +2,6 @@
import com.fasterxml.jackson.databind.JsonNode;
import de.ids_mannheim.korap.config.Attributes;
-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.exceptions.KustvaktException;
import de.ids_mannheim.korap.resources.Corpus;
@@ -15,16 +13,18 @@
* @author hanl
* @date 03/07/2015
*/
-public class CollectionConstraint implements RewriteTask.IterableRewriteAt {
+public class CollectionConstraint implements RewriteTask.IterableRewritePath {
+
+
+
@Override
public JsonNode preProcess (KoralNode node, KustvaktConfiguration config,
User user) {
if (node.get("@type").equals("koral:doc")) {
- if (node.get("key").equals(Attributes.CORPUS_SIGLE) && !check(node, user)) {
+ if (node.get("key").equals(Attributes.CORPUS_SIGLE)
+ && !check(node, user))
node.removeNode();
- // todo: add message that node was removed!
- }
}
return node.rawNode();
}
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
index fb4ba86..796592a 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
@@ -18,7 +18,7 @@
* @date 12/11/2015
*/
//todo : test
-public class DocMatchRewrite implements RewriteTask.IterableRewriteAt,
+public class DocMatchRewrite implements RewriteTask.IterableRewritePath,
BeanInjectable {
private DocumentDao docDao;
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
index 19d4145..486ae25 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
@@ -8,7 +8,6 @@
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.interfaces.db.UserDataDbIface;
import de.ids_mannheim.korap.resource.LayerMapper;
-import de.ids_mannheim.korap.resources.Foundry;
import de.ids_mannheim.korap.user.User;
import de.ids_mannheim.korap.user.UserSettings;
import edu.emory.mathcs.backport.java.util.Collections;
@@ -19,7 +18,7 @@
* @author hanl
* @date 30/06/2015
*/
-public class FoundryInject implements RewriteTask.IterableRewriteAt,
+public class FoundryInject implements RewriteTask.IterableRewritePath,
BeanInjectable {
private Collection userdaos;
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
index 16debc8..8df544e 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
@@ -5,10 +5,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import de.ids_mannheim.korap.utils.JsonUtils;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* @author hanl
@@ -16,13 +13,13 @@
*/
public abstract class KoralNode {
private JsonNode node;
- private KoralRewriteBuilder builder;
+ private KoralRewriteBuilder rewrites;
private boolean remove;
private KoralNode (JsonNode node) {
this.node = node;
- this.builder = new KoralRewriteBuilder();
+ this.rewrites = new KoralRewriteBuilder();
this.remove = false;
}
@@ -32,6 +29,12 @@
}
+ public void buildRewrites() {
+ System.out.println("LIST REWRITES "+ this.rewrites.rewrites);
+ this.rewrites.build(this.node);
+
+ }
+
@Override
public String toString () {
return this.node.toString();
@@ -39,7 +42,6 @@
public void put (String name, Object value) {
-
if (this.node.isObject() && this.node.path(name).isMissingNode()) {
ObjectNode node = (ObjectNode) this.node;
if (value instanceof String)
@@ -48,8 +50,7 @@
node.put(name, (Integer) value);
else if (value instanceof JsonNode)
node.put(name, (JsonNode) value);
- builder.setOperation("injection");
- builder.build(this.node);
+ this.rewrites.add("injection", name);
}
else
throw new UnsupportedOperationException(
@@ -70,8 +71,7 @@
set = true;
}
if (set) {
- builder.setOperation("deletion");
- builder.build(this.node);
+ this.rewrites.add("deletion", identifier);
}
}
@@ -85,12 +85,11 @@
n.put(name, (Integer) value);
else if (value instanceof JsonNode)
n.put(name, (JsonNode) value);
- builder.setOperation("override");
- builder.build(this.node);
+ this.rewrites.add("override", name);
}
}
- public void set (String name, Object value) {
+ public void set (String name, Object value, String attrIdent) {
if (this.node.isObject()) {
ObjectNode n = (ObjectNode) this.node;
if (value instanceof String)
@@ -99,12 +98,10 @@
n.put(name, (Integer) value);
else if (value instanceof JsonNode)
n.put(name, (JsonNode) value);
- builder.setOperation("insertion");
- builder.build(this.node);
+ this.rewrites.add("insertion", attrIdent);
}
}
-
public String get (String name) {
if (this.node.isObject())
return this.node.path(name).asText();
@@ -113,7 +110,8 @@
public KoralNode at (String name) {
- return KoralNode.wrapNode(this.node.at(name));
+ this.node = this.node.at(name);
+ return this;
}
@@ -132,6 +130,7 @@
public void removeNode () {
+ this.rewrites.add("deletion", this.node);
this.remove = true;
}
@@ -141,20 +140,61 @@
}
- //todo: 21.10.15 -- redo with better return policies!
public static class KoralRewriteBuilder {
+ private List<KoralRewrite> rewrites;
+
+ public KoralRewriteBuilder() {
+ this.rewrites = new ArrayList<>();
+ }
+
+
+ public KoralRewriteBuilder add(String op, Object scope) {
+ KoralRewrite rewrite = new KoralRewrite();
+ rewrite.setOperation(op);
+ rewrite.setScope(scope.toString());
+ this.rewrites.add(rewrite);
+ return this;
+ }
+
+
+ public JsonNode build (JsonNode node) {
+ for (KoralRewrite rewrite : this.rewrites) {
+ if (rewrite.map.get("operation") == null)
+ throw new UnsupportedOperationException(
+ "operation not set properly");
+
+ if (node.has("rewrites")) {
+ ArrayNode n = (ArrayNode) node.path("rewrites");
+ n.add(JsonUtils.valueToTree(rewrite.map));
+ } else {
+ ObjectNode n = (ObjectNode) node;
+ List l = new LinkedList<>();
+ l.add(JsonUtils.valueToTree(rewrite.map));
+ n.put("rewrites", JsonUtils.valueToTree(l));
+ }
+ }
+ this.rewrites.clear();
+ return node;
+ }
+
+ }
+
+
+
+
+ private static class KoralRewrite {
+
private Map<String, String> map;
-
- public KoralRewriteBuilder () {
+ private KoralRewrite () {
this.map = new LinkedHashMap<>();
this.map.put("@type", "koral:rewrite");
this.map.put("src", "Kustvakt");
}
- public KoralRewriteBuilder setOperation (String op) {
+ public KoralRewrite setOperation (String op) {
if (!op.startsWith("operation:"))
op = "operation:" + op;
this.map.put("operation", op);
@@ -162,29 +202,10 @@
}
- public KoralRewriteBuilder setScope (String scope) {
+ public KoralRewrite setScope (String scope) {
this.map.put("scope", scope);
return this;
}
-
- public JsonNode build (JsonNode node) {
- if (this.map.get("operation") == null)
- throw new UnsupportedOperationException(
- "operation not set properly");
-
- if (node.has("rewrites")) {
- ArrayNode n = (ArrayNode) node.path("rewrites");
- n.add(JsonUtils.valueToTree(this.map));
- }
- else {
- ObjectNode n = (ObjectNode) node;
- List l = new LinkedList<>();
- l.add(JsonUtils.valueToTree(this.map));
- n.put("rewrites", JsonUtils.valueToTree(l));
- }
- return node;
- }
-
}
}
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java
index a8efce3..114c35a 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/PublicCollection.java
@@ -11,8 +11,10 @@
import de.ids_mannheim.korap.user.User;
import de.ids_mannheim.korap.utils.KoralCollectionQueryBuilder;
import de.ids_mannheim.korap.utils.JsonUtils;
+import org.w3c.dom.Attr;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Set;
/**
@@ -43,7 +45,7 @@
ArrayList<KustvaktResource> list = new ArrayList(resources);
if (list.isEmpty())
- throw new KustvaktException(StatusCodes.REQUEST_INVALID,
+ throw new KustvaktException(StatusCodes.PERMISSION_DENIED,
"No resources found for user", user.getUsername());
for (int i = 0; i < list.size(); i++) {
@@ -52,7 +54,8 @@
b.with(Attributes.CORPUS_SIGLE+"=" + list.get(i).getPersistentID());
}
JsonNode rewritten = JsonUtils.readTree(b.toJSON());
- node.set("collection", rewritten.at("/collection"));
+ node.set("collection", rewritten.at("/collection"), Attributes.CORPUS_SIGLE);
+ node.at("/collection");
}
catch (KustvaktException e) {
e.printStackTrace();
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
index 746c3a0..fb98864 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
@@ -7,7 +7,6 @@
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.user.User;
import de.ids_mannheim.korap.utils.JsonUtils;
-import org.apache.xpath.SourceTree;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,7 +23,7 @@
public class RewriteHandler implements BeanInjectable {
private static Logger jlog = LoggerFactory.getLogger(RewriteHandler.class);
- private Collection<RewriteTask.IterableRewriteAt> node_processors;
+ private Collection<RewriteTask.IterableRewritePath> node_processors;
private Collection<RewriteTask.RewriteKoralToken> token_node_processors;
private Collection<RewriteTask> query_processors;
@@ -66,9 +65,9 @@
if (rewriter instanceof RewriteTask.RewriteKoralToken)
return this.token_node_processors
.add((RewriteTask.RewriteKoralToken) rewriter);
- else if (rewriter instanceof RewriteTask.IterableRewriteAt)
+ else if (rewriter instanceof RewriteTask.IterableRewritePath)
return this.node_processors
- .add((RewriteTask.IterableRewriteAt) rewriter);
+ .add((RewriteTask.IterableRewritePath) rewriter);
else if (rewriter instanceof RewriteTask.RewriteBefore
| rewriter instanceof RewriteTask.RewriteAfter)
return this.query_processors.add(rewriter);
@@ -122,25 +121,25 @@
}
- private boolean process (String name, JsonNode root, User user, boolean post) {
+ private boolean processNode (String name, JsonNode root, User user, boolean post) {
if (root.isObject()) {
if (root.has("operands")) {
JsonNode ops = root.at("/operands");
Iterator<JsonNode> it = ops.elements();
while (it.hasNext()) {
JsonNode next = it.next();
- if (process(name, next, user, post))
+ if (processNode(name, next, user, post))
it.remove();
}
}
else if (root.path("@type").asText().equals("koral:token")) {
// todo: koral:token nodes cannot be flagged for deletion --> creates the possibility for empty koral:token nodes
- processNode(name, KoralNode.wrapNode(root), user,
+ rewrite(name, KoralNode.wrapNode(root), user,
this.token_node_processors, post);
- return process(name, root.path("wrap"), user, post);
+ return processNode(name, root.path("wrap"), user, post);
}
else {
- return processNode(name, KoralNode.wrapNode(root), user,
+ return rewrite(name, KoralNode.wrapNode(root), user,
this.node_processors, post);
}
}
@@ -148,7 +147,7 @@
Iterator<JsonNode> it = root.elements();
while (it.hasNext()) {
JsonNode next = it.next();
- if (process(name, next, user, post))
+ if (processNode(name, next, user, post))
it.remove();
}
}
@@ -156,13 +155,13 @@
}
- private JsonNode process (JsonNode root, User user, boolean post) {
+ private JsonNode iterate (JsonNode root, User user, boolean post) {
jlog.debug("Running rewrite process on query {}", root);
if (root != null) {
Iterator<Map.Entry<String, JsonNode>> it = root.fields();
while (it.hasNext()) {
Map.Entry<String, JsonNode> next = it.next();
- process(next.getKey(), next.getValue(), user, post);
+ processNode(next.getKey(), next.getValue(), user, post);
}
processFixedNode(root, user, this.query_processors, post);
}
@@ -170,24 +169,14 @@
}
- public JsonNode preProcess (JsonNode root, User user) {
- return process(root, user, false);
+ public JsonNode process(JsonNode root, User user) {
+ JsonNode pre = iterate(root, user, false);
+ return iterate(pre, user, true);
}
- // fixme: redo with first, second iteration and push clean up filters into second run
- public String preProcess (String json, User user) {
- return JsonUtils.toJSON(preProcess(JsonUtils.readTree(json), user));
- }
-
-
- public JsonNode postProcess (JsonNode root, User user) {
- return process(root, user, true);
- }
-
-
- public String postProcess (String json, User user) {
- return JsonUtils.toJSON(postProcess(JsonUtils.readTree(json), user));
+ public String process(String json, User user) {
+ return JsonUtils.toJSON(process(JsonUtils.readTree(json), user));
}
@@ -198,8 +187,7 @@
* @return boolean true if node is to be removed from parent! Only
* applies if parent is an array node
*/
- // todo: integrate notifications into system!
- private boolean processNode (String rootNode, KoralNode node, User user,
+ private boolean rewrite (String rootNode, KoralNode node, User user,
Collection<? extends RewriteTask> tasks, boolean post) {
if (this.config == null)
throw new RuntimeException("KustvaktConfiguration must be set!");
@@ -211,8 +199,8 @@
if (this.beans != null && task instanceof BeanInjectable)
((BeanInjectable) task).insertBeans(this.beans);
- if (task instanceof RewriteTask.IterableRewriteAt) {
- RewriteTask.IterableRewriteAt rw = (RewriteTask.IterableRewriteAt) task;
+ if (task instanceof RewriteTask.IterableRewritePath) {
+ RewriteTask.IterableRewritePath rw = (RewriteTask.IterableRewritePath) task;
if (rw.path() != null && !rw.path().equals(rootNode)) {
jlog.debug("skipping node: " + node);
continue;
@@ -226,6 +214,7 @@
else if (task instanceof RewriteTask.RewriteAfter) {
((RewriteTask.RewriteAfter) task).postProcess(node);
}
+ node.buildRewrites();
}
catch (KustvaktException e) {
jlog.error("Error in rewrite processor {} for node {}", task
@@ -242,20 +231,20 @@
private void processFixedNode (JsonNode node, User user,
Collection<RewriteTask> tasks, boolean post) {
for (RewriteTask task : tasks) {
- JsonNode next = node;
+ KoralNode next = KoralNode.wrapNode(node);
if (task instanceof RewriteTask.RewriteNodeAt) {
RewriteTask.RewriteNodeAt rwa = (RewriteTask.RewriteNodeAt) task;
if ((rwa.at() != null && !node.at(rwa.at()).isMissingNode()))
- next = node.at(rwa.at());
+ next = next.at(rwa.at());
}
try {
if (!post & task instanceof RewriteTask.RewriteBefore)
- ((RewriteTask.RewriteBefore) task).preProcess(
- KoralNode.wrapNode(next), this.config, user);
+ ((RewriteTask.RewriteBefore) task).preProcess(next,
+ this.config, user);
else if (task instanceof RewriteTask.RewriteAfter)
- ((RewriteTask.RewriteAfter) task).postProcess(KoralNode
- .wrapNode(next));
+ ((RewriteTask.RewriteAfter) task).postProcess(next);
+ next.buildRewrites();
}
catch (KustvaktException e) {
jlog.error("Error in rewrite processor {} for node {}", task
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java
index 2c7fa06..fcc43aa 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteTask.java
@@ -38,7 +38,7 @@
* {@link de.ids_mannheim.korap.resource.rewrite.RewriteTask.RewriteAfter}
* queries will run
* after
- * {@link de.ids_mannheim.korap.resource.rewrite.RewriteTask.IterableRewriteAt}
+ * {@link IterableRewritePath}
* have been processed
*/
interface RewriteAfter extends RewriteTask {
@@ -61,7 +61,7 @@
* iteration
* (both object and array node iteration supported)
*/
- interface IterableRewriteAt extends RewriteBefore, RewriteAfter {
+ interface IterableRewritePath extends RewriteBefore, RewriteAfter {
String path ();
}