Skip to content

Commit

Permalink
reducing duplicated code
Browse files Browse the repository at this point in the history
implementing new method computeResult() which computes the results for all resources but the standard and /groupBy/boundary ones
  • Loading branch information
kowatsch committed Jun 8, 2018
1 parent 239b118 commit 6b64ea8
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ public static GroupByResponse executeCountLengthPerimeterAreaGroupByUser(
.aggregateBy((SerializableFunction<OSMEntitySnapshot, Integer>) f -> {
return f.getEntity().getUserId();
}).zerofillIndices(useridsInt);
result = exeUtils.computeKeyTagResult(requestResource, preResult);
result = exeUtils.computeResult(requestResource, preResult);
groupByResult = MapAggregatorByTimestampAndIndex.nest_IndexThenTime(result);
GroupByResult[] resultSet = new GroupByResult[groupByResult.size()];

Expand Down Expand Up @@ -319,29 +319,7 @@ public static GroupByResponse executeCountLengthPerimeterAreaGroupByTag(
return new ImmutablePair<>(new ImmutablePair<Integer, Integer>(-1, -1), f);
}).aggregateByTimestamp().aggregateBy(Pair::getKey).zerofillIndices(zeroFill)
.map(Pair::getValue);
switch (requestResource) {
case COUNT:
result = preResult.count();
break;
case LENGTH:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.lengthOf(snapshot.getGeometry());
});
break;
case PERIMETER:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
if (snapshot.getGeometry() instanceof Polygonal)
return Geo.lengthOf(snapshot.getGeometry().getBoundary());
else
return 0.0;
});
break;
case AREA:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.areaOf(snapshot.getGeometry());
});
break;
}
result = exeUtils.computeResult(requestResource, preResult);
groupByResult = MapAggregatorByTimestampAndIndex.nest_IndexThenTime(result);
GroupByResult[] resultSet = new GroupByResult[groupByResult.size()];
String groupByName = "";
Expand Down Expand Up @@ -409,27 +387,7 @@ public static GroupByResponse executeCountPerimeterAreaGroupByType(
.aggregateBy((SerializableFunction<OSMEntitySnapshot, OSMType>) f -> {
return f.getEntity().getType();
}).zerofillIndices(iP.getOsmTypes());
switch (requestResource) {
case COUNT:
result = preResult.count();
break;
case AREA:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.areaOf(snapshot.getGeometry());
});
break;
case PERIMETER:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
if (snapshot.getGeometry() instanceof Polygonal)
return Geo.lengthOf(snapshot.getGeometry().getBoundary());
else
return 0.0;
});
break;
default:
// should never reach this as requestResource is hard-coded in method call
break;
}
result = exeUtils.computeResult(requestResource, preResult);
groupByResult = MapAggregatorByTimestampAndIndex.nest_IndexThenTime(result);
GroupByResult[] resultSet = new GroupByResult[groupByResult.size()];
GeometryBuilder geomBuilder = iP.getGeomBuilder();
Expand Down Expand Up @@ -508,7 +466,7 @@ public static GroupByResponse executeCountLengthPerimeterAreaGroupByKey(
return res;
}).aggregateByTimestamp().aggregateBy(Pair::getKey).zerofillIndices(Arrays.asList(keysInt))
.map(Pair::getValue);
result = exeUtils.computeKeyTagResult(requestResource, preResult);
result = exeUtils.computeResult(requestResource, preResult);
groupByResult = MapAggregatorByTimestampAndIndex.nest_IndexThenTime(result);
GroupByResult[] resultSet = new GroupByResult[groupByResult.size()];
String groupByName = "";
Expand Down Expand Up @@ -644,29 +602,7 @@ else if (matches2)
return null;
}).zerofillIndices(
Arrays.asList(MatchType.MATCHESBOTH, MatchType.MATCHES1, MatchType.MATCHES2));
switch (requestResource) {
case COUNT:
result = preResult.count();
break;
case LENGTH:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.lengthOf(snapshot.getGeometry());
});
break;
case PERIMETER:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
if (snapshot.getGeometry() instanceof Polygonal)
return Geo.lengthOf(snapshot.getGeometry().getBoundary());
else
return 0.0;
});
break;
case AREA:
result = preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.areaOf(snapshot.getGeometry());
});
break;
}
result = exeUtils.computeResult(requestResource, preResult);
int resultSize = result.size();
Double[] value1 = new Double[resultSize / 3];
Double[] value2 = new Double[resultSize / 3];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,29 +271,37 @@ public SortedMap<OSHDBTimestampAndIndex<Pair<Integer, Boolean>>, Integer> comput
return result;
}

public SortedMap<OSHDBTimestampAndIndex<Integer>, ? extends Number> computeKeyTagResult(
/**
* Computes the result depending on the <code>RequestResource</code> using a
* <code>MapAggregator</code> object as input and returning a <code>SortedMap</code>.
*/
@SuppressWarnings({"unchecked"}) // intentionally suppressed
public <K extends OSHDBTimestampAndIndex<?>, V extends Number> SortedMap<K, V> computeResult(
RequestResource requestResource,
MapAggregator<OSHDBTimestampAndIndex<Integer>, OSMEntitySnapshot> preResult)
MapAggregator<?, OSMEntitySnapshot> preResult)
throws Exception {

switch (requestResource) {
case COUNT:
return preResult.count();
return (SortedMap<K, V>) preResult.count();
case LENGTH:
return preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.lengthOf(snapshot.getGeometry());
});
return (SortedMap<K, V>) preResult
.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.lengthOf(snapshot.getGeometry());
});
case PERIMETER:
return preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
if (snapshot.getGeometry() instanceof Polygonal)
return Geo.lengthOf(snapshot.getGeometry().getBoundary());
else
return 0.0;
});
return (SortedMap<K, V>) preResult
.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
if (snapshot.getGeometry() instanceof Polygonal)
return Geo.lengthOf(snapshot.getGeometry().getBoundary());
else
return 0.0;
});
case AREA:
return preResult.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.areaOf(snapshot.getGeometry());
});
return (SortedMap<K, V>) preResult
.sum((SerializableFunction<OSMEntitySnapshot, Number>) snapshot -> {
return Geo.areaOf(snapshot.getGeometry());
});
default:
return null;
}
Expand Down

0 comments on commit 6b64ea8

Please sign in to comment.