/** * Calculate sum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the sum * @param expression Single Expression argument * @return An object containing the sum value of the attributes * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateSum(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { SumVisitor sumVisitor = new SumVisitor(expression); collection.accepts(sumVisitor, null); return sumVisitor.getResult(); }
public void setValue(Object newSum) { strategy = createStrategy(newSum.getClass()); strategy.add(newSum); }
public void visit(SimpleFeature feature) { visit((Feature) feature); }
public void testSum() throws IllegalFilterException, IOException { SumVisitor sumVisitor = new SumVisitor(0, ft); SumVisitor sumVisitor2 = new SumVisitor(3, ft2); int value1 = sumVisitor.getResult().toInt(); assertEquals(6, value1); double value2 = sumVisitor2.getResult().toDouble(); assertEquals((double) 7.5, value2, 0); CalcResult sumResult1 = sumVisitor.getResult(); CalcResult sumResult2 = sumVisitor2.getResult(); CalcResult sumResult3 = sumResult1.merge(sumResult2); assertEquals((double) 13.5, sumResult3.toDouble(), 0); sumVisitor2.setValue(Integer.valueOf(-42)); CalcResult sumResult4 = sumVisitor2.getResult(); CalcResult sumResult5 = sumResult3.merge(sumResult4); assertEquals(-28.5, sumResult5.toDouble(), 0); assertEquals(-42.0, sumResult4.toDouble(), 0); sumVisitor.reset(); empty.accepts(sumVisitor, null); assertEquals(CalcResult.NULL_RESULT, sumVisitor.getResult()); assertSame(sumResult2, sumVisitor.getResult().merge(sumResult2)); assertSame(sumResult2, sumResult2.merge(sumVisitor.getResult()));
@Override public FeatureCalc create(Expression expr) { return new SumVisitor(expr); }
public void testSum() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); SumVisitor v = new MySumVisitor(p); dataStore.getFeatureSource(tname("ft1")).accepts(Query.ALL, v, null); assertFalse(visited); assertEquals(3.3, v.getResult().toDouble(), 0.01); }
progress.started(); SumVisitor sumCalc = (SumVisitor) visitor; Object sum = sum(sumCalc.getExpression()); sumCalc.setValue(sum); // use the optimized result isOptimized = true; progress.complete();
@Override protected FeatureCalc createVisitor(int attributeTypeIndex, SimpleFeatureType type) { return new SumVisitor(attributeTypeIndex, type); } }
public void testSumWithFilter() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); SumVisitor v = new MySumVisitor(p); Filter f = ff.less(ff.property(aname("doubleProperty")), ff.literal(2)); Query q = new Query(tname("ft1"), f); dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null); assertFalse(visited); assertEquals(1.1, v.getResult().toDouble(), 0.01); }
/** * Calculate sum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the sum * @param expression Single Expression argument * * @return An object containing the sum value of the attributes * * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateSum(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { SumVisitor sumVisitor = new SumVisitor(expression); collection.accepts(sumVisitor, null); return sumVisitor.getResult(); }
@Override public FeatureCalc create(Expression expr) { // if expr is <property> wrap it with area2 function, if not, it's already wrapped if (expr instanceof FunctionExpression) { return new SumVisitor(expr); } FilterFactory factory = CommonFactoryFinder.getFilterFactory(null); return new SumVisitor(factory.function("area2", expr)); }
public void testSumWithLimitOffset() throws Exception { if (!dataStore.getSQLDialect().isLimitOffsetSupported()) { return; } FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); SumVisitor v = new MySumVisitor(p); Query q = new Query(tname("ft1")); q.setStartIndex(0); q.setMaxFeatures(2); dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null); assertFalse(visited); assertEquals(1.1, v.getResult().toDouble(), 0.01); }
public void visit(Feature feature) { Object value = expr.evaluate(feature); if (value != null) { if (strategy == null) { strategy = createStrategy(value.getClass()); } strategy.add(value); } }
public void visit(SimpleFeature feature) { super.visit(feature); visited = true; } }
public void testCountSumMerge() throws IllegalFilterException, IOException { CountVisitor countVisitor = new CountVisitor(); fc2.accepts(countVisitor, null); // count = 2 SumVisitor sumVisitor = new SumVisitor(3, ft2); fc2.accepts(sumVisitor, null); // sum = 7.5 CalcResult countResult = countVisitor.getResult(); CalcResult sumResult = sumVisitor.getResult(); CalcResult averageResult1 = countResult.merge(sumResult); CalcResult averageResult2 = sumResult.merge(countResult); // both average results were correct? assertEquals((double) 3.75, averageResult1.toDouble(), 0); assertEquals((double) 3.75, averageResult2.toDouble(), 0); // neither sum nor count was destroyed? assertEquals(2, countResult.toInt()); assertEquals((double) 7.5, sumResult.toDouble(), 0); }
CommonFactoryFinder.getFilterFactory(null).property(aggAttribute)); } else if (function == AggregationFunction.Sum) { calc = new SumVisitor(attIndex, features.getSchema()); } else if (function == AggregationFunction.SumArea) { calc = new SumAreaVisitor(attIndex, features.getSchema());
public SumVisitor(int attributeTypeIndex, SimpleFeatureType type) throws IllegalFilterException { FilterFactory factory = CommonFactoryFinder.getFilterFactory(null); AttributeDescriptor attributeType = type.getDescriptor(attributeTypeIndex); expr = factory.property(attributeType.getLocalName()); createStrategy(attributeType.getType().getBinding()); }
public void visit(Feature feature) { super.visit(feature); visited = true; }
/** * Calculate sum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the sum * @param expression Single Expression argument * * @return An object containing the sum value of the attributes * * @throws IllegalFilterException * @throws IOException */ public static CalcResult calculateSum(FeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { SumVisitor sumVisitor = new SumVisitor(expression); collection.accepts(sumVisitor, null); return sumVisitor.getResult(); }
listLexer lexer = new listLexer(new ANTLRInputStream("[1, 2, 3]")); listParser parser = new listParser(new CommonTokenStream(lexer)); Integer sum = new SumVisitor().visit(parser.list()); System.out.println("sum=" + sum);