org.geotools.data.shapefile
Class ShapefileFeatureWriter

java.lang.Object
  extended by org.geotools.data.shapefile.ShapefileFeatureWriter
All Implemented Interfaces:
FeatureWriter<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>

public class ShapefileFeatureWriter
extends java.lang.Object
implements FeatureWriter<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>

A FeatureWriter for ShapefileDataStore. Uses a write and annotate technique to avoid buffering attributes and geometries. Because the shapefile and dbf require header information which can only be obtained by reading the entire series of Features, the headers are updated after the initial write completes.

Author:
Jesse Eichar

Field Summary
protected  ShapefileAttributeReader attReader
           
protected  com.vividsolutions.jts.geom.Envelope bounds
           
protected  org.opengis.feature.simple.SimpleFeature currentFeature
           
protected  DbaseFileWriter dbfWriter
           
protected  java.lang.Object[] emptyAtts
           
protected  FeatureReader<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature> featureReader
           
protected  org.opengis.feature.simple.SimpleFeatureType featureType
           
protected  ShapeHandler handler
           
protected  int records
           
protected  int shapefileLength
           
protected  ShapeType shapeType
           
protected  ShpFiles shpFiles
           
protected  ShapefileWriter shpWriter
           
protected  java.util.Map<ShpFileType,StorageFile> storageFiles
           
protected  java.lang.Object[] transferCache
           
protected  byte[] writeFlags
           
 
Constructor Summary
ShapefileFeatureWriter(java.lang.String typeName, ShpFiles shpFiles, ShapefileAttributeReader attsReader, FeatureReader<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature> featureReader, java.nio.charset.Charset charset)
           
 
Method Summary
protected  void clean()
          Clean up our temporary write if there was one
 void close()
          Release resources and flush the header information.
protected  void doClose()
           
protected  void finalize()
          In case someone doesn't close me.
protected  void flush()
          Go back and update the headers with the required info.
 org.opengis.feature.simple.SimpleFeatureType getFeatureType()
          FeatureType this reader has been configured to create.
 boolean hasNext()
          Query whether this FeatureWriter has another Feature.
 org.opengis.feature.simple.SimpleFeature next()
          Reads a Feature from the underlying AttributeReader.
protected  java.lang.String nextFeatureId()
          Called when a new feature is being created and a new fid is required
 void remove()
          Removes current Feature, must be called before hasNext.
 void write()
          Wrties the current Feature, must be called before hasNext.
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

featureReader

protected FeatureReader<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature> featureReader

attReader

protected ShapefileAttributeReader attReader

currentFeature

protected org.opengis.feature.simple.SimpleFeature currentFeature

featureType

protected org.opengis.feature.simple.SimpleFeatureType featureType

emptyAtts

protected java.lang.Object[] emptyAtts

transferCache

protected java.lang.Object[] transferCache

shapeType

protected ShapeType shapeType

handler

protected ShapeHandler handler

shapefileLength

protected int shapefileLength

records

protected int records

writeFlags

protected byte[] writeFlags

shpWriter

protected ShapefileWriter shpWriter

dbfWriter

protected DbaseFileWriter dbfWriter

storageFiles

protected java.util.Map<ShpFileType,StorageFile> storageFiles

bounds

protected com.vividsolutions.jts.geom.Envelope bounds

shpFiles

protected ShpFiles shpFiles
Constructor Detail

ShapefileFeatureWriter

public ShapefileFeatureWriter(java.lang.String typeName,
                              ShpFiles shpFiles,
                              ShapefileAttributeReader attsReader,
                              FeatureReader<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature> featureReader,
                              java.nio.charset.Charset charset)
                       throws java.io.IOException
Throws:
java.io.IOException
Method Detail

flush

protected void flush()
              throws java.io.IOException
Go back and update the headers with the required info.

Throws:
java.io.IOException - DOCUMENT ME!

finalize

protected void finalize()
                 throws java.lang.Throwable
In case someone doesn't close me.

Overrides:
finalize in class java.lang.Object
Throws:
java.lang.Throwable - DOCUMENT ME!

clean

protected void clean()
              throws java.io.IOException
Clean up our temporary write if there was one

Throws:
java.io.IOException - DOCUMENT ME!

close

public void close()
           throws java.io.IOException
Release resources and flush the header information.

Specified by:
close in interface FeatureWriter<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>
Throws:
java.io.IOException - DOCUMENT ME!

doClose

protected void doClose()
                throws java.io.IOException
Throws:
java.io.IOException

getFeatureType

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

Specified by:
getFeatureType in interface FeatureWriter<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>
Returns:
FeatureType this writer has been configured to create.

hasNext

public boolean hasNext()
                throws java.io.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<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>
Returns:
true if an additional Feature is available.
Throws:
java.io.IOException - DOCUMENT ME!

next

public org.opengis.feature.simple.SimpleFeature next()
                                              throws java.io.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<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>
Returns:
Feature from Query, or newly appended Feature
Throws:
java.io.IOException - DOCUMENT ME!

nextFeatureId

protected java.lang.String nextFeatureId()
Called when a new feature is being created and a new fid is required

Returns:
a fid for the new feature

remove

public void remove()
            throws java.io.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<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>
Throws:
java.io.IOException - DOCUMENT ME!

write

public void write()
           throws java.io.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<org.opengis.feature.simple.SimpleFeatureType,org.opengis.feature.simple.SimpleFeature>
Throws:
java.io.IOException


Copyright © 1996-2010 Geotools. All Rights Reserved.