org.geotools.data.jdbc
Class JDBC1DataStore

java.lang.Object
  extended byorg.geotools.data.jdbc.JDBC1DataStore
All Implemented Interfaces:
DataStore
Direct Known Subclasses:
HsqlDataStore, JDBC2DataStore

public abstract class JDBC1DataStore
extends java.lang.Object
implements DataStore

Abstract class for JDBC based DataStore implementations.

This class provides a default implementation of a JDBC data store. Support for vendor specific JDBC data stores can be easily added to Geotools by subclassing this class and overriding the hooks provided.

At a minimum subclasses should implement the following methods:

Additionally subclasses can optionally override the following:

Additionally subclasses may want to set the value of:

Version:
$Id: JDBC1DataStore.java 17707 2006-01-23 03:45:14Z desruisseaux $
Author:
Amr Alam, Refractions Research, Sean Geoghegan, Defence Science and Technology Organisation, Chris Holmes, TOPP, Andrea Aime

Field Summary
protected  boolean allowWriteOnVolatileFIDs
          When true, writes are allowed also on tables with volatile FID mappers.
protected  JDBCDataStoreConfig config
           
 FeatureListenerManager listenerManager
          Manages listener lists for FeatureSource implementations
protected static java.util.logging.Logger LOGGER
          The logger for the filter module.
protected  java.lang.String sqlNameEscape
          The character(s) to surround schema, table and column names an SQL query to support mixed-case and non-English names
protected static java.util.Map TYPE_MAPPINGS
          Maps SQL types to Java classes.
protected  FeatureTypeHandler typeHandler
           
 
Constructor Summary
JDBC1DataStore(JDBCDataStoreConfig config)
          Construct a JDBCDataStore with ConnectionPool and associated configuration.
 
Method Summary
protected  boolean allowTable(java.lang.String tablename)
          Provides a hook for sub classes to filter out specific tables in the data store that are not to be used as geospatial tables.
 boolean allSameOrder(java.lang.String[] requestedNames, FeatureType ft)
          returns true if the requested names list all the attributes in the correct order.
protected  java.lang.String[] attributeNames(FeatureType featureType, Filter filter)
          Gets the list of attribute names required for both featureType and filter
protected  AttributeType buildAttributeType(java.sql.ResultSet rs)
          Constructs an AttributeType from a row in a ResultSet.
protected  FIDMapperFactory buildFIDMapperFactory(JDBCDataStoreConfig config)
           
protected  FeatureType buildSchema(java.lang.String typeName, FIDMapper mapper)
          Builds the schema for a table in the database.
protected abstract  java.sql.Connection createConnection()
          Create a connection for your JDBC1 database
protected  FeatureReader createFeatureReader(FeatureType schema, Filter postFilter, QueryData queryData)
          Create a new FeatureReader based on attributeReaders.
protected  JDBCFeatureWriter createFeatureWriter(FeatureReader reader, QueryData queryData)
           
protected  LockingManager createLockingManager()
          Allows subclass to create LockingManager to support their needs.
 void createSchema(FeatureType featureType)
          Create a new featureType.
protected  java.lang.String determineFidColumnName(java.lang.String typeName)
          Provides the default implementation of determining the FID column.
protected  int determineSRID(java.lang.String tableName, java.lang.String geometryColumnName)
          Provides a hook for subclasses to determine the SRID of a geometry column.
protected  QueryData executeQuery(FeatureTypeInfo featureTypeInfo, java.lang.String tableName, java.lang.String sqlQuery, Transaction transaction, boolean forWrite)
          Executes the SQL Query.
protected  AttributeIO getAttributeIO(AttributeType type)
          Returns the basic AttributeIO that can read and write all of the simple data types
protected  AttributeType[] getAttributeTypes(java.lang.String typeName, java.lang.String[] propertyNames)
          Gets the attribute types from from a given type.
protected  int getConcurrency(boolean forWrite)
           
