public void testUnique() throws Exception {
    FilterFactory ff = dataStore.getFilterFactory();
    PropertyName p = ff.property(aname("stringProperty"));

    UniqueVisitor v = new MyUniqueVisitor(p);
    dataStore.getFeatureSource(tname("ft1")).accepts(Query.ALL, v, null);
    assertFalse(visited);
    Set result = v.getResult().toSet();
    assertEquals(3, result.size());
    assertTrue(result.contains("zero"));
    assertTrue(result.contains("one"));
    assertTrue(result.contains("two"));
  }
  public void testUniqueWithLimitOffset() throws Exception {
    FilterFactory ff = dataStore.getFilterFactory();
    PropertyName p = ff.property(aname("stringProperty"));

    UniqueVisitor v = new MyUniqueVisitor(p);
    Query q = new Query(tname("ft1"));
    q.setStartIndex(0);
    q.setMaxFeatures(2);
    dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null);
    assertFalse(visited);
    Set result = v.getResult().toSet();
    assertEquals(2, result.size());
  }
  public void testUniqueWithFilter() throws Exception {
    FilterFactory ff = dataStore.getFilterFactory();
    PropertyName p = ff.property(aname("stringProperty"));

    UniqueVisitor v = new MyUniqueVisitor(p);
    Filter f = ff.greater(ff.property(aname("doubleProperty")), ff.literal(1));
    Query q = new Query(tname("ft1"), f);
    dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null);
    assertFalse(visited);
    Set result = v.getResult().toSet();
    assertEquals(2, result.size());
    assertTrue(result.contains("one"));
    assertTrue(result.contains("two"));
  }
Ejemplo n.º 4
0
  /**
   * Returns the list of elevation values for the specified typeInfo based on the dimension
   * representation: all values for {@link DimensionPresentation#LIST}, otherwise min and max
   *
   * @param typeInfo
   * @return
   * @throws IOException
   */
  public TreeSet<Double> getFeatureTypeElevations(FeatureTypeInfo typeInfo) throws IOException {
    // grab the time metadata
    DimensionInfo elevation =
        typeInfo.getMetadata().get(ResourceInfo.ELEVATION, DimensionInfo.class);
    if (elevation == null || !elevation.isEnabled()) {
      throw new ServiceException(
          "Layer " + typeInfo.getPrefixedName() + " does not have elevation support enabled");
    }

    FeatureCollection collection = getDimensionCollection(typeInfo, elevation);

    TreeSet<Double> result = new TreeSet<Double>();
    if (elevation.getPresentation() == DimensionPresentation.LIST
        || (elevation.getPresentation() == DimensionPresentation.DISCRETE_INTERVAL
            && elevation.getResolution() == null)) {
      final UniqueVisitor visitor = new UniqueVisitor(elevation.getAttribute());
      collection.accepts(visitor, null);

      @SuppressWarnings("unchecked")
      Set<Object> values = visitor.getUnique();
      if (values.size() <= 0) {
        result = null;
      } else {
        for (Object value : values) {
          result.add(((Number) value).doubleValue());
        }
      }
    } else {
      final MinVisitor min = new MinVisitor(elevation.getAttribute());
      collection.accepts(min, null);
      // check calcresult first to avoid potential IllegalStateException if no features are in
      // collection
      CalcResult calcResult = min.getResult();
      if (calcResult != CalcResult.NULL_RESULT) {
        result.add(((Number) min.getMin()).doubleValue());
        final MaxVisitor max = new MaxVisitor(elevation.getAttribute());
        collection.accepts(max, null);
        result.add(((Number) max.getMax()).doubleValue());
      }
    }

    return result;
  }
Ejemplo n.º 5
0
  /**
   * Returns the list of time values for the specified typeInfo based on the dimension
   * representation: all values for {@link DimensionPresentation#LIST}, otherwise min and max
   *
   * @param typeInfo
   * @return
   * @throws IOException
   */
  public TreeSet<Date> getFeatureTypeTimes(FeatureTypeInfo typeInfo) throws IOException {
    // grab the time metadata
    DimensionInfo time = typeInfo.getMetadata().get(ResourceInfo.TIME, DimensionInfo.class);
    if (time == null || !time.isEnabled()) {
      throw new ServiceException(
          "Layer " + typeInfo.getPrefixedName() + " does not have time support enabled");
    }

    FeatureCollection collection = getDimensionCollection(typeInfo, time);

    TreeSet<Date> result = new TreeSet<Date>();
    if (time.getPresentation() == DimensionPresentation.LIST) {
      final UniqueVisitor visitor = new UniqueVisitor(time.getAttribute());
      collection.accepts(visitor, null);

      @SuppressWarnings("unchecked")
      Set<Date> values = visitor.getUnique();
      if (values.size() <= 0) {
        result = null;
      } else {
        // we might get null values out of the visitor, strip them
        values.remove(null);
        result.addAll(values);
      }
    } else {
      final MinVisitor min = new MinVisitor(time.getAttribute());
      collection.accepts(min, null);
      CalcResult minResult = min.getResult();
      // check calcresult first to avoid potential IllegalStateException if no features are in
      // collection
      if (minResult != CalcResult.NULL_RESULT) {
        result.add((Date) min.getMin());
        final MaxVisitor max = new MaxVisitor(time.getAttribute());
        collection.accepts(max, null);
        result.add((Date) max.getMax());
      }
    }

    return result;
  }
  public void testUniqueWithLimitOffsetOnVisitor() throws Exception {

    if (!dataStore.getSQLDialect().isLimitOffsetSupported()
        || !dataStore.getSQLDialect().isAggregatedSortSupported("distinct")) {
      return;
    }

    FilterFactory ff = dataStore.getFilterFactory();
    PropertyName p = ff.property(aname("stringProperty"));

    UniqueVisitor v = new MyUniqueVisitor(p);
    v.setPreserveOrder(true);
    v.setStartIndex(1);
    v.setMaxFeatures(2);
    Query q = new Query(tname("ft1"));
    q.setSortBy(new SortBy[] {new SortByImpl(p, SortOrder.ASCENDING)});
    dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null);
    assertFalse(visited);
    Set result = v.getResult().toSet();
    assertEquals(2, result.size());
    assertEquals("two", result.iterator().next());
  }
 public void visit(SimpleFeature feature) {
   super.visit(feature);
   visited = true;
 }