replace stringBuilder with queryMap
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java
index bef19a1..d0fba37 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java
@@ -1,17 +1,17 @@
package de.ids_mannheim.korap.query.serialize;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import de.ids_mannheim.korap.util.QueryException;
import org.z3950.zing.cql.*;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author margaretha
+ * @date 23.04.14
*/
public class CQLTree extends AbstractSyntaxTree {
@@ -22,25 +22,23 @@
private static final String TERM_RELATION_CQL_1_1 = "scr";
private static final String TERM_RELATION_CQL_1_2 = "=";
private static final String SUPPORTED_RELATION_EXACT = "exact"; // not in the doc
- private static final String OPERATION_OR = "\"operation:or\"";
- private static final String OPERATION_SEQUENCE = "\"operation:sequence\"";
+ private static final String OPERATION_OR = "operation:or";
+ private static final String OPERATION_SEQUENCE = "operation:sequence";
private static final String KORAP_CONTEXT = "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld";
private LinkedHashMap<String, Object> requestMap;
private String version;
private boolean isCaseSensitive; // default true
- private StringBuilder sb;
-
+
public CQLTree(String query) throws QueryException {
this(query, VERSION_1_2, true);
}
public CQLTree(String query, String version) throws QueryException {
- this(query, version, true);
+ this(query, version, true);
}
public CQLTree(String query, String version, boolean isCaseSensitive) throws QueryException {
- this.sb = new StringBuilder();
this.version = version;
this.isCaseSensitive = isCaseSensitive;
this.requestMap = new LinkedHashMap<>();
@@ -60,17 +58,8 @@
throw new QueryException(27, "An empty query is unsupported.");
CQLNode cqlNode = parseQuerytoCQLNode(query);
- parseCQLNode(cqlNode);
- ObjectMapper mapper = new ObjectMapper();
- JsonNode node;
- try {
- node = mapper.readTree(sb.toString());
- } catch (IOException e) {
- e.printStackTrace();
- throw new QueryException("Something went wrong!");
- }
- requestMap.put("query", node);
-
+ Map<String,Object> queryMap = parseCQLNode(cqlNode);
+ requestMap.put("query", queryMap);
}
private CQLNode parseQuerytoCQLNode(String query) throws QueryException {
@@ -90,79 +79,99 @@
}
}
- private void parseCQLNode(CQLNode node) throws QueryException {
+ private Map<String,Object> parseCQLNode(CQLNode node) throws QueryException {
if (node instanceof CQLTermNode) {
- parseTermNode((CQLTermNode) node);
+ return parseTermNode((CQLTermNode) node);
} else if (node instanceof CQLAndNode) {
- parseAndNode((CQLAndNode) node);
+ return parseAndNode((CQLAndNode) node);
} else if (node instanceof CQLOrNode) {
- parseOrNode((CQLOrNode) node);
+ return parseOrNode((CQLOrNode) node);
} else {
throw new QueryException(48, "Only basic search including term-only " +
"and boolean operator queries (AND and OR) are currently supported.");
}
}
- private void parseTermNode(CQLTermNode node) throws QueryException {
+ private Map<String,Object> parseTermNode(CQLTermNode node) throws QueryException {
checkTermNode(node);
final String term = node.getTerm();
if ((term == null) || term.isEmpty()) {
throw new QueryException(27, "An empty term is unsupported.");
} else if (term.contains(" ")) {
- writeSequence(term);
+ return writeSequence(term);
} else {
- writeTerm(term);
+ return writeTerm(term);
}
}
- private void parseAndNode(CQLAndNode node) throws QueryException {
+ private Map<String,Object> parseAndNode(CQLAndNode node) throws QueryException {
checkBooleanModifier(node);
- sb.append("{\"@type\":\"korap:group\", \"operation\":");
- sb.append(OPERATION_SEQUENCE);
- sb.append(", \"distances\":[{\"@type\":\"korap:distance\", \"key\":\"t\"," +
- " \"min\":0, \"max\":0}]");
- sb.append(", \"operands\":[");
- parseCQLNode(node.getLeftOperand());
- sb.append(", ");
- parseCQLNode(node.getRightOperand());
- sb.append("]}");
+
+ Map<String, Object> map = new LinkedHashMap<String,Object>();
+ map.put("@type", "korap:group");
+ map.put("operation", OPERATION_SEQUENCE);
+
+ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+ Map<String, Object> distanceMap = new LinkedHashMap<String,Object>();
+ distanceMap.put("@type", "korap:distance");
+ distanceMap.put("key", "t");
+ distanceMap.put("min", "0");
+ distanceMap.put("max", "0");
+ list.add(distanceMap);
+ map.put("distances", list);
+
+ List<Map<String, Object>> operandList = new ArrayList<Map<String, Object>>();
+ operandList.add(parseCQLNode(node.getLeftOperand()));
+ operandList.add(parseCQLNode(node.getRightOperand()));
+ map.put("operands", operandList);
+
+ return map;
}
- private void parseOrNode(CQLOrNode node) throws QueryException {
- checkBooleanModifier(node);
- sb.append("{\"@type\":\"korap:group\", \"operation\":");
- sb.append(OPERATION_OR);
- sb.append(", \"operands\":[");
- parseCQLNode(node.getLeftOperand());
- sb.append(", ");
- parseCQLNode(node.getRightOperand());
- sb.append("]}");
+ private Map<String,Object> parseOrNode(CQLOrNode node) throws QueryException {
+ checkBooleanModifier(node);
+
+ Map<String, Object> map = new LinkedHashMap<String,Object>();
+ map.put("@type", "korap:group");
+ map.put("operation", OPERATION_OR);
+
+ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+ list.add(parseCQLNode(node.getLeftOperand()));
+ list.add(parseCQLNode(node.getRightOperand()));
+ map.put("operands", list);
+
+ return map;
}
- private void writeSequence(String str) {
+ private Map<String, Object> writeSequence(String str) {
+ Map<String, Object> sequenceMap = new LinkedHashMap<String,Object>();
+ sequenceMap.put("@type", "korap:group");
+ sequenceMap.put("operation", OPERATION_SEQUENCE);
+
+ List<Map<String, Object>> termList = new ArrayList<Map<String, Object>>();
String[] terms = str.split(" ");
- sb.append("{\"@type\":\"korap:group\", \"operation\":");
- sb.append(OPERATION_SEQUENCE);
- sb.append(", \"operands\":[");
-
- int size = terms.length;
- for (int i = 0; i < size; i++) {
- writeTerm(terms[i]);
- if (i < size - 1)
- sb.append(", ");
+ for (String term : terms){
+ termList.add(writeTerm(term));
}
-
- sb.append("]}");
+ sequenceMap.put("operands", termList);
+
+ return sequenceMap;
}
- private void writeTerm(String term) {
- sb.append("{\"@type\":\"korap:token\", \"wrap\":{\"@type\":\"korap:term\"");
- if (!isCaseSensitive) {
- sb.append(", \"caseInsensitive\":true");
- }
- sb.append(", \"key\":");
- sb.append("\"" + term + "\"");
- sb.append(", \"layer\":\"orth\", \"match\":\"match:eq\"}}");
+ private Map<String, Object> writeTerm(String term) {
+ Map<String, Object> map = new LinkedHashMap<String,Object>();
+ map.put("@type", "korap:term");
+ if (!isCaseSensitive) {
+ map.put("caseInsensitive","true");
+ }
+ map.put("key", term);
+ map.put("layer", "orth");
+ map.put("match", "match:eq");
+
+ Map<String, Object> tokenMap = new LinkedHashMap<String,Object>();
+ tokenMap.put("@type", "korap:token");
+ tokenMap.put("wrap", map);
+ return tokenMap;
}
private void checkBooleanModifier(CQLBooleanNode node) throws QueryException {