private void testVisitor( String aggregateAttribute, String aggregateVisitor, String[] groupByAttributes, Object[][] expectedResults) throws Exception { GroupByVisitor visitor = executeVisitor( featureCollection, aggregateAttribute, aggregateVisitor, groupByAttributes); checkResults(visitor.getResult(), expectedResults); }
private CalcResult countGranulesMatchingCalc(Filter filter, RasterManager manager) throws IOException { Query q = new Query(manager.getTypeName()); q.setFilter(filter); SimpleFeatureCollection lc = manager.getGranuleCatalog().getGranules(q); List<Expression> groupByExpressions = Arrays.asList((Expression) getLocationProperty(manager)); GroupByVisitor groupVisitor = new GroupByVisitor(Aggregate.COUNT, NilExpression.NIL, groupByExpressions, null); lc.accepts(groupVisitor, null); return groupVisitor.getResult(); }
groupByVisitors .stream() .map(visitor -> (Map<List<Object>, Object>) visitor.getResult().toMap()) .collect(Collectors.toList()); return new Results(
public void testSumAreaWithGroupBy() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("geom")); GroupByVisitor v = new GroupByVisitorBuilder() .withAggregateAttribute(ff.function("area2", p)) .withAggregateVisitor("SumArea") .withGroupByAttributes( Collections.singleton(aname("name")), dataStore.getSchema(tname("aggregate"))) .build(); dataStore.getFeatureSource(tname("aggregate")).accepts(Query.ALL, v, null); if (dataStore.getSupportedFunctions().containsKey(FilterFunction_area.NAME.getName())) { assertFalse(visited); } List groups = v.getResult().toList(); assertEquals(20.0, (Double) ((Object[]) groups.get(0))[1], 0.01); assertEquals(10.0, (Double) ((Object[]) groups.get(1))[1], 0.01); }
new String[] {"building_type"}); checkResults( visitorA.getResult(), new Object[][] { new Object[] {"SCHOOL", 30.0}, new String[] {"building_type"}); checkResults( visitorB.getResult(), new Object[][] { new Object[] {"SCHOOL", 57.5}, visitorA.getResult().merge(visitorB.getResult()), new Object[][] { new Object[] {"SCHOOL", 36.875},
new String[] {"building_type"}); checkResults( visitorA.getResult(), new Object[][] { new Object[] {"SCHOOL", 30.0}, new String[] {"building_type"}); checkResults( visitorB.getResult(), new Object[][] { new Object[] {"SCHOOL", 57.5}, visitorA.getResult().merge(visitorB.getResult()), new Object[][] { new Object[] {"SCHOOL", 36.875},
private List<Object[]> genericGroupByTestTest( Query query, Aggregate aggregateVisitor, Expression aggregateAttribute, boolean expectOptimized, Expression... groupByAttributes) throws IOException { ContentFeatureSource featureSource = dataStore.getFeatureSource(tname("buildings_group_by_tests")); GroupByVisitorBuilder visitorBuilder = new GroupByVisitorBuilder() .withAggregateAttribute(aggregateAttribute) .withAggregateVisitor(aggregateVisitor); for (Expression groupByAttribute : groupByAttributes) { visitorBuilder.withGroupByAttribute(groupByAttribute); } GroupByVisitor visitor = visitorBuilder.build(); featureSource.accepts(query, visitor, null); assertEquals(expectOptimized, visitor.wasOptimized()); assertEquals(!expectOptimized, visitor.wasVisited()); List<Object[]> value = visitor.getResult().toList(); assertNotNull(value); return value; }