protected  java.sql.Connection getConnection(Transaction transaction)
          Gets a connection for the provided transaction.
 com.vividsolutions.jts.geom.Envelope getEnvelope(java.lang.String typeName)
          Retrieve approx bounds of all Features.
 FeatureReader getFeatureReader(FeatureType requestType, Filter filter, Transaction transaction)
          This is a public entry point to the DataStore.
 FeatureReader getFeatureReader(Query query, Transaction trans)
          The top level method for getting a FeatureReader.
 FeatureSource getFeatureSource(java.lang.String typeName)
          Default implementation based on getFeatureReader and getFeatureWriter.
protected  FeatureTypeHandler getFeatureTypeHandler(JDBCDataStoreConfig config)
          DOCUMENT ME!
 FeatureWriter getFeatureWriter(java.lang.String typeName, Filter filter, Transaction transaction)
          Aquire FetureWriter for modification of contents specifed by filter.
 FeatureWriter getFeatureWriter(java.lang.String typeName, Transaction transaction)
          Retrieve a FeatureWriter over entire dataset.
 FeatureWriter getFeatureWriterAppend(java.lang.String typeName, Transaction transaction)
          Retrieve a FeatureWriter for creating new content.
 FIDMapper getFIDMapper(java.lang.String tableName)
           
 FIDMapperFactory getFIDMapperFactory()
          Returns the FIDMapperFactory used for this data store
protected abstract  AttributeIO getGeometryAttributeIO(AttributeType type, QueryData queryData)
          Hook to create the geometry attribute IO for a vendor specific data source.
protected  JDBCFeatureReader getJDBCFeatureReader(QueryData queryData)
           
 LockingManager getLockingManager()
          Locking manager used for this DataStore.
 java.net.URI getNameSpace()
          Gets the namespace of the data store.
protected  int getResultSetType(boolean forWrite)
           
 FeatureType getSchema(java.lang.String typeName)
          Retrieve FeatureType metadata by typeName.
 SQLBuilder getSqlBuilder(java.lang.String typeName)
          Hook for subclass to return a different sql builder.
 java.lang.String getSqlNameEscape()
          Gets the SQL name escape string.
 java.lang.String[] getTypeNames()
          Retrieves a list of of the available FeatureTypes.
 FeatureSource getView(Query query)
          Access a FeatureSource for Query providing a high-level API.
