Class 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
    • Constructor Detail

      • 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 Detail

      • 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:
        FeatureSource.getName()
      • 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
      • 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)
      • 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.