/** * Calculate unique (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the unique * @param expression Single Expression argument * @return An object containing the unique value of the attributes * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateUnique(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { UniqueVisitor uniqueVisitor = new UniqueVisitor(expression); collection.accepts(uniqueVisitor, null); return uniqueVisitor.getResult(); }
List result = uniqueVisit.getResult().toList();
if (progress.isCanceled()) return null; CalcResult calcResult = uniqueVisit.getResult(); if (calcResult == null) return null; List result = calcResult.toList();
public void testUniquePreserveOrder() throws IOException { UniqueVisitor uniqueVisitor = new UniqueVisitor(0, ft); uniqueVisitor.setPreserveOrder(true); fc.accepts(uniqueVisitor, null); Set value1 = uniqueVisitor.getResult().toSet(); assertEquals(1, value1.iterator().next()); uniqueVisitor.reset(); invfc.accepts(uniqueVisitor, null); value1 = uniqueVisitor.getResult().toSet(); assertEquals(3, value1.iterator().next()); }
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")); }
fc2.accepts(uniqueVisitor2, null); Set value1 = uniqueVisitor.getResult().toSet(); assertEquals(3, value1.size()); // 3 items in the set Object[] value2 = uniqueVisitor2.getResult().toArray(); assertEquals(2, value2.length); // 2 items in the set CalcResult uniqueResult1 = uniqueVisitor.getResult(); CalcResult uniqueResult2 = uniqueVisitor2.getResult(); CalcResult uniqueResult3 = uniqueResult1.merge(uniqueResult2); assertEquals( uniqueResult1 = uniqueVisitor.getResult(); assertEquals(anotherSet, uniqueResult1.toSet()); assertEquals(CalcResult.NULL_RESULT, uniqueVisitor.getResult()); assertSame(uniqueResult2, uniqueVisitor.getResult().merge(uniqueResult2)); assertSame(uniqueResult2, uniqueResult2.merge(uniqueVisitor.getResult()));
uniqueVisitor.setMaxFeatures(1); fc.accepts(uniqueVisitor, null); Set value1 = uniqueVisitor.getResult().toSet(); assertEquals(1, value1.size()); assertEquals(1, value1.iterator().next()); uniqueVisitor.setMaxFeatures(2); fc.accepts(uniqueVisitor, null); value1 = uniqueVisitor.getResult().toSet(); assertEquals(2, value1.size()); assertEquals(2, value1.iterator().next()); uniqueVisitor.setMaxFeatures(2); fc.accepts(uniqueVisitor, null); value1 = uniqueVisitor.getResult().toSet(); assertEquals(1, value1.size()); assertEquals(3, value1.iterator().next()); uniqueVisitor.setMaxFeatures(2); fc.accepts(uniqueVisitor, null); value1 = uniqueVisitor.getResult().toSet();
List uniqueValues = visitor.getResult().toList();
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")); }
public void testUniqueWithLimitOnVisitor() 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(0); 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("one", result.iterator().next()); }
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 testStoreChecksVisitorLimits() 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) { @Override public boolean hasLimits() { // forced to return true, to check that the JDBCDataStore // asks the visitor if it has limits, and if answered true // it ignores query limits return true; } }; v.setPreserveOrder(true); Query q = new Query(tname("ft1")); q.setMaxFeatures(1); 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(3, result.size()); assertEquals("one", result.iterator().next()); }
public void testUniqueWithLimitOffset() 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); 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()); }
/** * Calculate unique (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the unique * @param expression Single Expression argument * * @return An object containing the unique value of the attributes * * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateUnique(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { UniqueVisitor uniqueVisitor = new UniqueVisitor(expression); collection.accepts(uniqueVisitor, null); return uniqueVisitor.getResult(); }
/** * Calculate unique (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the unique * @param expression Single Expression argument * * @return An object containing the unique value of the attributes * * @throws IllegalFilterException * @throws IOException */ public static CalcResult calculateUnique(FeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { UniqueVisitor uniqueVisitor = new UniqueVisitor(expression); collection.accepts(uniqueVisitor, null); return uniqueVisitor.getResult(); }
transformedVisitor.setPreserveOrder(original.isPreserveOrder()); delegateVisitor(transformedVisitor, progress); original.setValue(transformedVisitor.getResult().getValue()); } else { super.accepts(visitor, progress);
List result = uniqueVisit.getResult().toList();
/** * Returns the unique values in colName in the database, pre-filtered with filter f (if not null) * @param colName * @param f If null, will not use filter * @return * @throws DaoException */ private Set<Object> getUniqueValues(String colName, Filter f) throws DaoException{ try { // get feature source FeatureSource contents = getFeatureSource(); // prep query Query query = getQuery(); if (f != null) { query.setFilter(f); } query.setPropertyNames(new String[]{colName}); UniqueVisitor visitor = new UniqueVisitor(colName); // get unique results FeatureCollection collection = contents.getFeatures(query); collection.accepts(visitor, null); CalcResult result = visitor.getResult(); Set<Object> results = result.toSet(); return results; }catch(Exception e){ throw new DaoException(e); } }
/** * Returns the unique values in colName in the database, pre-filtered with filter f (if not null) * @param colName * @param f If null, will not use filter * @return * @throws DaoException */ private Set<Object> getUniqueValues(String colName, Filter f) throws DaoException{ try { // get feature source FeatureSource contents = getFeatureSource(); // prep query Query query = getQuery(); if (f != null) { query.setFilter(f); } query.setPropertyNames(new String[]{colName}); UniqueVisitor visitor = new UniqueVisitor(colName); // get unique results FeatureCollection collection = contents.getFeatures(query); collection.accepts(visitor, null); CalcResult result = visitor.getResult(); Set<Object> results = result.toSet(); return results; }catch(Exception e){ throw new DaoException(e); } }
@DescribeResult(name = "result", description = "Feature collection with an attribute containing the unique values") public SimpleFeatureCollection execute( @DescribeParameter(name = "features", description = "Input feature collection") SimpleFeatureCollection features, @DescribeParameter(name = "attribute", description = "Attribute whose unique values are extracted") String attribute, ProgressListener progressListener) throws Exception { int attIndex = -1; List<AttributeDescriptor> atts = features.getSchema().getAttributeDescriptors(); for (int i = 0; i < atts.size(); i++) { if (atts.get(i).getLocalName().equals(attribute)) { attIndex = i; break; } } UniqueVisitor visitor = new UniqueVisitor(attIndex, features.getSchema()); features.accepts(visitor, progressListener); List uniqueValues = visitor.getResult().toList(); SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); tb.add("value", features.getSchema().getDescriptor(attIndex).getType().getBinding()); tb.setName("UniqueValue"); SimpleFeatureType ft = tb.buildFeatureType(); SimpleFeatureBuilder fb = new SimpleFeatureBuilder(ft); ListFeatureCollection result = new ListFeatureCollection(ft); for (Object value : uniqueValues) { fb.add(value); result.add(fb.buildFeature(null)); } return result; }