org.geotools.data
Class FilteringFeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>

java.lang.Object
  extended by org.geotools.data.FilteringFeatureReader<T,F>
All Implemented Interfaces:
DelegatingFeatureReader<T,F>, FeatureReader<T,F>

public class FilteringFeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>
extends java.lang.Object
implements DelegatingFeatureReader<T,F>

Basic support for a FeatureReader that 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.

Version:
$Id: FilteringFeatureReader.java 31406 2008-09-05 02:11:38Z jdeolive $
Author:
Chris Holmes

Field Summary
protected  FeatureReader<T,F> featureReader
           
protected  org.opengis.filter.Filter filter
           
protected  F next
           
 
Constructor Summary
FilteringFeatureReader(FeatureReader<T,F> featureReader, org.opengis.filter.Filter filter)
          Creates a new instance of AbstractFeatureReader
 
Method Summary
 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

featureReader

protected final FeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature> featureReader

filter

protected final org.opengis.filter.Filter filter

next

protected F extends org.opengis.feature.Feature next
Constructor Detail

FilteringFeatureReader

public FilteringFeatureReader(FeatureReader<T,F> featureReader,
                              org.opengis.filter.Filter filter)
Creates a new instance of AbstractFeatureReader

Please don't call this method with Filter.INCLUDE or Filter.EXCLUDE (consider not filtering and EmptyFeatureReader instead)

Parameters:
featureReader - FeatureReader being filtered
filter - Filter used to limit the results of featureReader
Method Detail

getDelegate

public FeatureReader<T,F> getDelegate()
Specified by:
getDelegate in interface DelegatingFeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>
Returns:
THe delegate reader.

next

public F next()
                                           throws java.io.IOException,
                                                  IllegalAttributeException,
                                                  java.util.NoSuchElementException
Description copied from interface: FeatureReader
Reads the next Feature in the FeatureReader.

Specified by:
next in interface FeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>
Returns:
The next feature in the reader.
Throws:
java.io.IOException - If an error occurs reading the Feature.
IllegalAttributeException - If the attributes read do not comply with the FeatureType.
java.util.NoSuchElementException - If there are no more Features in the Reader.

close

public void close()
           throws java.io.IOException
Description copied from interface: FeatureReader
Release the underlying resources associated with this stream.

Specified by:
close in interface FeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>
Throws:
java.io.IOException - DOCUMENT ME!

getFeatureType

public T getFeatureType()
Description copied from interface: FeatureReader
Return the FeatureType this reader has been configured to create.

Specified by:
getFeatureType in interface FeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>
Returns:
the FeatureType of the Features this FeatureReader will create.

hasNext

public boolean hasNext()
                throws java.io.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 interface FeatureReader<T extends org.opengis.feature.type.FeatureType,F extends org.opengis.feature.Feature>
Returns:
true if we have additional content
Throws:
java.io.IOException - If the reader we are filtering encounters a problem
DataSourceException - See IOException


Copyright © 1996-2010 Geotools. All Rights Reserved.