GeoToolsLayer extends FeatureSourceRetriever implements VectorLayer { @Transactional(readOnly = true) public Iterator<?> getElements(Filter filter, int offset, int maxResultSize) throws LayerException { FeatureSource<SimpleFeatureType, SimpleFeature> source = getFeatureSource(); try { if (source instanceof FeatureStore<?, ?>) { SimpleFeatureStore store = (SimpleFeatureStore) source; transactionSynchronization.synchTransaction(store); } Query query = new Query(); query.setFilter(filter); query.setMaxFeatures(maxResultSize > 0 ? maxResultSize : Integer.MAX_VALUE); query.setStartIndex(offset); FeatureCollection<SimpleFeatureType, SimpleFeature> fc = source.getFeatures(query); FeatureIterator<SimpleFeature> it = fc.features(); transactionSynchronization.addIterator(it); return new JavaIterator(it); } catch (Throwable t) { throw new LayerException(t, ExceptionCode.UNEXPECTED_PROBLEM); } }  @Override String getId(); @Api void setId(String id); @Api void setUrl(String url); @Api void setDbtype(String dbtype); @Api DataSource getDataSource(); @Api void setDataSource(DataSource dataSource); @Api void setParameters(List<Parameter> parameters); @Api void setCooldownTimeBetweenInitializationRetries(long cooldownTimeBetweenInitializationRetries); @Override CoordinateReferenceSystem getCrs(); @Api void setLayerInfo(VectorLayerInfo layerInfo); @Override VectorLayerInfo getLayerInfo(); @Override boolean isCreateCapable(); @Override boolean isUpdateCapable(); @Override boolean isDeleteCapable(); @Override @Deprecated void setDataStore(DataStore dataStore); @Override @Transactional(rollbackFor = { Throwable.class }) Object create(Object feature); @Override @Transactional(rollbackFor = { Throwable.class }) void delete(String featureId); @Override @Transactional(rollbackFor = { Throwable.class }) Object saveOrUpdate(Object feature); @Override Object read(String featureId); @Override Envelope getBounds(); @Override Envelope getBounds(Filter filter); @Transactional(readOnly = true) Iterator<?> getElements(Filter filter, int offset, int maxResultSize); @Override FeatureModel getFeatureModel(); @Override DataStore getDataStore(); @Override SimpleFeatureSource getFeatureSource();  }
@Test public void testGetElements() throws Exception { Iterator<?> it = layer.getElements(filter, 0, 0); int counter = 0; while (it.hasNext()) { it.next(); counter++; } Assert.assertEquals(198, counter); }