org.geotools.data.complex
Class AppSchemaDataAccess

java.lang.Object
  extended by org.geotools.data.complex.AppSchemaDataAccess
All Implemented Interfaces:
DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>

public class AppSchemaDataAccess
extends java.lang.Object
implements DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>

A DataAccess that maps a "simple" source DataStore into a source of full Feature features conforming to an application schema.

Since:
2.4
Version:
$Id: AppSchemaDataAccess.java 35224 2010-04-13 04:41:06Z ang05a $
Author:
Gabriel Roldan, Axios Engineering, Ben Caradoc-Davies, CSIRO Exploration and Mining, Rini Angreani, Curtin University of Technology

Constructor Summary
AppSchemaDataAccess(java.util.Set<FeatureTypeMapping> mappings)
          Constructor.
 
Method Summary
 void createSchema(org.opengis.feature.type.FeatureType featureType)
          Not a supported operation.
 void dispose()
          Disposes of this data store and releases any resource that it is using.
protected  ReferencedEnvelope getBounds(Query query)
          Computes the bounds of the features for the specified feature type that satisfy the query provided that there is a fast way to get that result.
protected  int getCount(Query targetQuery)
          Gets the number of the features that would be returned by this query for the specified feature type.
 FeatureSource<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature> getFeatureSource(org.opengis.feature.type.Name typeName)
          Return a feature source that can be used to obtain features of a particular type.
 FeatureSource<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature> getFeatureSourceByName(org.opengis.feature.type.Name typeName)
          Return a feature source that can be used to obtain features of a particular name.
 ServiceInfo getInfo()
          Not a supported operation.
 FeatureTypeMapping getMappingByElement(org.opengis.feature.type.Name typeName)
          Returns the mapping suite for the given target type name.
 FeatureTypeMapping getMappingByName(org.opengis.feature.type.Name typeName)
          Returns the mapping suite for the given targetElement name or mappingName.
 java.util.List<org.opengis.feature.type.Name> getNames()
          Return the names of the target features.
 org.opengis.feature.type.FeatureType getSchema(org.opengis.feature.type.Name typeName)
          Finds the target FeatureType named typeName in this ComplexDatastore's internal list of FeatureType mappings and returns it.
 org.opengis.feature.type.Name[] getTypeNames()
          Returns the set of target type names this DataAccess holds, where the term 'target type name' refers to the name of one of the types this DataAccess produces by mapping another ones through the definitions stored in its FeatureTypeMappings
protected  org.opengis.filter.Filter getUnsupportedFilter(java.lang.String typeName, org.opengis.filter.Filter filter)
          Returns Filter.INCLUDE, as the whole filter is unrolled and passed back to the underlying DataStore to be treated.
 boolean hasElement(org.opengis.feature.type.Name typeName)
           
 boolean hasName(org.opengis.feature.type.Name name)
           
protected  void register()
          Registers this data access to the registry so the mappings can be retrieved globally
static org.opengis.filter.Filter unrollFilter(org.opengis.filter.Filter complexFilter, FeatureTypeMapping mapping)
          Takes a filter that operates against a FeatureTypeMapping's target FeatureType, and unrolls it creating a new Filter that operates against the mapping's source FeatureType.
 Query unrollQuery(Query query, FeatureTypeMapping mapping)
          Creates a org.geotools.data.Query that operates over the surrogate DataStore, by unrolling the org.geotools.filter.Filter contained in the passed query, and replacing the list of required attributes by the ones of the mapped FeatureType.
 void updateSchema(org.opengis.feature.type.Name typeName, org.opengis.feature.type.FeatureType featureType)
          Not a supported operation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AppSchemaDataAccess

public AppSchemaDataAccess(java.util.Set<FeatureTypeMapping> mappings)
                    throws java.io.IOException
Constructor.

Parameters:
mappings - a Set containing a FeatureTypeMapping for each FeatureType this DataAccess is going to produce.
Throws:
java.io.IOException
Method Detail

register

protected void register()
Registers this data access to the registry so the mappings can be retrieved globally


getTypeNames

public org.opengis.feature.type.Name[] getTypeNames()
                                             throws java.io.IOException
Returns the set of target type names this DataAccess holds, where the term 'target type name' refers to the name of one of the types this DataAccess produces by mapping another ones through the definitions stored in its FeatureTypeMappings

Throws:
java.io.IOException

getSchema

public org.opengis.feature.type.FeatureType getSchema(org.opengis.feature.type.Name typeName)
                                               throws java.io.IOException
Finds the target FeatureType named typeName in this ComplexDatastore's internal list of FeatureType mappings and returns it.

Specified by:
getSchema in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>
Parameters:
typeName - Type name a the resource from getNames()
Returns:
Description of the FeatureType being made avaialble
Throws:
java.io.IOException

getMappingByName

public FeatureTypeMapping getMappingByName(org.opengis.feature.type.Name typeName)
                                    throws java.io.IOException
Returns the mapping suite for the given targetElement name or mappingName.

Note this method is public just for unit testing purposes

Parameters:
typeName -
Returns:
Throws:
java.io.IOException

getMappingByElement

public FeatureTypeMapping getMappingByElement(org.opengis.feature.type.Name typeName)
                                       throws java.io.IOException
