Class DefaultView

Object
DefaultView
All Implemented Interfaces:
FeatureSource<SimpleFeatureType,SimpleFeature>, SimpleFeatureSource

public class DefaultView extends Object implements SimpleFeatureSource
Wrapper for SimpleFeatureSource constrained by a Query.

Support SimpleFeatureSource decorator that takes care of mapping a Query & SimpleFeatureSource with the schema and definition query configured for it.

Because GeoServer requires that attributes always be returned in the same order we need a way to smoothly inforce this. Could we use this class to do so?

WARNING: this class is a placeholder for ideas right now - it may not always impement FeatureSource.

Author:
Gabriel Rold�n
  • Field Details

  • Constructor Details

    • DefaultView

      public DefaultView(SimpleFeatureSource source, Query query) throws SchemaException
      Creates a new GeoServerFeatureSource object.

      Grabs the following from query:

      • typeName - only used if client does not supply
      • cs - only used if client does not supply
      • csForce - only used if client does not supply
      • filter - combined with client filter
      • propertyNames - combined with client filter (indicate property names that *must* be included)
      Schema is generated based on this information.
      Parameters:
      source - a FeatureSource
      query - Filter used to limit results
      Throws:
      SchemaException
  • Method Details

    • getName

      public Name getName()
      Description copied from interface: FeatureSource
      Returns the name of the features (strictly, the name of the AttributeDescriptor for the features) accessible through this FeatureSource.

      The value returned by this method can be different to that returned by featureSource.getSchema().getType().getName(). This is because there is a distinction between the name applied to features and the name of a feature type. When working with SimpleFeature and SimpleFeatureType, for example with a shapefile data source, it is common practice for feature and feature type names to be the same. However, this is not the case more generally. For instance, a database can contain two tables with the same structure. The feature name will refer to the table while the feature type name refers to the schema (table structure).

      Specified by:
      getName in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Returns:
      the name of the features accessible through this FeatureSource
      Since:
      2.5
      See Also:
    • create

      public static SimpleFeatureSource create(SimpleFeatureSource source, Query query) throws SchemaException
      Factory that make the correct decorator for the provided featureSource.

      This factory method is public and will be used to create all required subclasses. By comparison the constructors for this class have package visibiliy. TODO: revisit this - I am not sure I want write access to views (especially if they do reprojection).

      Throws:
      SchemaException
    • makeDefinitionQuery

      protected Query makeDefinitionQuery(Query query) throws IOException
      Takes a query and adapts it to match re definitionQuery filter configured for a feature type. It won't handle coordinate system changes

      Grabs the following from query:

      • typeName - only used if client does not supply
      • filter - combined with client filter
      • propertyNames - combined with client filter (indicate property names that *must* be included)
      Parameters:
      query - Query against this DataStore
      Returns:
      Query restricted to the limits of definitionQuery
      Throws:
      IOException - See DataSourceException
      DataSourceException - If query could not meet the restrictions of definitionQuery
    • makeDefinitionFilter

      protected Filter makeDefinitionFilter(Filter filter) throws DataSourceException
      If a definition query has been configured for the FeatureTypeInfo, makes and return a new Filter that contains both the query's filter and the layer's definition one, by logic AND'ing them.
      Parameters:
      filter - Origional user supplied Filter
      Returns:
      Filter adjusted to the limitations of definitionQuery
      Throws:
      DataSourceException - If the filter could not meet the limitations of definitionQuery
    • getDataStore

      public DataStore getDataStore()
      Implement getDataStore.

      Description ...

      Specified by:
      getDataStore in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Returns:
      See Also:
      • org.geotools.data.FeatureSource#getDataStore()
    • addFeatureListener

      public void addFeatureListener(FeatureListener listener)
      Implement addFeatureListener.

      Description ...

      Specified by:
      addFeatureListener in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Parameters:
      listener - the new listener
      See Also:
      • org.geotools.data.FeatureSource#addFeatureListener(org.geotools.data.FeatureListener)
    • removeFeatureListener

      public void removeFeatureListener(FeatureListener listener)
      Implement removeFeatureListener.

      Description ...

      Specified by:
      removeFeatureListener in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Parameters:
      listener - the listener to remove
      See Also:
      • org.geotools.data.FeatureSource#removeFeatureListener(org.geotools.data.FeatureListener)
    • getFeatures

      public SimpleFeatureCollection getFeatures(Query query) throws IOException
      Implement getFeatures.

      Description ...

      Specified by:
      getFeatures in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Specified by:
      getFeatures in interface SimpleFeatureSource
      Parameters:
      query - DataAccess query for requested information, such as typeName, maxFeatures and filter.
      Returns:
      features retrieved by the Query
      Throws:
      IOException - if the underlying data source cannot be accessed.
      See Also:
      • org.geotools.data.FeatureSource#getFeatures(org.geotools.data.Query)
    • getFeatures

      public SimpleFeatureCollection getFeatures(Filter filter) throws IOException
      Implement getFeatures.

      Description ...

      Specified by:
      getFeatures in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Specified by:
      getFeatures in interface SimpleFeatureSource
      Parameters:
      filter - the filter to select features; must not be null (use Filter.INCLUDE instead)
      Returns:
      features retrieved by the Filter
      Throws:
      IOException - if the underlying data source cannot be accessed.
      See Also:
    • getFeatures

      public SimpleFeatureCollection getFeatures() throws IOException
      Implement getFeatures.

      Description ...

      Specified by:
      getFeatures in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Specified by:
      getFeatures in interface SimpleFeatureSource
      Returns:
      features retrieved by the Query
      Throws:
      IOException - if the underlying data source cannot be accessed.
      See Also:
      • org.geotools.data.FeatureSource#getFeatures()
    • getSchema

      public SimpleFeatureType getSchema()
      Implement getSchema.

      Description ...

      Specified by:
      getSchema in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Returns:
      See Also:
      • org.geotools.data.FeatureSource#getSchema()
    • getInfo

      public ResourceInfo getInfo()
      Description copied from interface: FeatureSource
      Returns information describing this FeatureSource which may include title, description and spatial parameters. Note that in the returned ResourceInfo object, the distinction between feature name and schema (feature type) name applies as discussed for FeatureSource.getName().
      Specified by:
      getInfo in interface FeatureSource<SimpleFeatureType,SimpleFeature>
    • getBounds

      public ReferencedEnvelope getBounds() throws IOException
      Retrieves the total extent of this FeatureSource.

      Please note this extent will reflect the provided definitionQuery.

      Specified by:
      getBounds in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Returns:
      Extent of this FeatureSource, or null if no optimizations exist.
      Throws:
      IOException - If bounds of definitionQuery
    • getBounds

      public ReferencedEnvelope getBounds(Query query) throws IOException
      Retrive the extent of the Query.

      This method provides access to an optimized getBounds opperation. If no optimized opperation is available null will be returned.

      You may still make use of getFeatures( Query ).getCount() which will return the correct answer (even if it has to itterate through all the results to do so.

      Specified by:
      getBounds in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Parameters:
      query - User's query
      Returns:
      Extend of Query or null if no optimization is available
      Throws:
      IOException - If a problem is encountered with source
    • getCount

      public int getCount(Query query)
      Adjust query and forward to source.

      This method provides access to an optimized getCount opperation. If no optimized opperation is available -1 will be returned.

      You may still make use of getFeatures( Query ).getCount() which will return the correct answer (even if it has to itterate through all the results to do so).

      Specified by:
      getCount in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Parameters:
      query - User's query.
      Returns:
      Number of Features for Query, or -1 if no optimization is available.
    • getSupportedHints

      public Set<RenderingHints.Key> getSupportedHints()
      Description copied from interface: FeatureSource
      Returns the set of hints that this FeatureSource supports via Query requests.

      Note: the existence of a specific hint does not guarantee that it will always be honored by the implementing class.

      Specified by:
      getSupportedHints in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Returns:
      a set of RenderingHints#Key objects; may be empty but never null
      See Also:
    • getQueryCapabilities

      public QueryCapabilities getQueryCapabilities()
      Description copied from interface: FeatureSource
      Enquire what what query capabilities this FeatureSource natively supports. For example, whether queries can return sorted results.
      Specified by:
      getQueryCapabilities in interface FeatureSource<SimpleFeatureType,SimpleFeature>
      Returns:
      the native query capabilities of this FeatureSource