Package org.geotools.data
Class FilteringFeatureReader<T extends FeatureType,F extends Feature>
- Object
-
- FilteringFeatureReader<T,F>
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,DelegatingFeatureReader<T,F>
,FeatureReader<T,F>
- Direct Known Subclasses:
FilteringSimpleFeatureReader
public class FilteringFeatureReader<T extends FeatureType,F extends Feature> extends Object implements DelegatingFeatureReader<T,F>
Basic support for a FeatureReaderthat does filtering. I think that filtering should perhaps be done in the AttributeReader. I'm still having a bit of trouble with the split between attributeReader and featureReader as to where the hooks for advanced processing like filtering should take place. See my note on hasNext(), as the method is currently broken and there are more optimizations that could take place if we had a FilteringAttributeReader. So this class may go, but I thought I'd put the ideas into code. Jody here - changed hasNext() to peek as required.
- Author:
- Chris Holmes
-
-
Field Summary
Fields Modifier and Type Field Description protected FeatureReader<T,F>
featureReader
protected Filter
filter
protected F
next
-
Constructor Summary
Constructors Constructor Description FilteringFeatureReader(FeatureReader<T,F> featureReader, Filter filter)
Creates a new instance of AbstractFeatureReader
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Release the underlying resources associated with this stream.FeatureReader<T,F>
getDelegate()
T
getFeatureType()
Return the FeatureType this reader has been configured to create.boolean
hasNext()
Query for additional content.F
next()
Reads the next Feature in the FeatureReader.
-
-
-
Field Detail
-
featureReader
protected final FeatureReader<T extends FeatureType,F extends Feature> featureReader
-
filter
protected final Filter filter
-
-
Constructor Detail
-
FilteringFeatureReader
public FilteringFeatureReader(FeatureReader<T,F> featureReader, Filter filter)
Creates a new instance of AbstractFeatureReaderPlease don't call this method with Filter.INCLUDE or Filter.EXCLUDE (consider not filtering and EmptyFeatureReader instead)
- Parameters:
featureReader
- FeatureReaderbeing filtered filter
- Filter used to limit the results of featureReader
-
-
Method Detail
-
getDelegate
public FeatureReader<T,F> getDelegate()
- Specified by:
getDelegate
in interfaceDelegatingFeatureReader<T extends FeatureType,F extends Feature>
- Returns:
- THe delegate reader.
-
next
public F next() throws IOException, IllegalAttributeException, NoSuchElementException
Description copied from interface:FeatureReader
Reads the next Feature in the FeatureReader.- Specified by:
next
in interfaceFeatureReader<T extends FeatureType,F extends Feature>
- Returns:
- The next feature in the reader.
- Throws:
IOException
- If an error occurs reading the Feature.NoSuchElementException
- If there are no more Features in the Reader.IllegalAttributeException
-
close
public void close() throws IOException
Description copied from interface:FeatureReader
Release the underlying resources associated with this stream.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceFeatureReader<T extends FeatureType,F extends Feature>
- Throws:
IOException
- if an I/O error occurs
-
getFeatureType
public T getFeatureType()
Description copied from interface:FeatureReader
Return the FeatureType this reader has been configured to create.- Specified by:
getFeatureType
in interfaceFeatureReader<T extends FeatureType,F extends Feature>
- Returns:
- the FeatureType of the Features this FeatureReader will create.
-
hasNext
public boolean hasNext() throws IOException
Query for additional content.This class will peek ahead to see if there is additional content.
Chris has pointed out that we could make use of AttributeReader based filtering:
"Also doing things in the Attribute Reader would allow us to do the smart filtering, only looking at the attributes needed for comparison, whereas doing filtering here means we have to create an entire feature each time."- Specified by:
hasNext
in interfaceFeatureReader<T extends FeatureType,F extends Feature>
- Returns:
true
if we have additional content- Throws:
IOException
- If the reader we are filtering encounters a problemDataSourceException
- See IOException
-
-