Returns the mapping suite for the given target type name.

Note this method is public just for unit testing purposes

Parameters:
typeName -
Returns:
Throws:
java.io.IOException

hasName

public boolean hasName(org.opengis.feature.type.Name name)
Parameters:
name - mappingName or targetElement
Returns:
true if this data access contains mapping with for provided name

hasElement

public boolean hasElement(org.opengis.feature.type.Name typeName)
Parameters:
typeName - targetElement name
Returns:
true if this data access contains mapping for provided targetElement name

getBounds

protected ReferencedEnvelope getBounds(Query query)
                                throws java.io.IOException
Computes the bounds of the features for the specified feature type that satisfy the query provided that there is a fast way to get that result.

Will return null if there is not fast way to compute the bounds. Since it's based on some kind of header/cached information, it's not guaranteed to be real bound of the features

Parameters:
query -
Returns:
the bounds, or null if too expensive
Throws:
SchemaNotFoundException
java.io.IOException

getCount

protected int getCount(Query targetQuery)
                throws java.io.IOException
Gets the number of the features that would be returned by this query for the specified feature type.

If getBounds(Query) returns -1 due to expense consider using getFeatures(Query).getCount() as a an alternative.

Parameters:
targetQuery - Contains the Filter and MaxFeatures to find the bounds for.
Returns:
The number of Features provided by the Query or -1 if count is too expensive to calculate or any errors or occur.
Throws:
java.io.IOException
java.io.IOException - if there are errors getting the count

getUnsupportedFilter

protected org.opengis.filter.Filter getUnsupportedFilter(java.lang.String typeName,
                                                         org.opengis.filter.Filter filter)
Returns Filter.INCLUDE, as the whole filter is unrolled and passed back to the underlying DataStore to be treated.

Returns:
Filter.INLCUDE

unrollQuery

public Query unrollQuery(Query query,
                         FeatureTypeMapping mapping)
Creates a org.geotools.data.Query that operates over the surrogate DataStore, by unrolling the org.geotools.filter.Filter contained in the passed query, and replacing the list of required attributes by the ones of the mapped FeatureType.

Parameters:
query -
mapping -
Returns:

unrollFilter

public static org.opengis.filter.Filter unrollFilter(org.opengis.filter.Filter complexFilter,
                                                     FeatureTypeMapping mapping)
Takes a filter that operates against a FeatureTypeMapping's target FeatureType, and unrolls it creating a new Filter that operates against the mapping's source FeatureType.

Parameters:
complexFilter -
Returns:
TODO: implement filter unrolling

dispose

public void dispose()
Description copied from interface: DataAccess
Disposes of this data store and releases any resource that it is using.

A DataStore cannot be used after dispose has been called, neither can any data access object it helped create, such as FeatureReader, FeatureSource or FeatureCollection.

This operation can be called more than once without side effects.

There is no thread safety assurance associated with this method. For example, client code will have to make sure this method is not called while retrieving/saving data from/to the storage, or be prepared for the consequences.

Specified by:
dispose in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>

getInfo

public ServiceInfo getInfo()
Not a supported operation.

Specified by:
getInfo in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>
Returns:
SeviceInfo
See Also:
DataAccess.getInfo()

getNames

public java.util.List<org.opengis.feature.type.Name> getNames()
Return the names of the target features.

Specified by:
getNames in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>
Returns:
Names of the available contents.
See Also:
DataAccess.getNames()

createSchema

public void createSchema(org.opengis.feature.type.FeatureType featureType)
                  throws java.io.IOException
Not a supported operation.

Specified by:
createSchema in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>
Parameters:
featureType - FetureType to add to DataStore
Throws:
java.io.IOException - If featureType cannot be created
See Also:
DataAccess.createSchema(org.opengis.feature.type.FeatureType)

getFeatureSource

public FeatureSource<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature> getFeatureSource(org.opengis.feature.type.Name typeName)
                                                                                                 throws java.io.IOException
Return a feature source that can be used to obtain features of a particular type.

Specified by:
getFeatureSource in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>
Returns:
Access to the named resource being made available
Throws:
java.io.IOException
See Also:
DataAccess.getFeatureSource(org.opengis.feature.type.Name)

updateSchema

public void updateSchema(org.opengis.feature.type.Name typeName,
                         org.opengis.feature.type.FeatureType featureType)
                  throws java.io.IOException
Not a supported operation.

Specified by:
updateSchema in interface DataAccess<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature>
Throws:
java.io.IOException - if the operation failed
See Also:
DataAccess.updateSchema(org.opengis.feature.type.Name, org.opengis.feature.type.FeatureType)

getFeatureSourceByName

public FeatureSource<org.opengis.feature.type.FeatureType,org.opengis.feature.Feature> getFeatureSourceByName(org.opengis.feature.type.Name typeName)
                                                                                                       throws java.io.IOException
Return a feature source that can be used to obtain features of a particular name. This name would be the mappingName in the TypeMapping if it exists, otherwise it's the target element name.

Parameters:
typeName - mappingName or targetElement
Returns:
Mapping feature source
Throws:
java.io.IOException


Copyright © 1996-2010 Geotools. All Rights Reserved.