scm:git:git@github.com:GIScience/ohsome-api.git
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/ElementsRequestExecutor.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/ElementsRequestExecutor.java
index 95df128d..289f0c75 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/ElementsRequestExecutor.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/ElementsRequestExecutor.java
@@ -181,11 +181,12 @@ public static Response aggregateGroupByBoundary
TagTranslator tt = DbConnData.tagTranslator;
Integer[] valuesInt = new Integer[groupByValues.length];
ArrayList> zeroFill = new ArrayList<>();
- int keysInt = tt.getOSHDBTagKeyOf(groupByKey[0]).map(OSHDBTagKey::toInt).orElse(-1);
+ int keyInt = tt.getOSHDBTagKeyOf(groupByKey[0]).map(OSHDBTagKey::toInt).orElse(-2);
if (groupByValues.length != 0) {
for (int j = 0; j < groupByValues.length; j++) {
- valuesInt[j] = tt.getOSHDBTagOf(groupByKey[0], groupByValues[j]).map(OSHDBTag::getValue).orElse(-j);
- zeroFill.add(new ImmutablePair<>(keysInt, valuesInt[j]));
+ valuesInt[j] = tt.getOSHDBTagOf(groupByKey[0], groupByValues[j])
+ .map(OSHDBTag::getValue).orElse(-j - 1);
+ zeroFill.add(new ImmutablePair<>(keyInt, valuesInt[j]));
}
}
var arrGeoms = new ArrayList<>(processingData.getBoundaryList());
@@ -201,7 +202,7 @@ public static Response aggregateGroupByBoundary
mapAgg = mapAgg.filter(filter.get());
}
var result = ExecutionUtils.computeNestedResult(requestResource,
- mapAgg.map(f -> ExecutionUtils.mapSnapshotToTags(keysInt, valuesInt, f))
+ mapAgg.map(f -> ExecutionUtils.mapSnapshotToTags(keyInt, valuesInt, f))
.aggregateBy(Pair::getKey, zeroFill).map(Pair::getValue)
.aggregateByTimestamp(OSMEntitySnapshot::getTimestamp));
var groupByResult = OSHDBCombinedIndex.nest(result);
@@ -217,10 +218,12 @@ public static
Response aggregateGroupByBoundary
int tagValue = entry.getKey().getSecondIndex().getValue();
String tagIdentifier;
// check for non-remainder objects (which do have the defined key and value)
- if (entry.getKey().getSecondIndex().getKey() != -1 && tagValue != -1) {
- tagIdentifier = tt.lookupTag(keysInt, tagValue).toString();
- } else {
+ if (entry.getKey().getSecondIndex().getKey() == -1) {
tagIdentifier = "remainder";
+ } else if (tagValue < 0) {
+ tagIdentifier = groupByKey[0] + '=' + groupByValues[-tagValue - 1];
+ } else {
+ tagIdentifier = tt.lookupTag(keyInt, tagValue).toString();
}
resultSet[count] =
new GroupByResult(new Object[] {boundaryIds[boundaryIdentifier], tagIdentifier}, results);
@@ -288,14 +291,15 @@ public static Response aggregateGroupByTag(RequestResource requestResource,
TagTranslator tt = DbConnData.tagTranslator;
Integer[] valuesInt = new Integer[groupByValues.length];
ArrayList> zeroFill = new ArrayList<>();
- int keysInt = tt.getOSHDBTagKeyOf(groupByKey[0]).map(OSHDBTagKey::toInt).orElse(-1);
+ int keyInt = tt.getOSHDBTagKeyOf(groupByKey[0]).map(OSHDBTagKey::toInt).orElse(-2);
if (groupByValues.length != 0) {
for (int j = 0; j < groupByValues.length; j++) {
- valuesInt[j] = tt.getOSHDBTagOf(groupByKey[0], groupByValues[j]).map(OSHDBTag::getValue).orElse(-j);
- zeroFill.add(new ImmutablePair<>(keysInt, valuesInt[j]));
+ valuesInt[j] = tt.getOSHDBTagOf(groupByKey[0], groupByValues[j])
+ .map(OSHDBTag::getValue).orElse(-j - 1);
+ zeroFill.add(new ImmutablePair<>(keyInt, valuesInt[j]));
}
}
- var preResult = mapRed.map(f -> ExecutionUtils.mapSnapshotToTags(keysInt, valuesInt, f))
+ var preResult = mapRed.map(f -> ExecutionUtils.mapSnapshotToTags(keyInt, valuesInt, f))
.aggregateByTimestamp().aggregateBy(Pair::getKey, zeroFill).map(Pair::getValue);
var result = ExecutionUtils.computeResult(requestResource, preResult);
var groupByResult = ExecutionUtils.nest(result);
@@ -307,10 +311,12 @@ public static Response aggregateGroupByTag(RequestResource requestResource,
ElementsResult[] results = ExecutionUtils.fillElementsResult(
entry.getValue(), requestParameters.isDensity(), df, geom);
// check for non-remainder objects (which do have the defined key and value)
- if (entry.getKey().getKey() != -1 && entry.getKey().getValue() != -1) {
- groupByName = tt.lookupTag(keysInt, entry.getKey().getValue()).toString();
- } else {
+ if (entry.getKey().getKey() == -1) {
groupByName = "remainder";
+ } else if (entry.getKey().getValue() < 0) {
+ groupByName = groupByKey[0] + '=' + groupByValues[-entry.getKey().getValue() - 1];
+ } else {
+ groupByName = tt.lookupTag(keyInt, entry.getKey().getValue()).toString();
}
resultSet[count] = new GroupByResult(groupByName, results);
count++;
@@ -431,7 +437,7 @@ public static Response aggregateGroupByKey(RequestResource requestResource,
TagTranslator tt = DbConnData.tagTranslator;
Integer[] keysInt = new Integer[groupByKeys.length];
for (int i = 0; i < groupByKeys.length; i++) {
- keysInt[i] = tt.getOSHDBTagKeyOf(groupByKeys[i]).map(OSHDBTagKey::toInt).orElse(-i);
+ keysInt[i] = tt.getOSHDBTagKeyOf(groupByKeys[i]).map(OSHDBTagKey::toInt).orElse(-i - 2);
}
MapAggregator, OSMEntitySnapshot> preResult =
mapRed.flatMap(f -> {
@@ -460,10 +466,12 @@ public static Response aggregateGroupByKey(RequestResource requestResource,
ElementsResult[] results = ExecutionUtils.fillElementsResult(
entry.getValue(), requestParameters.isDensity(), df, null);
// check for non-remainder objects (which do have the defined key)
- if (entry.getKey() != -1) {
- groupByName = tt.lookupTag(entry.getKey(), 0).getKey();
- } else {
+ if (entry.getKey() == -1) {
groupByName = "remainder";
+ } else if (entry.getKey() < -1) {
+ groupByName = groupByKeys[-entry.getKey() - 2];
+ } else {
+ groupByName = tt.lookupTag(entry.getKey(), 0).getKey();
}
resultSet[count] = new GroupByResult(groupByName, results);
count++;
@@ -531,18 +539,19 @@ public static Response aggregateBasicFiltersRatio(RequestResource requestResourc
Integer[] keysInt2 = new Integer[keys2.length];
Integer[] valuesInt2 = new Integer[values2.length];
for (int i = 0; i < requestParameters.getKeys().length; i++) {
- keysInt1[i] = tt.getOSHDBTagKeyOf(requestParameters.getKeys()[i]).map(OSHDBTagKey::toInt)
- .orElse(-i);
+ keysInt1[i] = tt.getOSHDBTagKeyOf(requestParameters.getKeys()[i])
+ .map(OSHDBTagKey::toInt).orElse(-i - 1);
if (requestParameters.getValues() != null && i < requestParameters.getValues().length) {
valuesInt1[i] =
tt.getOSHDBTagOf(requestParameters.getKeys()[i], requestParameters.getValues()[i])
- .map(OSHDBTag::getValue).orElse(-i);
+ .map(OSHDBTag::getValue).orElse(-i - 1);
}
}
for (int i = 0; i < keys2.length; i++) {
- keysInt2[i] = tt.getOSHDBTagKeyOf(keys2[i]).map(OSHDBTagKey::toInt).orElse(-i);
+ keysInt2[i] = tt.getOSHDBTagKeyOf(keys2[i]).map(OSHDBTagKey::toInt).orElse(-i - 1);
if (i < values2.length) {
- valuesInt2[i] = tt.getOSHDBTagOf(keys2[i], values2[i]).map(OSHDBTag::getValue).orElse(-i);
+ valuesInt2[i] = tt.getOSHDBTagOf(keys2[i], values2[i])
+ .map(OSHDBTag::getValue).orElse(-i - 1);
}
}
EnumSet osmTypes1 =
@@ -782,18 +791,19 @@ public static Response aggregateBasicFiltersRat
Integer[] valuesInt2 = new Integer[values2.length];
TagTranslator tt = DbConnData.tagTranslator;
for (int i = 0; i < requestParameters.getKeys().length; i++) {
- keysInt1[i] = tt.getOSHDBTagKeyOf(requestParameters.getKeys()[i]).map(OSHDBTagKey::toInt)
- .orElse(-i);
+ keysInt1[i] = tt.getOSHDBTagKeyOf(requestParameters.getKeys()[i])
+ .map(OSHDBTagKey::toInt).orElse(-i - 1);
if (requestParameters.getValues() != null && i < requestParameters.getValues().length) {
valuesInt1[i] =
tt.getOSHDBTagOf(requestParameters.getKeys()[i], requestParameters.getValues()[i])
- .map(OSHDBTag::getValue).orElse(-i);
+ .map(OSHDBTag::getValue).orElse(-i - 1);
}
}
for (int i = 0; i < keys2.length; i++) {
- keysInt2[i] = tt.getOSHDBTagKeyOf(keys2[i]).map(OSHDBTagKey::toInt).orElse(-i);
+ keysInt2[i] = tt.getOSHDBTagKeyOf(keys2[i]).map(OSHDBTagKey::toInt).orElse(-i - 1);
if (i < values2.length) {
- valuesInt2[i] = tt.getOSHDBTagOf(keys2[i], values2[i]).map(OSHDBTag::getValue).orElse(-i);
+ valuesInt2[i] = tt.getOSHDBTagOf(keys2[i], values2[i])
+ .map(OSHDBTag::getValue).orElse(-i - 1);
}
}
EnumSet osmTypes1 = (EnumSet) processingData.getOsmTypes();
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/UsersRequestExecutor.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/UsersRequestExecutor.java
index 6e995c8c..50d1bab2 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/UsersRequestExecutor.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/executor/UsersRequestExecutor.java
@@ -120,12 +120,12 @@ public static Response countGroupByTag(HttpServletRequest servletRequest,
TagTranslator tt = DbConnData.tagTranslator;
Integer[] valuesInt = new Integer[groupByValues.length];
ArrayList> zeroFill = new ArrayList<>();
- int keysInt = tt.getOSHDBTagKeyOf(groupByKey[0]).map(OSHDBTagKey::toInt).orElse(-1);
+ int keyInt = tt.getOSHDBTagKeyOf(groupByKey[0]).map(OSHDBTagKey::toInt).orElse(-3);
if (groupByValues.length != 0) {
for (int j = 0; j < groupByValues.length; j++) {
- valuesInt[j] = tt.getOSHDBTagOf(groupByKey[0], groupByValues[j]).map(OSHDBTag::getValue)
- .orElse(-j);
- zeroFill.add(new ImmutablePair<>(keysInt, valuesInt[j]));
+ valuesInt[j] = tt.getOSHDBTagOf(groupByKey[0], groupByValues[j])
+ .map(OSHDBTag::getValue).orElse(-j - 1);
+ zeroFill.add(new ImmutablePair<>(keyInt, valuesInt[j]));
}
}
SortedMap>, Integer> result = null;
@@ -138,7 +138,7 @@ public static Response countGroupByTag(HttpServletRequest servletRequest,
for (OSHDBTag tag : tags) {
int tagKeyId = tag.getKey();
int tagValueId = tag.getValue();
- if (tagKeyId == keysInt) {
+ if (tagKeyId == keyInt) {
if (valuesInt.length == 0) {
res.add(new ImmutablePair<>(new ImmutablePair<>(tagKeyId, tagValueId), f));
}
@@ -169,12 +169,14 @@ public static Response countGroupByTag(HttpServletRequest servletRequest,
groupByResult.entrySet()) {
ContributionsResult[] results = ExecutionUtils.fillContributionsResult(entry.getValue(),
requestParameters.isDensity(), inputProcessor, df, geom);
- if (entry.getKey().getKey() == -2 && entry.getKey().getValue() == -2) {
+ if (entry.getKey().getKey() == -2) {
groupByName = "total";
- } else if (entry.getKey().getKey() == -1 && entry.getKey().getValue() == -1) {
+ } else if (entry.getKey().getKey() == -1) {
groupByName = "remainder";
+ } else if (entry.getKey().getValue() < 0) {
+ groupByName = groupByKey[0] + '=' + groupByValues[-entry.getKey().getValue() - 1];
} else {
- groupByName = tt.lookupTag(keysInt, entry.getKey().getValue()).toString();
+ groupByName = tt.lookupTag(keyInt, entry.getKey().getValue()).toString();
}
resultSet[count] = new GroupByResult(groupByName, results);
count++;
@@ -216,7 +218,7 @@ public static Response countGroupByKey(HttpServletRequest servletRequest,
TagTranslator tt = DbConnData.tagTranslator;
Integer[] keysInt = new Integer[groupByKeys.length];
for (int i = 0; i < groupByKeys.length; i++) {
- keysInt[i] = tt.getOSHDBTagKeyOf(groupByKeys[i]).map(OSHDBTagKey::toInt).orElse(-i);
+ keysInt[i] = tt.getOSHDBTagKeyOf(groupByKeys[i]).map(OSHDBTagKey::toInt).orElse(-i - 3);
}
SortedMap, Integer> result = null;
result = mapRed
@@ -257,6 +259,8 @@ public static Response countGroupByKey(HttpServletRequest servletRequest,
groupByName = "total";
} else if (entry.getKey() == -1) {
groupByName = "remainder";
+ } else if (entry.getKey() < -2) {
+ groupByName = groupByKeys[-entry.getKey() - 3];
} else {
groupByName = tt.lookupTag(entry.getKey(), 0).getKey();
}
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/StringSimilarity.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/StringSimilarity.java
index 5bb91f13..9c523c0a 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/StringSimilarity.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/inputprocessing/StringSimilarity.java
@@ -2,7 +2,6 @@
import java.math.BigDecimal;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Locale;
import org.apache.commons.text.similarity.FuzzyScore;
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/oshdb/DbConnData.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/oshdb/DbConnData.java
index fe80b983..c6f16055 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/oshdb/DbConnData.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/oshdb/DbConnData.java
@@ -2,7 +2,6 @@
import javax.sql.DataSource;
import org.heigit.ohsome.oshdb.api.db.OSHDBDatabase;
-import org.heigit.ohsome.oshdb.api.db.OSHDBJdbc;
import org.heigit.ohsome.oshdb.util.tagtranslator.TagTranslator;
/** Holds the database connection objects. */
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/ConfigureApplication.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/ConfigureApplication.java
index 62cd0015..4ad991ae 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/ConfigureApplication.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/ConfigureApplication.java
@@ -99,7 +99,8 @@ private ConfigureApplication(ApplicationArguments args) {
}
/**
- * Method run by the Application class to parse incoming command line arguments
+ * Method run by the Application class to parse incoming command line arguments.
+ *
* @param args ApplicationArguments from spring to be parsed.
*/
public static void parseArguments(ApplicationArguments args)
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/FilterUtil.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/FilterUtil.java
index 767722a9..573e0b72 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/FilterUtil.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/FilterUtil.java
@@ -4,12 +4,21 @@
import java.util.stream.Collectors;
import org.heigit.ohsome.oshdb.osm.OSMType;
+/**
+ * Utility functions for OSHDB filters.
+ */
public class FilterUtil {
private FilterUtil() {}
+ /**
+ * Creates an OSHDB filter which selects OSM objects by their type.
+ *
+ * @param types the set of allowed OSM types
+ * @return a string representing an OSHDB filter matching the given set of OSM types
+ */
public static String filter(Set types) {
return types.stream()
.map(type -> "type:" + type.toString().toLowerCase())
- .collect(Collectors.joining(" or ", "( "," )"));
+ .collect(Collectors.joining(" or ", "( ", " )"));
}
}
diff --git a/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/RequestUtils.java b/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/RequestUtils.java
index 005a2a0a..229ef033 100644
--- a/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/RequestUtils.java
+++ b/src/main/lombok/org/heigit/ohsome/ohsomeapi/utils/RequestUtils.java
@@ -4,13 +4,11 @@
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.heigit.ohsome.ohsomeapi.exception.DatabaseAccessException;
-import org.heigit.ohsome.ohsomeapi.exception.ExceptionMessages;
import org.heigit.ohsome.ohsomeapi.inputprocessing.GeometryBuilder;
import org.heigit.ohsome.ohsomeapi.inputprocessing.ProcessingData;
import org.heigit.ohsome.ohsomeapi.oshdb.DbConnData;
import org.heigit.ohsome.ohsomeapi.oshdb.ExtractMetadata;
import org.heigit.ohsome.oshdb.api.db.OSHDBDatabase;
-import org.heigit.ohsome.oshdb.api.db.OSHDBJdbc;
/** Utils class containing request-specific static utility methods. */
public class RequestUtils {
diff --git a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/DataExtractionTest.java b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/DataExtractionTest.java
index 84bfa912..15a05369 100644
--- a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/DataExtractionTest.java
+++ b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/DataExtractionTest.java
@@ -92,7 +92,7 @@ public void elementsGeomSimpleFeaturesOtherLineTest() {
assertTrue("GeometryCollection"
.equals(response.getBody().get("features").get(0).get("geometry").get("type").asText()));
}
-
+
@Test
public void elementsGeomUsingNoTagsTest() {
TestRestTemplate restTemplate = new TestRestTemplate();
diff --git a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java
index d7623e99..9510f3a8 100644
--- a/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java
+++ b/src/test/java/org/heigit/ohsome/ohsomeapi/controller/GetControllerTest.java
@@ -11,8 +11,10 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.Spliterator;
import java.util.Spliterators;
+import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.apache.commons.csv.CSVRecord;
import org.heigit.ohsome.ohsomeapi.Application;
@@ -177,6 +179,42 @@ public void getElementsCountGroupByBoundaryGroupByTagTest() {
.findFirst().get().get("result").get(0).get("value").asInt());
}
+ @Test
+ public void getElementsCountGroupByBoundaryGroupByTagUnknownValuesTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response = restTemplate.getForEntity(server + port
+ + "/elements/count/groupBy/boundary/groupBy/tag?bboxes=8.68086,49.39948,8.69401,49.40609&"
+ + "time=2016-11-09&groupByKey=building&groupByValues=xxx,yyy,zzz&"
+ + "filter=type:way and building=*",
+ JsonNode.class);
+ assertEquals(
+ Set.of("building=xxx", "building=yyy", "building=zzz", "remainder"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .filter(jsonNode ->
+ "boundary1".equalsIgnoreCase(jsonNode.get("groupByObject").get(0).asText()))
+ .map(jsonNode -> jsonNode.get("groupByObject").get(1).asText())
+ .collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void getElementsCountGroupByBoundaryGroupByTagUnknownKeyTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response = restTemplate.getForEntity(server + port
+ + "/elements/count/groupBy/boundary/groupBy/tag?bboxes=8.68086,49.39948,8.69401,49.40609&"
+ + "time=2016-11-09&groupByKey=DoesNotExist&groupByValues=xxx&"
+ + "filter=type:way and building=*",
+ JsonNode.class);
+ assertEquals(
+ Set.of("DoesNotExist=xxx", "remainder"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .filter(jsonNode ->
+ "boundary1".equalsIgnoreCase(jsonNode.get("groupByObject").get(0).asText()))
+ .map(jsonNode -> jsonNode.get("groupByObject").get(1).asText())
+ .collect(Collectors.toSet()));
+ }
+
@Test
public void getElementsCountGroupByTypeTest() {
TestRestTemplate restTemplate = new TestRestTemplate();
@@ -206,6 +244,38 @@ public void getElementsCountGroupByTagTest() {
.findFirst().get().get("result").get(0).get("value").asInt());
}
+ @Test
+ public void getElementsCountGroupByTagUnknownValuesTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response = restTemplate.getForEntity(
+ server + port + "/elements/count/groupBy/tag?bboxes=8.67859,49.41189,8.67964,49.41263&"
+ + "time=2017-01-01&groupByKey=building&groupByValues=xxx,yyy,zzz&"
+ + "filter=building=* and type:way",
+ JsonNode.class);
+ assertEquals(
+ Set.of("building=xxx", "building=yyy", "building=zzz", "remainder"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .map(jsonNode -> jsonNode.get("groupByObject").asText())
+ .collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void getElementsCountGroupByTagUnknownKeyTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response = restTemplate.getForEntity(
+ server + port + "/elements/count/groupBy/tag?bboxes=8.67859,49.41189,8.67964,49.41263&"
+ + "time=2017-01-01&groupByKey=DoesNotExist&groupByValues=xxx&"
+ + "filter=building=* and type:way",
+ JsonNode.class);
+ assertEquals(
+ Set.of("DoesNotExist=xxx", "remainder"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .map(jsonNode -> jsonNode.get("groupByObject").asText())
+ .collect(Collectors.toSet()));
+ }
+
@Test
public void getElementsCountGroupByKeyTest() {
TestRestTemplate restTemplate = new TestRestTemplate();
@@ -222,6 +292,23 @@ public void getElementsCountGroupByKeyTest() {
.findFirst().get().get("result").get(0).get("value").asInt());
}
+ @Test
+ public void getElementsCountGroupByKeyUnknownKeysTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response =
+ restTemplate.getForEntity(
+ server + port + "/elements/count/groupBy/key?bboxes=8.67859,49.41189,8.67964,49.41263&"
+ + "time=2012-01-01&groupByKeys=DoesNotExist1,DoesNotExist2,DoesNotExist3&"
+ + "filter=type:way and building=*",
+ JsonNode.class);
+ assertEquals(
+ Set.of("DoesNotExist1", "DoesNotExist2", "DoesNotExist3", "remainder"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .map(jsonNode -> jsonNode.get("groupByObject").asText())
+ .collect(Collectors.toSet()));
+ }
+
@Test
public void getElementsCountRatioTest() {
final double expectedValue = 0.153933;
@@ -585,6 +672,24 @@ public void getUsersCountGroupByKeyTest() {
.findFirst().get().get("result").get(0).get("value").asInt());
}
+ @Test
+ public void getUsersCountGroupByKeyUnknownKeysTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response =
+ restTemplate.getForEntity(
+ server + port + "/users/count/groupBy/key?bboxes=8.67859,49.41189,8.67964,49.41263&"
+ + "time=2014-01-01,2015-01-01&"
+ + "groupByKeys=DoesNotExist1,DoesNotExist2,DoesNotExist3&"
+ + "filter=type:way and building=*",
+ JsonNode.class);
+ assertEquals(
+ Set.of("DoesNotExist1", "DoesNotExist2", "DoesNotExist3", "remainder", "total"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .map(jsonNode -> jsonNode.get("groupByObject").asText())
+ .collect(Collectors.toSet()));
+ }
+
@Test
public void getUsersCountGroupByTagTest() {
TestRestTemplate restTemplate = new TestRestTemplate();
@@ -599,6 +704,41 @@ public void getUsersCountGroupByTagTest() {
.findFirst().get().get("result").get(0).get("value").asInt());
}
+ @Test
+ public void getUsersCountGroupByTagUnknownValuesTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response =
+ restTemplate.getForEntity(
+ server + port + "/users/count/groupBy/tag?bboxes=8.67859,49.41189,8.67964,49.41263&"
+ + "time=2014-01-01,2015-01-01&groupByKey=building&"
+ + "groupByValues=DoesNotExist1,DoesNotExist2&"
+ + "filter=type:way and building=*",
+ JsonNode.class);
+ assertEquals(
+ Set.of("building=DoesNotExist1", "building=DoesNotExist2", "remainder", "total"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .map(jsonNode -> jsonNode.get("groupByObject").asText())
+ .collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void getUsersCountGroupByTagUnknownKeyTest() {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ ResponseEntity response =
+ restTemplate.getForEntity(
+ server + port + "/users/count/groupBy/tag?bboxes=8.67859,49.41189,8.67964,49.41263&"
+ + "time=2014-01-01,2015-01-01&groupByKey=DoesNotExist&groupByValues=xxx&"
+ + "filter=type:way and building=*",
+ JsonNode.class);
+ assertEquals(
+ Set.of("DoesNotExist=xxx", "remainder", "total"),
+ StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+ response.getBody().get("groupByResult").iterator(), Spliterator.ORDERED), false)
+ .map(jsonNode -> jsonNode.get("groupByObject").asText())
+ .collect(Collectors.toSet()));
+ }
+
@Test
public void getUsersCountDensityTest() {
final double expectedValue = 14.33;
diff --git a/src/test/java/org/heigit/ohsome/ohsomeapi/executor/ContributionsExecutorTest.java b/src/test/java/org/heigit/ohsome/ohsomeapi/executor/ContributionsExecutorTest.java
index 7cbf4d59..a3441d95 100644
--- a/src/test/java/org/heigit/ohsome/ohsomeapi/executor/ContributionsExecutorTest.java
+++ b/src/test/java/org/heigit/ohsome/ohsomeapi/executor/ContributionsExecutorTest.java
@@ -4,6 +4,7 @@
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+
import java.util.EnumSet;
import java.util.Set;
import java.util.function.Predicate;
@@ -45,7 +46,8 @@ public void contributionsFilter() {
@Test
public void contributionsFilterInvalid() {
- assertThrows(BadRequestException.class, () -> ExecutionUtils.contributionsFilter("doesnotexist"));
+ assertThrows(BadRequestException.class, () ->
+ ExecutionUtils.contributionsFilter("doesnotexist"));
}
diff --git a/src/test/java/org/heigit/ohsome/ohsomeapi/inputprocessing/GeometryBuilderTest.java b/src/test/java/org/heigit/ohsome/ohsomeapi/inputprocessing/GeometryBuilderTest.java
index 602dd21e..2f12ea59 100644
--- a/src/test/java/org/heigit/ohsome/ohsomeapi/inputprocessing/GeometryBuilderTest.java
+++ b/src/test/java/org/heigit/ohsome/ohsomeapi/inputprocessing/GeometryBuilderTest.java
@@ -124,7 +124,8 @@ public void createPolygonFromGeoJsonWithWrongGeomType() {
+ "{\"id\":\"Neuenheim\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[[[8.68465,"
+ "49.41769]]]}}]}";
InputProcessor inputProcessor = new InputProcessor(processingData);
- assertThrows(BadRequestException.class, () -> geomBuilder.createGeometryFromGeoJson(geoJson, inputProcessor));
+ assertThrows(BadRequestException.class, () ->
+ geomBuilder.createGeometryFromGeoJson(geoJson, inputProcessor));
}
@Test
@@ -136,14 +137,16 @@ public void createPolygonFromGeoJsonWithWrongFormat() {
+ "[8.2933214,49.4329125],[8.2936734,49.4330121],[8.2940745,49.4331354],"
+ "[8.2950478,49.4317345],[8.2944706,49.4313443]]]]}]}";
InputProcessor inputProcessor = new InputProcessor(processingData);
- assertThrows(BadRequestException.class, () -> geomBuilder.createGeometryFromGeoJson(geoJson, inputProcessor));
+ assertThrows(BadRequestException.class, () ->
+ geomBuilder.createGeometryFromGeoJson(geoJson, inputProcessor));
}
@Test
public void createGeometryFromInvalidInputGeoJson() {
String geoJson = "{\"type\": \"FeatureCollection\"}";
InputProcessor inputProcessor = new InputProcessor(processingData);
- assertThrows(BadRequestException.class, () -> geomBuilder.createGeometryFromGeoJson(geoJson, inputProcessor));
+ assertThrows(BadRequestException.class, () ->
+ geomBuilder.createGeometryFromGeoJson(geoJson, inputProcessor));
}
@Test
@@ -194,6 +197,7 @@ public void createGeometryFromMetadataGeoJson() {
@Test
public void createGeometryFromWrongMetadataGeoJson() {
String geoJson = "{\"type\":\"Polygon\",\"coordinates\":[Invalid-Input]}";
- assertThrows(RuntimeException.class, () ->geomBuilder.createGeometryFromMetadataGeoJson(geoJson));
+ assertThrows(RuntimeException.class, () ->
+ geomBuilder.createGeometryFromMetadataGeoJson(geoJson));
}
}