/** * 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(); }
UniqueVisitor visitor = new UniqueVisitor(attribute); collection.accepts(visitor, null); TreeSet<Object> result = new TreeSet<>(visitor.getUnique()); return result;
public void testUniquePagination() throws IOException { UniqueVisitor uniqueVisitor = new UniqueVisitor(0, ft); uniqueVisitor.setPreserveOrder(true); uniqueVisitor.setStartIndex(0); uniqueVisitor.setMaxFeatures(1); fc.accepts(uniqueVisitor, null); Set value1 = uniqueVisitor.getResult().toSet(); assertEquals(1, value1.size()); assertEquals(1, value1.iterator().next()); uniqueVisitor.reset(); uniqueVisitor.setStartIndex(1); uniqueVisitor.setMaxFeatures(2); fc.accepts(uniqueVisitor, null); value1 = uniqueVisitor.getResult().toSet(); assertEquals(2, value1.size()); assertEquals(2, value1.iterator().next()); uniqueVisitor.reset(); uniqueVisitor.setStartIndex(2); uniqueVisitor.setMaxFeatures(2); fc.accepts(uniqueVisitor, null); value1 = uniqueVisitor.getResult().toSet(); assertEquals(1, value1.size()); assertEquals(3, value1.iterator().next()); uniqueVisitor.reset(); uniqueVisitor.setStartIndex(3); uniqueVisitor.setMaxFeatures(2); fc.accepts(uniqueVisitor, null);
private void initVisitor() { visitor = new UniqueVisitor(this.idFieldName); visitor.setStartIndex(currentVisitorStart); visitor.setMaxFeatures(STEP_LOAD); try { fc.accepts(visitor, new NullProgressListener()); visitorIterator = visitor.getUnique().iterator(); } catch (IOException e) { throw new RuntimeException(e); } }
UniqueVisitor original = (UniqueVisitor) visitor; Expression transformedExpression = transformer.transformExpression(original.getExpression()); UniqueVisitor transformedVisitor = new UniqueVisitor(transformedExpression); transformedVisitor.setMaxFeatures(original.getMaxFeatures()); transformedVisitor.setStartIndex(original.getStartIndex()); transformedVisitor.setPreserveOrder(original.isPreserveOrder()); delegateVisitor(transformedVisitor, progress); original.setValue(transformedVisitor.getResult().getValue()); } else { super.accepts(visitor, progress);
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 IllegalFilterException, IOException { UniqueVisitor uniqueVisitor = new UniqueVisitor(0, ft); fc.accepts(uniqueVisitor, null); UniqueVisitor uniqueVisitor2 = new UniqueVisitor(3, ft2); 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( uniqueVisitor.setValue(anotherSet); uniqueResult1 = uniqueVisitor.getResult(); assertEquals(anotherSet, uniqueResult1.toSet()); assertFalse(set.contains(6)); uniqueVisitor.reset(); empty.accepts(uniqueVisitor, null); assertEquals(CalcResult.NULL_RESULT, uniqueVisitor.getResult()); assertSame(uniqueResult2, uniqueVisitor.getResult().merge(uniqueResult2)); assertSame(uniqueResult2, uniqueResult2.merge(uniqueVisitor.getResult()));
public void testDelegateAccepts() throws Exception { SimpleFeatureTypeBuilder stb = new SimpleFeatureTypeBuilder(); stb.setName("test"); stb.add("foo", String.class); stb.add("bar", Integer.class); UniqueVisitor vis = new UniqueVisitor("bar"); SimpleFeatureCollection delegate = createMock(SimpleFeatureCollection.class); delegate.accepts(vis, null); expectLastCall().once(); replay(delegate); ReTypingFeatureCollection rtc = new ReTypingFeatureCollection(delegate, stb.buildFeatureType()); rtc.accepts(vis, null); verify(delegate); vis = new UniqueVisitor("baz"); SimpleFeatureIterator it = createNiceMock(SimpleFeatureIterator.class); replay(it); SimpleFeatureType ft = createNiceMock(SimpleFeatureType.class); replay(ft); delegate = createMock(SimpleFeatureCollection.class); expect(delegate.features()).andReturn(it).once(); expect(delegate.getSchema()).andReturn(ft).once(); replay(delegate); rtc = new ReTypingFeatureCollection(delegate, stb.buildFeatureType()); rtc.accepts(vis, null); verify(delegate); }
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 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()); }
progress.started(); UniqueVisitor uniqueCalc = (UniqueVisitor) visitor; Object unique = unique(uniqueCalc.getExpression()); uniqueCalc.setValue(unique); // use the optimized result isOptimized = true; progress.complete();
/** * Process UniqueVisitor with group on solr query * * @param query * @param visitor * @throws IOException */ private void handleUniqueVisitor(Query query, UniqueVisitor visitor) throws IOException { visitor.setValue(getUniqueScalarList(query, visitor)); } }
SimpleFeatureType ft = stb.buildFeatureType(); UniqueVisitor vis = new UniqueVisitor("bar"); verify(delegate); vis = new UniqueVisitor("geo"); SimpleFeatureIterator it = createNiceMock(SimpleFeatureIterator.class); replay(it);
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")); }
((UniqueVisitor) visitor).setValue(uniqueValues); } else if (MinVisitor.class.isInstance(visitor)) { Object lowest = uniqueValues.first();
int classNum, FeatureCollection<?, ?> featureCollection) throws IOException { UniqueVisitor uniqueVisit = new UniqueVisitor(getParameters().get(0)); featureCollection.accepts(uniqueVisit, new NullProgressListener()); List result = uniqueVisit.getResult().toList();
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()); }
/** * Extract the domain of a dimension as a set of unique values. * * <p>It retrieves a comma separated list of values as a Set of {@link String}. * * @return a comma separated list of values as a {@link String}. * @throws IOException */ Set extractDomain(final String attribute) throws IOException { Query query = new Query(typeName); query.setPropertyNames(Arrays.asList(attribute)); final UniqueVisitor visitor = new UniqueVisitor(attribute); granuleCatalog.computeAggregateFunction(query, visitor); return visitor.getUnique(); }
public @Test void handleUniqueVisitorNotIndexed() { testVisitor(new UniqueVisitor("ip"), Sets.newHashSet(1000, 2000, 3000)); }
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()); }