Added FCS ExpressionGroup.
Change-Id: I31680e81ff454fd20192ca14f0503adf8caa1535
diff --git a/src/main/java/de/ids_mannheim/korap/query/object/KoralContext.java b/src/main/java/de/ids_mannheim/korap/query/object/KoralContext.java
index ca789a9..abdde0b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/object/KoralContext.java
+++ b/src/main/java/de/ids_mannheim/korap/query/object/KoralContext.java
@@ -1,5 +1,9 @@
package de.ids_mannheim.korap.query.object;
+/**
+ * @author margaretha
+ *
+ */
public enum KoralContext {
SENTENCE("s"), PARAGRAPH("p"), TEXT("t");
diff --git a/src/main/java/de/ids_mannheim/korap/query/object/KoralMatchOperator.java b/src/main/java/de/ids_mannheim/korap/query/object/KoralMatchOperator.java
index 2a25202..bd5f6ea 100644
--- a/src/main/java/de/ids_mannheim/korap/query/object/KoralMatchOperator.java
+++ b/src/main/java/de/ids_mannheim/korap/query/object/KoralMatchOperator.java
@@ -1,5 +1,9 @@
package de.ids_mannheim.korap.query.object;
+/**
+ * @author margaretha
+ *
+ */
public enum KoralMatchOperator {
EQUALS("eq"), NOT_EQUALS("ne");
diff --git a/src/main/java/de/ids_mannheim/korap/query/object/KoralTermGroup.java b/src/main/java/de/ids_mannheim/korap/query/object/KoralTermGroup.java
index e9eba9f..eaae803 100644
--- a/src/main/java/de/ids_mannheim/korap/query/object/KoralTermGroup.java
+++ b/src/main/java/de/ids_mannheim/korap/query/object/KoralTermGroup.java
@@ -5,10 +5,8 @@
import java.util.List;
import java.util.Map;
-import de.ids_mannheim.korap.query.parse.fcsql.ExpressionParser;
import de.ids_mannheim.korap.query.serialize.MapBuilder;
import de.ids_mannheim.korap.query.serialize.util.KoralException;
-import eu.clarin.sru.server.fcs.parser.QueryNode;
/**
* @author margaretha
@@ -19,18 +17,12 @@
private static final KoralType type = KoralType.TERMGROUP;
private String relation;
- private List<Object> operands = new ArrayList<Object>();
+ private List<KoralObject> operands = new ArrayList<KoralObject>();
- public KoralTermGroup () {
-
- }
-
- public KoralTermGroup (ExpressionParser parser, KoralRelation relation,
- List<QueryNode> nodes) throws KoralException {
+ public KoralTermGroup (KoralRelation relation, List<KoralObject> operands)
+ throws KoralException {
this.relation = relation.toString();
- for (QueryNode node : nodes) {
- operands.add(parser.parseExpression(node, false, false));
- }
+ this.operands = operands;
}
public String getRelation() {
@@ -41,11 +33,11 @@
this.relation = relation;
}
- public List<Object> getOperands() {
+ public List<KoralObject> getOperands() {
return operands;
}
- public void setOperands(List<Object> operands) {
+ public void setOperands(List<KoralObject> operands) {
this.operands = operands;
}
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
index d62f4a7..488b4c8 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
@@ -1,20 +1,23 @@
package de.ids_mannheim.korap.query.parse.fcsql;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
-import de.ids_mannheim.korap.query.serialize.util.KoralException;
-import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
import de.ids_mannheim.korap.query.object.KoralMatchOperator;
import de.ids_mannheim.korap.query.object.KoralObject;
import de.ids_mannheim.korap.query.object.KoralRelation;
import de.ids_mannheim.korap.query.object.KoralTerm;
+import de.ids_mannheim.korap.query.object.KoralTerm.KoralTermType;
import de.ids_mannheim.korap.query.object.KoralTermGroup;
import de.ids_mannheim.korap.query.object.KoralToken;
-import de.ids_mannheim.korap.query.object.KoralTerm.KoralTermType;
+import de.ids_mannheim.korap.query.serialize.util.KoralException;
+import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
import eu.clarin.sru.server.fcs.parser.Expression;
import eu.clarin.sru.server.fcs.parser.ExpressionAnd;
+import eu.clarin.sru.server.fcs.parser.ExpressionGroup;
import eu.clarin.sru.server.fcs.parser.ExpressionNot;
import eu.clarin.sru.server.fcs.parser.ExpressionOr;
import eu.clarin.sru.server.fcs.parser.Operator;
@@ -56,9 +59,10 @@
return parseBooleanExpression(operands, KoralRelation.AND);
}
}
- // else if (queryNode instanceof ExpressionGroup) {
- //
- // }
+ else if (queryNode instanceof ExpressionGroup) {
+ // Ignore the group
+ return parseExpression(queryNode.getFirstChild());
+ }
else if (queryNode instanceof ExpressionNot) {
boolean negation = isNot ? false : true;
return parseExpression(queryNode.getChild(0), negation, isToken);
@@ -81,9 +85,13 @@
}
}
- private KoralObject parseBooleanExpression(List<QueryNode> operands,
+ private KoralToken parseBooleanExpression(List<QueryNode> operands,
KoralRelation relation) throws KoralException {
- KoralTermGroup termGroup = new KoralTermGroup(this, relation, operands);
+ List<KoralObject> terms = new ArrayList<>();
+ for (QueryNode node : operands) {
+ terms.add(parseExpression(node, false, false));
+ }
+ KoralTermGroup termGroup = new KoralTermGroup(relation, terms);
return new KoralToken(termGroup);
}
@@ -179,20 +187,32 @@
private void parseRegexFlags(KoralTerm koralTerm, Set<RegexFlag> set) throws KoralException {
// default case sensitive
- if (set != null) {
- for (RegexFlag f : set) {
- if (f == RegexFlag.CASE_SENSITVE) {
- koralTerm.setCaseSensitive(true);
- }
- else if (f == RegexFlag.CASE_INSENSITVE) {
- koralTerm.setCaseSensitive(false);
- }
- else {
- throw new KoralException(StatusCodes.UNKNOWN_QUERY_ELEMENT,
- "SRU diagnostic 48:" + f.name()
- + " is unsupported.");
- }
+ if (set == null) return;
+
+ ArrayList<String> names = new ArrayList<String>();
+ Iterator<RegexFlag> i = set.iterator();
+ while (i.hasNext()) {
+ RegexFlag f = i.next();
+ if (f == RegexFlag.CASE_SENSITVE) {
+ koralTerm.setCaseSensitive(true);
}
+ else if (f == RegexFlag.CASE_INSENSITVE) {
+ koralTerm.setCaseSensitive(false);
+ }
+ else {
+ names.add(f.name());
+ }
+ }
+
+ if (names.size() == 1) {
+ throw new KoralException(StatusCodes.UNKNOWN_QUERY_ELEMENT,
+ "SRU diagnostic 48: Regexflag: " + names.get(0)
+ + " is unsupported.");
+ }
+ else if (names.size() > 1) {
+ throw new KoralException(StatusCodes.UNKNOWN_QUERY_ELEMENT,
+ "SRU diagnostic 48: Regexflags: " + names.toString()
+ + " are unsupported.");
}
}
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java
index 2c83c5d..85be144 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java
@@ -49,9 +49,11 @@
else if (queryNode instanceof QueryDisjunction) {
return parseGroupQuery(queryNode.getChildren(),
KoralOperation.DISJUNCTION);
- } else if (queryNode instanceof QueryWithWithin) {
+ }
+ else if (queryNode instanceof QueryWithWithin) {
return parseWithinQuery((QueryWithWithin)queryNode);
- } else if (queryNode instanceof SimpleWithin) {
+ }
+ else if (queryNode instanceof SimpleWithin) {
SimpleWithin withinNode = (SimpleWithin) queryNode;
return parseWithinScope(withinNode.getScope());
}