protected  void setAutoCommit(boolean forWrite, java.sql.Connection conn)
          This method should be overridden to do nothing by DataStores where setting autoCommit causes funky behaviour (ie. anytime autoCommit is changed, every thing up to that point is committed...this isn't good at this stage)
 void setFIDMapper(java.lang.String featureTypeName, FIDMapper fidMapper)
          Sets the FIDMapper for a specific type name
 void setFIDMapperFactory(FIDMapperFactory fmFactory)
          Allows to override the default FIDMapperFactory.
protected  void setSqlNameEscape(java.lang.String sqlNameEscape)
          Sets the SQL name escape string.
 void updateSchema(java.lang.String typeName, FeatureType featureType)
          Used to provide support for changing the DataStore Schema.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOGGER

protected static final java.util.logging.Logger LOGGER
The logger for the filter module.


TYPE_MAPPINGS

protected static final java.util.Map TYPE_MAPPINGS
Maps SQL types to Java classes. This might need to be fleshed out more later, Ive ignored complex types such as ARRAY, BLOB and CLOB. It is protected so subclasses can override it I guess.

These mappings were taken from http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/mapping.html#997737


listenerManager

public FeatureListenerManager listenerManager
Manages listener lists for FeatureSource implementations


config

protected final JDBCDataStoreConfig config

typeHandler

protected FeatureTypeHandler typeHandler

sqlNameEscape

protected java.lang.String sqlNameEscape
The character(s) to surround schema, table and column names an SQL query to support mixed-case and non-English names


allowWriteOnVolatileFIDs

protected boolean allowWriteOnVolatileFIDs
When true, writes are allowed also on tables with volatile FID mappers. False by default

See Also:
FIDMapper.isVolatile()
Constructor Detail

JDBC1DataStore

public JDBC1DataStore(JDBCDataStoreConfig config)
               throws java.io.IOException
Construct a JDBCDataStore with ConnectionPool and associated configuration.

Parameters:
config -
Throws:
java.io.IOException
Method Detail

getSqlNameEscape

public java.lang.String getSqlNameEscape()
Gets the SQL name escape string.

The value of this string is prefixed and appended to table schema names, table names and column names in an SQL statement to support mixed-case and non-English names.

Returns:
the value of the SQL name escape string.

setSqlNameEscape

protected void setSqlNameEscape(java.lang.String sqlNameEscape)
Sets the SQL name escape string.

The value of this string is prefixed and appended to table schema names, table names and column names in an SQL statement to support mixed-case and non-English names.

This value is typically only set once when the DataStore implementation class is constructed.

Parameters:
sqlNameEscape - the name escape character

getFeatureTypeHandler

protected FeatureTypeHandler getFeatureTypeHandler(JDBCDataStoreConfig config)
                                            throws java.io.IOException
DOCUMENT ME!

Parameters:
config -
Returns:
DOCUMENT ME!
Throws:
java.io.IOException - DOCUMENT ME!

buildFIDMapperFactory

protected FIDMapperFactory buildFIDMapperFactory(JDBCDataStoreConfig config)

getFIDMapper

public FIDMapper getFIDMapper(java.lang.String tableName)
                       throws java.io.IOException
Throws:
java.io.IOException

createLockingManager

protected LockingManager createLockingManager()
Allows subclass to create LockingManager to support their needs.

Returns:

getTypeNames

public java.lang.String[] getTypeNames()
                                throws java.io.IOException
Description copied from interface: DataStore
Retrieves a list of of the available FeatureTypes.

This is simply a list of the FeatureType names as aquiring the actual FeatureType schemas may be expensive.

Warning: this list may not be unique - the types may be in separate namespaces.

If you need to worry about such things please consider the use of the Catalog and CatalogEntry interface - many DataStores support this. getTypeNames is really a convience method for a Catalog.iterator() where the name of each entry is returned.

Specified by:
getTypeNames in interface DataStore
Returns:
typeNames for available FeatureTypes.
Throws:
java.io.IOException
See Also:
org.geotools.data.DataStore#getFeatureTypes()

getSchema

public FeatureType getSchema(java.lang.String typeName)
                      throws java.io.IOException
Description copied from interface: DataStore
Retrieve FeatureType metadata by typeName.

Retrieves the Schema information as a FeatureType object.

Specified by:
getSchema in interface DataStore
Parameters:
typeName - typeName of requested FeatureType
Returns:
FeatureType for the provided typeName
Throws:
java.io.IOException - If typeName cannot be found
See Also:
DataStore.getSchema(java.lang.String)

createSchema

public void createSchema(FeatureType featureType)
                  throws java.io.IOException
Create a new featureType.

Not currently supported - subclass may implement.

Specified by:
createSchema in interface DataStore
Parameters:
featureType -
Throws:
java.io.IOException
java.lang.UnsupportedOperationException - Creating new schemas is not supported.
See Also:
DataStore.createSchema(org.geotools.feature.FeatureType)

updateSchema

public void updateSchema(java.lang.String typeName,
                         FeatureType featureType)
                  throws java.io.IOException
Used to provide support for changing the DataStore Schema.

Specifically this is intended to address updating the metadata Coordinate System information.

If we can figure out the Catalog API for metadata we will not have to use such a heavy handed approach.

Subclasses are free to implement various levels of support:

Specified by:
updateSchema in interface DataStore
Parameters:
typeName -
Throws:
java.io.IOException
See Also:
DataStore.updateSchema(java.lang.String, org.geotools.feature.FeatureType)

getView

public FeatureSource getView(Query query)
                      throws java.io.IOException,
                             SchemaException
Description copied from interface: DataStore
Access a FeatureSource for Query providing a high-level API.

The provided Query does not need to completely cover the existing schema for Query.getTypeName(). The result will mostly likely only be a FeatureSource and probably wont' allow write access by the FeatureStore method.

By using Query we allow support for reprojection, in addition to overriding the CoordinateSystem used by the native FeatureType.

We may wish to limit this method to only support Queries using Filter.ALL.

Update - GeoServer has an elegatent implementation of this functionality that we could steal. GeoServerFeatureSource, GeoServerFeatureStore and GeoServerFeatureLocking serve as a working prototype.

Specified by:
getView in interface DataStore
Returns:
FeatureSource providing opperations for featureType
Throws:
SchemaException - If fetureType is not covered by existing schema
java.io.IOException - If FeatureSource is not available

getFeatureSource

public FeatureSource getFeatureSource(java.lang.String typeName)
                               throws java.io.IOException
Default implementation based on getFeatureReader and getFeatureWriter.

We should be able to optimize this to only get the RowSet once

Specified by:
getFeatureSource in interface DataStore
Parameters:
typeName -
Returns:
FeatureSource (or subclass) providing opperations for typeName
Throws:
java.io.IOException
See Also:
DataStore.getFeatureSource(java.lang.String)

getFeatureReader

public FeatureReader getFeatureReader(FeatureType requestType,
                                      Filter filter,
                                      Transaction transaction)
                               throws java.io.IOException
This is a public entry point to the DataStore.

We have given some though to changing this api to be based on query.

Currently the is is the only way to retype your features to different name spaces.

(non-Javadoc)

Throws:
java.io.IOException
See Also:
org.geotools.data.DataStore#getFeatureReader(org.geotools.feature.FeatureType, org.geotools.filter.Filter, org.geotools.data.Transaction)

attributeNames

protected java.lang.String[] attributeNames(FeatureType featureType,
                                            Filter filter)
                                     throws java.io.IOException
Gets the list of attribute names required for both featureType and filter

Parameters:
featureType - The FeatureType to get attribute names for.
filter - The filter which needs attributes to filter.
Returns:
The list of attribute names required by a filter.
Throws:
java.io.IOException - If we can't get the schema.

getFeatureReader

public FeatureReader getFeatureReader(Query query,
                                      Transaction trans)
                               throws java.io.IOException
The top level method for getting a FeatureReader.

Chris- I've gone with the Query object aswell. It just seems to make more sense. This is pretty well split up across methods. The hooks for DB specific AttributeReaders are createResultSetReader and createGeometryReader.

JG- I have implemented getFeatureReader( FeatureType, Filter, Transasction) ontop of this method, it will Retype as required

Specified by:
getFeatureReader in interface DataStore
Parameters:
query - The Query to get a FeatureReader for.
trans - The transaction this read operation is being performed in.
Returns:
A FeatureReader that contains features defined by the query.
Throws:
java.io.IOException - If an error occurs executing the query.
DataSourceException

createFeatureReader

protected FeatureReader createFeatureReader(FeatureType schema,
                                            Filter postFilter,
                                            QueryData queryData)
                                     throws java.io.IOException
Create a new FeatureReader based on attributeReaders.

The provided schema describes the attributes in the queryData ResultSet. This schema should cover the requirements of filter.

Retyping to the users requested Schema will not happen in this method.

Parameters:
schema -
postFilter - Filter for post processing, or null if not requried.
queryData - Holds a ResultSet for attribute Readers
Returns:
Throws:
java.io.IOException

getJDBCFeatureReader

protected JDBCFeatureReader getJDBCFeatureReader(QueryData queryData)
                                          throws java.io.IOException
Throws:
java.io.IOException

getAttributeIO

protected AttributeIO getAttributeIO(AttributeType type)
Returns the basic AttributeIO that can read and write all of the simple data types

Parameters:
type -
Returns:

getGeometryAttributeIO

protected abstract AttributeIO getGeometryAttributeIO(AttributeType type,
                                                      QueryData queryData)
                                               throws java.io.IOException
Hook to create the geometry attribute IO for a vendor specific data source.

Parameters:
type - The AttributeType to read.
queryData - The connection holder
Returns:
The AttributeIO that will read and write the geometry from the results.
Throws:
java.io.IOException - DOCUMENT ME!

executeQuery

protected QueryData executeQuery(FeatureTypeInfo featureTypeInfo,
                                 java.lang.String tableName,
                                 java.lang.String sqlQuery,
                                 Transaction transaction,
                                 boolean forWrite)
                          throws java.io.IOException
Executes the SQL Query.

This is private in the expectation that subclasses should not need to change this behaviour.

Jody with a question here - I have stopped this method from closing connection shared by a Transaction. It sill seems like we are leaving connections open by using this method. I have also stopped QueryData from doing the same thing.

Answer from Sean: Resources for successful queries are closed when close is called on the AttributeReaders constructed with the QueryData. We can't close them here since they need to be open to read from the ResultSet.

Jody AttributeReader question: I looked at the code and Attribute Readers do not close with respect to Transactions (they need to as we can issue a Reader against a Transaction. I have changed the JDBCDataStore.close method to force us to keep track of these things.

SG: I've marked this as final since I don't think it shoudl be overriden, but Im not sure

Parameters:
featureTypeInfo -
tableName -
sqlQuery - The SQL query to execute.
transaction - The Transaction is included here for handling transaction connections at a later stage. It is not currently used.
forWrite -
Returns:
The QueryData object that contains the resources for the query.
Throws:
java.io.IOException
DataSourceException - If an error occurs performing the query.
Task:
HACK: This is just protected for postgis FeatureWriter purposes. Should move back to private when that stuff moves more abstract here.

setAutoCommit

protected void setAutoCommit(boolean forWrite,
                             java.sql.Connection conn)
                      throws java.sql.SQLException
This method should be overridden to do nothing by DataStores where setting autoCommit causes funky behaviour (ie. anytime autoCommit is changed, every thing up to that point is committed...this isn't good at this stage)

Parameters:
forWrite -
conn -
Throws:
java.sql.SQLException

getResultSetType

protected int getResultSetType(boolean forWrite)

getConcurrency

protected int getConcurrency(boolean forWrite)

getSqlBuilder

public SQLBuilder getSqlBuilder(java.lang.String typeName)
                         throws java.io.IOException
Hook for subclass to return a different sql builder.

Parameters:
typeName - The typename for the sql builder.
Returns:
A new sql builder.
Throws:
java.io.IOException - if anything goes wrong.

getConnection

protected java.sql.Connection getConnection(Transaction transaction)
                                     throws java.io.IOException
Gets a connection for the provided transaction.

Parameters:
transaction -
Returns:
A single use connection.
Throws:
java.io.IOException
DataSourceException - If the connection can not be obtained.

createConnection

protected abstract java.sql.Connection createConnection()
                                                 throws java.sql.SQLException
Create a connection for your JDBC1 database

Throws:
java.sql.SQLException

allowTable

protected boolean allowTable(java.lang.String tablename)
Provides a hook for sub classes to filter out specific tables in the data store that are not to be used as geospatial tables. The default implementation of this method is to allow all tables.

Parameters:
tablename - A table name to check.
Returns:
True if the table should be exposed as a FeatureType, false if it should be ignored.

buildSchema

protected FeatureType buildSchema(java.lang.String typeName,
                                  FIDMapper mapper)
                           throws java.io.IOException
Builds the schema for a table in the database.

This works by retrieving the column information for the table from the DatabaseMetaData object. It then iterates over the information for each column, calling buildAttributeType(ResultSet) to construct an AttributeType for each column. The list of attribute types is then turned into a FeatureType that defines the schema.

It is not intended that this method is overriden. It should provide the required functionality for most sub-classes. To add AttributeType construction for vendor specific SQL types, such as geometries, override the buildAttributeType(ResultSet) method.

This may become final later. In fact Ill make it private because I don't think It will need to be overriden.

Parameters:
typeName - The name of the table to construct a feature type for.
mapper - The name of the column holding the fid.
Returns:
The FeatureType for the table.
Throws:
java.io.IOException
DataSourceException - This can occur if there is an SQL error or an error constructing the FeatureType.
See Also:
buildAttributeType(ResultSet)

buildAttributeType

protected AttributeType buildAttributeType(java.sql.ResultSet rs)
                                    throws java.io.IOException
Constructs an AttributeType from a row in a ResultSet. The ResultSet contains the information retrieved by a call to getColumns() on the DatabaseMetaData object. This information can be used to construct an Attribute Type.

The default implementation constructs an AttributeType using the default JDBC type mappings defined in JDBCDataStore. These type mappings only handle native Java classes and SQL standard column types, so to handle Geometry columns, sub classes should override this to check if a column is a geometry column, if it is a geometry column the appropriate determination of the geometry type can be performed. Otherwise, overriding methods should call super.buildAttributeType.

Note: Overriding methods must never move the current row pointer in the result set.

Parameters:
rs - The ResultSet containing the result of a DatabaseMetaData.getColumns call.
Returns:
The AttributeType built from the ResultSet or null if the column should be excluded from the schema.
Throws:
java.io.IOException - If an error occurs processing the ResultSet.

determineSRID

protected int determineSRID(java.lang.String tableName,
                            java.lang.String geometryColumnName)
                     throws java.io.IOException
Provides a hook for subclasses to determine the SRID of a geometry column.

This allows SRIDs to be determined in a Vendor specific way and to be cached by the default implementation. To retreive these srids, get the FeatureTypeInfo object for the table and call getSRID(geometryColumnName). This will allow storage of SRIDs for multiple geometry columns in each table.

If no SRID can be found, subclasses should return -1. The default implementation always returns -1.

Parameters:
tableName - The name of the table to get the SRID for.
geometryColumnName - The name of the geometry column within the table to get SRID for.
Returns:
The SRID for the geometry column in the table or -1.
Throws:
java.io.IOException

determineFidColumnName

protected java.lang.String determineFidColumnName(java.lang.String typeName)
                                           throws java.io.IOException
Provides the default implementation of determining the FID column.

The default implementation of determining the FID column name is to use the primary key as the FID column. If no primary key is present, null will be returned. Sub classes can override this behaviour to define primary keys for vendor specific cases.

There is an unresolved issue as to what to do when there are multiple primary keys. Maybe a restriction that table much have a single column primary key is appropriate.

This should not be called by subclasses to retreive the FID column name. Instead, subclasses should call getFeatureTypeInfo(String) to get the FeatureTypeInfo for a feature type and get the fidColumn name from the fidColumn name memeber.

Parameters:
typeName - The name of the table to get a primary key for.
Returns:
The name of the primay key column or null if one does not exist.
Throws:
java.io.IOException - This will only occur if there is an error getting a connection to the Database.

getNameSpace

public java.net.URI getNameSpace()
Gets the namespace of the data store. TODO: change config over to use URI

Returns:
The namespace.

getFeatureWriter

public FeatureWriter getFeatureWriter(java.lang.String typeName,
                                      Transaction transaction)
                               throws java.io.IOException
Retrieve a FeatureWriter over entire dataset.

Quick notes: This FeatureWriter is often used to add new content, or perform summary calculations over the entire dataset.

Subclass may wish to implement an optimized featureWriter for these operations.

It should provide Feature for next() even when hasNext() is false.

Subclasses are responsible for checking with the lockingManger unless they are providing their own locking support.

Specified by:
getFeatureWriter in interface DataStore
Parameters:
typeName -
transaction -
Returns:
Throws:
java.io.IOException
See Also:
org.geotools.data.DataStore#getFeatureWriter(java.lang.String, boolean, org.geotools.data.Transaction)

getFeatureWriterAppend

public FeatureWriter getFeatureWriterAppend(java.lang.String typeName,
                                            Transaction transaction)
                                     throws java.io.IOException
Retrieve a FeatureWriter for creating new content.

Subclass may wish to implement an optimized featureWriter for this operation. One based on prepaired statemnts is a possibility, as we do not require a ResultSet.

To allow new content the FeatureWriter should provide Feature for next() even when hasNext() is false.

Subclasses are responsible for checking with the lockingManger unless they are providing their own locking support.

Specified by:
getFeatureWriterAppend in interface DataStore
Parameters:
typeName -
transaction -
Returns:
Throws:
java.io.IOException
See Also:
org.geotools.data.DataStore#getFeatureWriter(java.lang.String, boolean, org.geotools.data.Transaction)

getFeatureWriter

public FeatureWriter getFeatureWriter(java.lang.String typeName,
                                      Filter filter,
                                      Transaction transaction)
                               throws java.io.IOException
Aquire FetureWriter for modification of contents specifed by filter.

Quick notes: This FeatureWriter is often used to remove contents specified by the provided filter, or perform summary calculations.

It is not used to provide new content and should return null for next() when hasNext() returns false.

Subclasses are responsible for checking with the lockingManger unless they are providing their own locking support.

Specified by:
getFeatureWriter in interface DataStore
Parameters:
typeName -
filter -
transaction -
Returns:
Throws:
java.io.IOException - If typeName could not be located
java.lang.NullPointerException - If the provided filter is null
DataSourceException
See Also:
DataStore.getFeatureWriter(java.lang.String, org.geotools.filter.Filter, org.geotools.data.Transaction)

createFeatureWriter

protected JDBCFeatureWriter createFeatureWriter(FeatureReader reader,
                                                QueryData queryData)
                                         throws java.io.IOException
Throws:
java.io.IOException

getAttributeTypes

protected final AttributeType[] getAttributeTypes(java.lang.String typeName,
                                                  java.lang.String[] propertyNames)
                                           throws java.io.IOException,
                                                  SchemaException
Gets the attribute types from from a given type.

Parameters:
typeName - The name of the feature type to get the AttributeTypes for.
propertyNames - The list of propertyNames to get AttributeTypes for.
Returns:
the array of attribute types from the schema which match propertyNames.
Throws:
java.io.IOException - If we can't get the schema.
SchemaException - if query contains a propertyName that is not a part of this type's schema.

getLockingManager

public LockingManager getLockingManager()
Locking manager used for this DataStore.

By default AbstractDataStore makes use of InProcessLockingManager.

Specified by:
getLockingManager in interface DataStore
Returns:
See Also:
DataStore.getLockingManager()

setFIDMapper

public void setFIDMapper(java.lang.String featureTypeName,
                         FIDMapper fidMapper)
Sets the FIDMapper for a specific type name

Parameters:
featureTypeName -
fidMapper -

getFIDMapperFactory

public FIDMapperFactory getFIDMapperFactory()
Returns the FIDMapperFactory used for this data store

Returns:

setFIDMapperFactory

public void setFIDMapperFactory(FIDMapperFactory fmFactory)
                         throws java.lang.UnsupportedOperationException
Allows to override the default FIDMapperFactory.

Warning: the ovveride may not be supported by all data stores, in this case an exception will be thrown

Parameters:
fmFactory -
Throws:
java.lang.UnsupportedOperationException - - if the datastore does not allow the factory override

allSameOrder

public boolean allSameOrder(java.lang.String[] requestedNames,
                            FeatureType ft)
returns true if the requested names list all the attributes in the correct order.

Parameters:
requestedNames -
ft -
Returns:

getEnvelope

public com.vividsolutions.jts.geom.Envelope getEnvelope(java.lang.String typeName)
Retrieve approx bounds of all Features.

This result is suitable for a quick map display, illustrating the data. This value is often stored as metadata in databases such as oraclespatial.

Returns:
null as a generic implementation is not provided.


Copyright © GeoTools. All Rights Reserved.