@Override public FeatureCalc create(Expression aggregateAttribute) { return new MinVisitor(aggregateAttribute); }
@Test public void testCoverageViewGranuleSourceAggregation() throws Exception { final String VIEW_NAME = "viewAggregate"; CoverageInfo info = buildHeterogeneousResolutionView( VIEW_NAME, cv -> { cv.setSelectedResolution(SelectedResolution.BEST); }, "B02", "B03", "B04", "B01"); StructuredGridCoverage2DReader reader = (StructuredGridCoverage2DReader) info.getGridCoverageReader(null, null); GranuleSource source = reader.getGranules(VIEW_NAME, true); Query query = new Query(VIEW_NAME); // used to throw exception here SimpleFeatureCollection granules = source.getGranules(query); MinVisitor visitor = new MinVisitor("location"); granules.accepts(visitor, null); assertEquals("20170410T103021026Z_fullres_CC2.1989_T32TMT_B01.tif", visitor.getMin()); }
/** * Calculate minimum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the minimum * @param expression Single Expression argument * @return An object containing the minimum value of the attributes * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateMin(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { MinVisitor minVisitor = new MinVisitor(expression); collection.accepts(minVisitor, null); return minVisitor.getResult(); }
/** * @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; }
private Object findDefaultValue(Query query, String attribute) { FeatureCalc aggFunc; switch (NetCDFUtilities.getParameterBehaviour(attribute)) { case MAX: aggFunc = new MaxVisitor(attribute); break; case MIN: aggFunc = new MinVisitor(attribute); break; default: return null; } try { request.source.reader.getCatalog().computeAggregateFunction(query, aggFunc); return aggFunc.getResult().getValue(); } catch (IOException e) { LOGGER.log(Level.WARNING, e.getMessage(), e); return null; } }
Comparable globalMax; try { MinVisitor minVisit = new MinVisitor(getParameters().get(0)); if (progress == null) progress = new NullProgressListener(); featureCollection.accepts(minVisit, progress);
calc = new MedianVisitor(attIndex, features.getSchema()); } else if (function == AggregationFunction.Min) { calc = new MinVisitor(attIndex, features.getSchema()); } else if (function == AggregationFunction.StdDev) { calc =
granuleCatalog.computeAggregateFunction(query, maxVisitor); max = maxVisitor.getMax(); MinVisitor minVisitor = new MinVisitor(attribute); granuleCatalog.computeAggregateFunction(query, minVisitor); min = minVisitor.getMin();
Filter aboveFilter = ff.greater(ff.property(attribute), ff.literal(targetValue)); qAbove.setFilter(ff.and(query.getFilter(), aboveFilter)); MinVisitor min = new MinVisitor(attribute); handleVisitor(qAbove, min); Comparable minAbove = (Comparable) min.getResult().getValue();
/** * Calculate minimum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the minimum * @param expression Single Expression argument * * @return An object containing the minimum value of the attributes * * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateMin(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { MinVisitor minVisitor = new MinVisitor(expression); collection.accepts(minVisitor, null); return minVisitor.getResult(); }
/** * Calculate minimum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the minimum * @param expression Single Expression argument * * @return An object containing the minimum value of the attributes * * @throws IllegalFilterException * @throws IOException */ public static CalcResult calculateMin(FeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { MinVisitor minVisitor = new MinVisitor(expression); collection.accepts(minVisitor, null); return minVisitor.getResult(); }
public void testMin() throws IllegalFilterException, IOException { MinVisitor minVisitor = new MinVisitor(0, ft); fc.accepts(minVisitor, null); MinVisitor minVisitor2 = new MinVisitor(0, ft2); fc2.accepts(minVisitor2, null);
@Override public Object getDefaultValue( ResourceInfo resource, String dimensionName, DimensionInfo dimension, Class clz) { final MinVisitor min = new MinVisitor(dimension.getAttribute()); CalcResult res = getCalculatedResult((FeatureTypeInfo) resource, dimension, min); if (res.equals(CalcResult.NULL_RESULT)) { return null; } else { return Converters.convert(min.getMin(), clz); } } }
/** * @param metadataName * @param attributeName * @return * @throws IOException */ private FeatureCalc createExtremaQuery(String metadataName, String attributeName) throws IOException { final Query query = new Query(rasterManager.granuleCatalog.getType().getTypeName()); query.setPropertyNames(Arrays.asList(attributeName)); final FeatureCalc visitor= metadataName.toLowerCase().endsWith("maximum")? new MaxVisitor(attributeName):new MinVisitor(attributeName); rasterManager.granuleCatalog.computeAggregateFunction(query, visitor); return visitor; }
Expression transformedExpression = transformer.transformExpression(original.getExpression()); MinVisitor transformedVisitor = new MinVisitor(transformedExpression); delegateVisitor(transformedVisitor, progress); original.setValue(transformedVisitor.getResult().getValue());
public @Test void handleMinVisitorNotIndexed() { testVisitor(new MinVisitor("ip"), Integer.valueOf(1000)); }
private Object findDefaultValue(Query query, String attribute) { FeatureCalc aggFunc; switch (NetCDFUtilities.getParameterBehaviour(attribute)) { case MAX: aggFunc = new MaxVisitor(attribute); break; case MIN: aggFunc = new MinVisitor(attribute); break; default: return null; } try { request.source.reader.getCatalog().computeAggregateFunction(query, aggFunc); return aggFunc.getResult().getValue(); } catch (IOException e) { LOGGER.log(Level.WARNING, e.getMessage(), e); return null; } }
/** * @see GeogigFeatureVisitorHandler */ public @Test void handleMinVisitorMaterializedAttribute() { NodeRef typeRef = pointsSource.delegate.getTypeRef(); createIndex(typeRef, Collections.singletonList("ip")); testVisitor(new MinVisitor("ip"), Integer.valueOf(1000)); }
private FeatureCalc getFeatureCalcForStrategy( DimensionDefaultValueSelectionStrategy delegateStrategy, DimensionDescriptor dd) { String sa = dd.getStartAttribute(); String ea = dd.getEndAttribute(); if (delegateStrategy instanceof CoverageMaximumValueSelectionStrategyImpl) { if (ea != null) { return new MaxVisitor(ea); } else { return new MaxVisitor(sa); } } else if (delegateStrategy instanceof CoverageMinimumValueSelectionStrategyImpl) { return new MinVisitor(sa); } else if (delegateStrategy instanceof CoverageNearestValueSelectionStrategyImpl) { CoverageNearestValueSelectionStrategyImpl impl = (CoverageNearestValueSelectionStrategyImpl) delegateStrategy; Object targetValue = impl.getTargetValue(); return new NearestVisitor(ff.property(sa), targetValue); } else { throw new ServiceException( "Don't konw how to restrict the domain for strategy " + delegateStrategy); } }
protected void updateAttributeStats(DataAttribute attribute) throws IOException { FeatureTypeInfo featureType = GeoServerApplication.get().getCatalog().getFeatureType(featureTypeId); FeatureSource<?, ?> fs = featureType.getFeatureSource(null, null); // check we can compute min and max PropertyDescriptor pd = fs.getSchema().getDescriptor(attribute.getName()); Class<?> binding = pd.getType().getBinding(); if (pd == null || !Comparable.class.isAssignableFrom(binding) || Geometry.class.isAssignableFrom(binding)) { return; } // grab the feature collection and run the min/max visitors (this will move the // query to the dbms in case of such data source) Query q = new Query(); q.setPropertyNames(new String[] {attribute.getName()}); FeatureCollection<?, ?> fc = fs.getFeatures(q); MinVisitor minVisitor = new MinVisitor(attribute.getName()); MaxVisitor maxVisitor = new MaxVisitor(attribute.getName()); fc.accepts(minVisitor, null); fc.accepts(maxVisitor, null); Object min = minVisitor.getResult().getValue(); attribute.setMin(Converters.convert(min, String.class)); Object max = maxVisitor.getResult().getValue(); attribute.setMax(Converters.convert(max, String.class)); }