Bugfix for query deserialization of unspecified boundaries
diff --git a/CHANGES b/CHANGES
index a515a65..b013ba1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+0.43 2014-09-25
+ - [feature] Match collector using database for distributed search (diewald)
+ - [bugfix] Unified boundary handling and prevent nullpointer
+ exceptions on parsing (diewald)
+
0.43 2014-09-23
- [cleanup] Made a lot of stuff rely on KorapResponse (diewald)
- [bugfix] Small but ancient collection bug fixed (diewald)
diff --git a/pom.xml b/pom.xml
index 9bee877..879d385 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
<groupId>KorAP-modules</groupId>
<artifactId>KorAP-lucene-index</artifactId>
- <version>0.43</version>
+ <version>0.44</version>
<packaging>jar</packaging>
<name>KorAP-lucene-index</name>
diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index 11616ea..e693b48 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -85,8 +85,17 @@
throw new QueryException("Boundary definition is not valid");
};
- min = json.get("min").asInt(defaultMin);
- max = json.get("max").asInt(defaultMax);
+ // Set min boundary
+ if (json.has("min"))
+ this.min = json.get("min").asInt(defaultMin);
+ else
+ this.min = defaultMin;
+
+ // Set max boundary
+ if (json.has("max"))
+ this.max = json.get("max").asInt(defaultMax);
+ else
+ this.max = defaultMax;
if (DEBUG)
log.trace("Found korap:boundary with {}:{}");
@@ -136,15 +145,18 @@
if (DEBUG)
log.trace("Found {} group", operation);
+ if (!json.has("operands"))
+ throw new QueryException("Operation needs operand list");
+
// Get all operands
JsonNode operands = json.get("operands");
+ if (!operands.isArray())
+ throw new QueryException("Operation needs operand list");
+
if (DEBUG)
log.trace("Operands are {}", operands);
- if (!json.has("operands") || !operands.isArray())
- throw new QueryException("Operation needs operand list");
-
switch (operation) {
case "operation:or":
@@ -278,15 +290,17 @@
"Text based distances are not supported yet"
);
- int min, max;
+ int min = 0, max = 100;
if (constraint.has("boundary")) {
- Boundary b = new Boundary(constraint.get("boundary"), 1,1);
+ Boundary b = new Boundary(constraint.get("boundary"), 0,100);
min = b.min;
max = b.max;
}
else {
- min = constraint.get("min").asInt(1);
- max = constraint.get("max").asInt(1);
+ if (constraint.has("min"))
+ min = constraint.get("min").asInt(0);
+ if (constraint.has("max"))
+ max = constraint.get("max").asInt(100);
};
sseqqw.withConstraint(min, max, unit);
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
index 0d99899..842cead 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
@@ -274,6 +274,18 @@
assertEquals(sqwi.toQuery().toString(), "spanNext(spanOr([tokens:s:der, spanNext(tokens:s:der, spanRepetition(tokens:cnx/p:A{1,2}))]), tokens:tt/p:NN)");
};
+
+ @Test
+ public void queryJSONboundaryBug () {
+ SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp-boundary.jsonld").getFile());
+
+ // Tal []{1,} Wald
+ assertEquals(sqwi.toQuery().toString(), "spanDistance(tokens:s:Tal, tokens:s:Wald, [(w[2:100], ordered, notExcluded)])");
+ };
+
+
+
+
public static String getString (String path) {
StringBuilder contentBuilder = new StringBuilder();
try {
diff --git a/src/test/resources/queries/bsp-boundary.jsonld b/src/test/resources/queries/bsp-boundary.jsonld
new file mode 100644
index 0000000..f93fa14
--- /dev/null
+++ b/src/test/resources/queries/bsp-boundary.jsonld
@@ -0,0 +1 @@
+{"@context":"http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld","errors":[],"warnings":[],"announcements":["Deprecated 2014-07-24: 'min' and 'max' to be supported until 3 months from deprecation date."],"query":{"@type":"korap:group","operation":"operation:sequence","operands":[{"@type":"korap:token","wrap":{"@type":"korap:term","layer":"orth","key":"Tal","match":"match:eq"}},{"@type":"korap:token","wrap":{"@type":"korap:term","layer":"orth","key":"Wald","match":"match:eq"}}],"inOrder":true,"distances":[{"@type":"korap:distance","key":"w","boundary":{"@type":"korap:boundary","min":2},"min":2}]},"collections":[{"@type":"korap:meta-filter","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"WPD"}}],"meta":{"startPage":1,"itemsPerResource":1,"context":"paragraph"}}