|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.geotools.data.AbstractDataStore
Represents a stating point for implementing your own DataStore.
The goal is to have this class provide everything else if you can only provide:
All remaining functionality is implemented against these methods, including Transaction and Locking Support. These implementations will not be optimal but they will work.
Pleae note that there may be a better place for you to start out from, (like JDBCDataStore).
Field Summary | |
protected boolean |
isWriteable
Flags AbstractDataStore to allow Modification. |
FeatureListenerManager |
listenerManager
Manages listener lists for FeatureSource implementation |
Constructor Summary | |
AbstractDataStore()
|
|
AbstractDataStore(boolean isWriteable)
|
Method Summary | |
protected InProcessLockingManager |
createLockingManager()
Currently returns an InProcessLockingManager. |
void |
createSchema(FeatureType featureType)
Subclass should implement to provide writing support. |
void |
fireAdded(Feature newFeature)
|
void |
fireChanged(Feature before,
Feature after)
|
void |
fireRemoved(Feature removedFeature)
|
FeatureReader |
getFeatureReader(FeatureType featureType,
Filter filter,
Transaction transaction)
Access a FeatureReader providing access to Feature information. |
FeatureReader |
getFeatureReader(Query query,
Transaction transaction)
|
protected abstract FeatureReader |
getFeatureReader(java.lang.String typeName)
Subclass must implement. |
FeatureSource |
getFeatureSource(java.lang.String typeName)
Default implementation based on getFeatureReader and getFeatureWriter. |
protected FeatureWriter |
getFeatureWriter(java.lang.String typeName)
Subclass should implement this to provide writing support. |
FeatureWriter |
getFeatureWriter(java.lang.String typeName,
Filter filter,
Transaction transaction)
Access FeatureWriter for modification of the DataStore contents. |
FeatureWriter |
getFeatureWriter(java.lang.String typeName,
Transaction transaction)
Access FeatureWriter for modification of the DataStore typeName. |
FeatureWriter |
getFeatureWriterAppend(java.lang.String typeName,
Transaction transaction)
Aquire a FeatureWriter for adding new content to a FeatureType. |
LockingManager |
getLockingManager()
Locking manager used for this DataStore. |
abstract FeatureType |
getSchema(java.lang.String typeName)
Retrieve FeatureType metadata by typeName . |
abstract java.lang.String[] |
getTypeNames()
Retrieves a list of of the available FeatureTypes |
FeatureSource |
getView(Query query)
|
void |
updateSchema(java.lang.String typeName,
FeatureType featureType)
Used to force namespace and CS info into a persistent change. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public FeatureListenerManager listenerManager
protected final boolean isWriteable
GetFeatureSource will return a FeatureStore is this is true.
Constructor Detail |
public AbstractDataStore()
public AbstractDataStore(boolean isWriteable)
Method Detail |
protected InProcessLockingManager createLockingManager()
Subclasses that implement real locking may override this method to
return null
.
public void fireAdded(Feature newFeature)
public void fireRemoved(Feature removedFeature)
public void fireChanged(Feature before, Feature after)
public abstract java.lang.String[] getTypeNames()
DataStore
This is simply a list of the FeatureType names as aquiring the actual FeatureType schemas may be expensive.
getTypeNames
in interface DataStore
public abstract FeatureType getSchema(java.lang.String typeName) throws java.io.IOException
DataStore
typeName
.
Retrieves the Schema information as a FeatureType object.
getSchema
in interface DataStore
typeName
- typeName of requested FeatureType
java.io.IOException
- If typeName cannot be foundprotected abstract FeatureReader getFeatureReader(java.lang.String typeName) throws java.io.IOException
typeName
-
java.io.IOException
protected FeatureWriter getFeatureWriter(java.lang.String typeName) throws java.io.IOException
typeName
-
java.io.IOException
- Subclass may throw IOException
java.lang.UnsupportedOperationException
- Subclass may implementpublic void createSchema(FeatureType featureType) throws java.io.IOException
createSchema
in interface DataStore
featureType
- Requested FeatureType
java.io.IOException
- Subclass may throw IOException
java.lang.UnsupportedOperationException
- Subclass may implementpublic void updateSchema(java.lang.String typeName, FeatureType featureType) throws java.io.IOException
DataStore
The provided featureType should completely cover the existing schema. All attributes should be accounted for and the typeName should match.
Suggestions:
updateSchema
in interface DataStore
typeName
-
java.io.IOException
public FeatureSource getView(Query query) throws java.io.IOException, SchemaException
java.io.IOException
SchemaException
public FeatureSource getFeatureSource(java.lang.String typeName) throws java.io.IOException
We should be able to optimize this to only get the RowSet once
getFeatureSource
in interface DataStore
typeName
-
java.io.IOException
DataStore.getFeatureSource(java.lang.String)
public FeatureReader getFeatureReader(Query query, Transaction transaction) throws java.io.IOException, SchemaException
java.io.IOException
SchemaException
public FeatureReader getFeatureReader(FeatureType featureType, Filter filter, Transaction transaction) throws java.io.IOException
DataStore
Filter is used as a low-level indication of constraints. (Implementations may resort to using a FilteredFeatureReader, or provide their own optimizations)
FeatureType provides a template for the returned FeatureReader
Transaction to externalize DataStore state on a per Transaction basis. The most common example is a JDBC datastore saving a Connection for use across several FeatureReader requests. Similarly a Shapefile reader may wish to redirect FeatureReader requests to a alternate filename over the course of a Transaction.
Notes For Implementing DataStore
Subclasses may need to retrieve additional attributes, beyond those
requested by featureType.getAttributeTypes(), in order to correctly
apply the filter
.
These Additional attribtues should be not be returned by
FeatureReader. Subclasses may use ReTypeFeatureReader to aid in
acomplishing this.
Helper classes for implementing a FeatureReader (in order):
Sample use (not optimized):
if (filter == Filter.ALL) {
return new EmptyFeatureReader(featureType);
}
String typeName = featureType.getTypeName();
FeatureType schema = getSchema( typeName );
FeatureReader reader = new DefaultFeatureReader( getAttributeReaders(), schema );
if (filter != Filter.NONE) {
reader = new FilteringFeatureReader(reader, filter);
}
if (transaction != Transaction.AUTO_COMMIT) {
Map diff = state(transaction).diff(typeName);
reader = new DiffFeatureReader(reader, diff);
}
if (!featureType.equals(reader.getFeatureType())) {
reader = new ReTypeFeatureReader(reader, featureType);
}
return reader
Locking support does not need to be provided for FeatureReaders.
Suggestions:
getFeatureReader
in interface DataStore
featureType
- Describes the form of the returned Featuresfilter
- Constraints used to limit the resultstransaction
- Transaction this query opperates against
java.io.IOException
DataStore.getFeatureReader(org.geotools.feature.FeatureType,
org.geotools.filter.Filter, org.geotools.data.Transaction)
public FeatureWriter getFeatureWriter(java.lang.String typeName, Filter filter, Transaction transaction) throws java.io.IOException
DataStore
The constructed FeatureWriter will be placed at the start of the
provided store
.
To limit FeatureWriter to the FeatureTypes defined by this DataStore, typeName is used to indicate FeatureType. The resulting feature writer will allow modifications against the same FeatureType provided by getSchema( typeName )
Notes For Implementing DataStore
The returned FeatureWriter does not support the addition on new Features
to FeatureType (it would need to police your modifications to agree
with filer
). As such it will return false
for getNext() when it reaches the end of the Query and
NoSuchElementException when next() is called.
Helper classes for implementing a FeatureWriter (in order):
getFeatureWriter
in interface DataStore
typeName
- Indicates featureType to be modifiedfilter
- constraints used to limit the modificationtransaction
- Transaction this query opperates against
java.io.IOException
public FeatureWriter getFeatureWriter(java.lang.String typeName, Transaction transaction) throws java.io.IOException
DataStore
FeatureWriters will need to be limited to the FeatureTypes defined by the DataStore, the easiest way to express this limitation is to the FeatureType by a provided typeName.
The returned FeatureWriter will return false
for getNext()
when it reaches the end of the Query.
getFeatureWriter
in interface DataStore
typeName
- Indicates featureType to be modifiedtransaction
- Transaction this query opperates against
java.io.IOException
public FeatureWriter getFeatureWriterAppend(java.lang.String typeName, Transaction transaction) throws java.io.IOException
DataStore
This FeatureWriter will return false
for hasNext(), however
next() may be used to aquire new Features that may be writen out to add
new content.
getFeatureWriterAppend
in interface DataStore
typeName
- transaction
-
java.io.IOException
public LockingManager getLockingManager()
By default AbstractDataStore makes use of InProcessLockingManager.
getLockingManager
in interface DataStore
DataStore.getLockingManager()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |