org.geotools.data.jdbc
Class JDBCFeatureWriter

Object
  extended by JDBCFeatureWriter
All Implemented Interfaces:
FeatureWriter<SimpleFeatureType,SimpleFeature>
Direct Known Subclasses:
JDBCPSFeatureWriter, JDBCTextFeatureWriter

public class JDBCFeatureWriter
extends Object
implements FeatureWriter<SimpleFeatureType,SimpleFeature>

JDBCDataStore implementation of the FeatureWriter interface

Author:
aaime
Module:

Field Summary
protected  boolean closed
           
protected  SimpleFeature current
           
protected  Object[] fidAttributes
           
protected  SimpleFeature live
           
protected  QueryData queryData
           
protected  FeatureReader<SimpleFeatureType,SimpleFeature> reader
           
 
Constructor Summary
JDBCFeatureWriter(FeatureReader<SimpleFeatureType,SimpleFeature> reader, QueryData queryData)
           
 
Method Summary
 void close()
          Release the underlying resources.
protected  void doInsert(MutableFIDFeature mutable)
          Inserts a feature into the database.
protected  void doUpdate(SimpleFeature live, SimpleFeature current)
           
protected  String encodeColumnName(String colName)
          Encodes the colName, default just calls encodeName(String).
protected  String encodeName(String tableName)
          Encodes the tableName, default is to do nothing, but postgis will override and put double quotes around the tablename.
 SimpleFeatureType getFeatureType()
          FeatureType this reader has been configured to create.
 boolean hasNext()
          Query whether this FeatureWriter has another Feature.
 SimpleFeature next()
          Reads a Feature from the underlying AttributeReader.
 void remove()
          Removes current Feature, must be called before hasNext.
protected  boolean useQueryDataForInsert()
          Returns true if QueryData is used to insert rows, false if some other means is used
 void write()
          Wrties the current Feature, must be called before hasNext.
 
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

queryData

protected QueryData queryData

reader

protected FeatureReader<SimpleFeatureType,SimpleFeature> reader

live

protected SimpleFeature live

current

protected SimpleFeature current

closed

protected boolean closed

fidAttributes

protected Object[] fidAttributes
Constructor Detail

JDBCFeatureWriter

public JDBCFeatureWriter(FeatureReader<SimpleFeatureType,SimpleFeature> reader,
                         QueryData queryData)
Method Detail

getFeatureType

public SimpleFeatureType getFeatureType()
Description copied from interface: FeatureWriter
FeatureType this reader has been configured to create.

Specified by:
getFeatureType in interface FeatureWriter<SimpleFeatureType,SimpleFeature>
Returns:
FeatureType this writer has been configured to create.
See Also:
FeatureWriter.getFeatureType()

next

public SimpleFeature next()
                   throws IOException
Description copied from interface: FeatureWriter
Reads a Feature from the underlying AttributeReader.

This method may return a Feature even though hasNext() returns false, this allows FeatureWriters to provide an ability to append content.

Specified by:
next in interface FeatureWriter<SimpleFeatureType,SimpleFeature>
Returns:
Feature from Query, or newly appended Feature
Throws:
IOException - DOCUMENT ME!
See Also:
FeatureWriter.next()

useQueryDataForInsert

protected boolean useQueryDataForInsert()
Returns true if QueryData is used to insert rows, false if some other means is used


remove

public void remove()
            throws IOException
Description copied from interface: FeatureWriter
Removes current Feature, must be called before hasNext.

FeatureWriters will need to allow all FeatureSources of the same typeName to issue a FeatureEvent event of type FeatureEvent.FEATURES_REMOVED when this method is called.

If this FeatureWriter is opperating against a Transaction FEATURES_REMOVED events should only be sent to FeatureSources operating on the same Transaction. When Transaction commit() is called other FeatureSources will be informed of the modifications.

When the current Feature has been provided as new content, this method "cancels" the add opperation (and notification needed).

Specified by:
remove in interface FeatureWriter<SimpleFeatureType,SimpleFeature>
Throws:
IOException - DOCUMENT ME!
See Also:
FeatureWriter.remove()

write

public void write()
           throws IOException
Description copied from interface: FeatureWriter
Wrties the current Feature, must be called before hasNext.

FeautreWriters will need to allow FeatureSources of the same typeName to issue a FeatureEvent:

If this FeatureWriter is opperating against a Transaction the FEATURES_MODIFIED or FEATURES_ADDED events should only be sent to FeatureSources opperating on the same Transaction. When Transaction commit() is called other FeatureSources will be informed of the modifications.

If you have not called write() when you call hasNext() or next(), no modification will occur().

Specified by:
write in interface FeatureWriter<SimpleFeatureType,SimpleFeature>
Throws:
IOException
See Also:
FeatureWriter.write()

doUpdate

protected void doUpdate(SimpleFeature live,
                        SimpleFeature current)
                 throws IOException,
                        SQLException
Throws:
IOException
SQLException

doInsert

protected void doInsert(MutableFIDFeature mutable)
                 throws IOException,
                        SQLException
Inserts a feature into the database.

This method should both insert a Feature, and update its FID in case the FIDMapper works over database generated ids like autoincrement fields, sequences, and object ids.

Postgis needs to do this seperately. With updates it can just override the geometry stuff, using a direct sql update statement, but for inserts it can't update a row that doesn't exist yet.

Parameters:
mutable -
Throws:
IOException
SQLException

hasNext

public boolean hasNext()
                throws IOException
Description copied from interface: FeatureWriter
Query whether this FeatureWriter has another Feature.

Please note: it is more efficient to construct your FeatureWriter with a Filer (to skip entries you do not want), than to force the creation of entire Features only to skip over them.

FeatureWriters that support append opperations will allow calls to next, even when haveNext() returns false.

Specified by:
hasNext in interface FeatureWriter<SimpleFeatureType,SimpleFeature>
Returns:
true if an additional Feature is available.
Throws:
IOException - DOCUMENT ME!
See Also:
FeatureWriter.hasNext()

close

public void close()
           throws IOException
Description copied from interface: FeatureWriter
Release the underlying resources.

Specified by:
close in interface FeatureWriter<SimpleFeatureType,SimpleFeature>
Throws:
IOException - if there there are problems releasing underlying resources, or possibly if close has been called (up to the implementation).
See Also:
FeatureWriter.close()

encodeName

protected String encodeName(String tableName)
Encodes the tableName, default is to do nothing, but postgis will override and put double quotes around the tablename.


encodeColumnName

protected String encodeColumnName(String colName)
Encodes the colName, default just calls encodeName(String).



Copyright © 1996-2009 Geotools. All Rights Reserved.