/** * Calculate maximum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the maximum * @param expression Single Expression argument * @return An object containing the maximum value of the attributes * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateMax(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { MaxVisitor maxVisitor = new MaxVisitor(expression); collection.accepts(maxVisitor, null); return maxVisitor.getResult(); }
public void testBadMerge() throws IllegalFilterException, IOException { // count + max = boom! CountVisitor countVisitor = new CountVisitor(); countVisitor.setValue(8); CalcResult countResult = countVisitor.getResult(); MaxVisitor maxVisitor = new MaxVisitor((Expression) null); maxVisitor.setValue(new Double(99)); CalcResult maxResult = maxVisitor.getResult(); try { CalcResult boomResult = maxResult.merge(countResult); fail(); // merge should throw an exception } catch (Exception e) { assertEquals("Parameter is not a compatible type", e.getMessage()); } }
/** * Visitor function, which looks at each feature and finds the maximum. * * @param feature the feature to be visited */ public void visit(SimpleFeature feature) { visit((org.opengis.feature.Feature) feature); }
@Test public void testMaxVisitorDelegation() throws SchemaException, IOException { MaxVisitor visitor = new MaxVisitor(CommonFactoryFinder.getFilterFactory2().property("value")); assertOptimalVisit(visitor); }
MaxVisitor original = (MaxVisitor) visitor; Expression transformedExpression = transformer.transformExpression(original.getExpression()); MaxVisitor transformedVisitor = new MaxVisitor(transformedExpression); delegateVisitor(transformedVisitor, progress); original.setValue(transformedVisitor.getResult().getValue()); } else if (visitor instanceof UniqueVisitor) { UniqueVisitor original = (UniqueVisitor) visitor;
MaxVisitor maxVisitor = new MaxVisitor(0, ft); MaxVisitor maxVisitor2 = new MaxVisitor(3, ft2); int value1 = maxVisitor.getResult().toInt(); assertEquals(3, value1); double value2 = maxVisitor2.getResult().toDouble(); assertEquals((double) 4.5, value2, 0); CalcResult maxResult1 = (MaxResult) maxVisitor.getResult(); CalcResult maxResult2 = (MaxResult) maxVisitor2.getResult(); CalcResult maxResult3 = (MaxResult) maxResult1.merge(maxResult2); assertEquals((double) 4.5, maxResult3.toDouble(), 0); maxVisitor.setValue(new Double(544)); maxResult1 = maxVisitor.getResult(); maxResult7 = maxResult7.merge(maxResult1); assertEquals(544, maxResult7.toDouble(), 0); maxVisitor.setValue(Long.valueOf(6453)); maxResult1 = maxVisitor.getResult(); maxResult7 = maxResult7.merge(maxResult1); assertEquals(6453, maxResult7.toDouble(), 0); assertEquals(6453, maxResult7.toInt()); maxVisitor.reset(); empty.accepts(maxVisitor, null); assertEquals(CalcResult.NULL_RESULT, maxVisitor.getResult());
final MaxVisitor maxVisitor = new MaxVisitor(attribute); granuleCatalog.computeAggregateFunction(query, maxVisitor); max = maxVisitor.getMax(); MinVisitor minVisitor = new MinVisitor(attribute); granuleCatalog.computeAggregateFunction(query, minVisitor);
(Collection<String>) maxVisitor.getExpression().accept(filter, null); int acceptedCount = 0; for (final String attr : attrs) { for (final InternalDataStatistics<SimpleFeature, ?, ?> stat : reader.getStatsFor(attr)) { if (stat instanceof FeatureTimeRangeStatistics) { maxVisitor.setValue( reader.convertToType(attr, ((FeatureTimeRangeStatistics) stat).getMaxTime())); acceptedCount++; } else if (stat instanceof FeatureNumericRangeStatistics) { maxVisitor.setValue( reader.convertToType(attr, ((FeatureNumericRangeStatistics) stat).getMax())); acceptedCount++;
public void testMax() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); MaxVisitor v = new MyMaxVisitor(p); dataStore.getFeatureSource(tname("ft1")).accepts(Query.ALL, v, null); assertFalse(visited); assertEquals(2.2, v.getResult().toDouble(), 0.01); }
List<Expression> expressions = maxVisitor.getExpressions(); if (expressions.size() != 1 || !(expressions.get(0) instanceof PropertyName)) { return false; maxVisitor.setValue(propertyName.evaluate(reader.next()));
@Override public void setValue(Object result) { super.setValue(result); this.oldValue=null; this.targetFeature=null; }
@Override public FeatureCalc create(Expression aggregateAttribute) { return new MaxVisitor(aggregateAttribute); }
@Override public Object getDefaultValue( ResourceInfo resource, String dimensionName, DimensionInfo dimension, Class clz) { final MaxVisitor max = new MaxVisitor(dimension.getAttribute()); CalcResult res = getCalculatedResult((FeatureTypeInfo) resource, dimension, max); if (res.equals(CalcResult.NULL_RESULT)) { return null; } else { return Converters.convert(max.getMax(), clz); } } }
progress.started(); MaxVisitor maxCalc = (MaxVisitor) visitor; Object max = max(maxCalc.getExpression()); maxCalc.setValue(max); // use the optimized result isOptimized = true; progress.complete();
public void testMaxWithFilter() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); MaxVisitor v = new MyMaxVisitor(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); }
} else if (MaxVisitor.class.isInstance(visitor)) { Object highest = uniqueValues.last(); ((MaxVisitor) visitor).setValue(highest); } else if (NearestVisitor.class.isInstance(visitor)) { NearestVisitor ne = (NearestVisitor) visitor;
globalMin = (Comparable) minVisit.getResult().getValue(); MaxVisitor maxVisit = new MaxVisitor(getParameters().get(0)); featureCollection.accepts(maxVisit, progress); if (progress.isCanceled()) return null; globalMax = (Comparable) maxVisit.getResult().getValue();
/** * @param metadataName * @param attributeName * @return * @throws IOException */ FeatureCalc createExtremaQuery(String metadataName, String attributeName) throws IOException { final Query query = new Query(typeName); query.setPropertyNames(Arrays.asList(attributeName)); final FeatureCalc visitor = metadataName.toLowerCase().endsWith("maximum") ? new MaxVisitor(attributeName) : new MinVisitor(attributeName); granuleCatalog.computeAggregateFunction(query, visitor); return visitor; }
final MaxVisitor max = new MaxVisitor(time.getAttribute()); collection.accepts(max, null); result.add((Date) max.getMax());
public void testMaxWithLimitOffset() throws Exception { if (!dataStore.getSQLDialect().isLimitOffsetSupported()) { return; } FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); MaxVisitor v = new MyMaxVisitor(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); }