forked from geodmms/xdgnjobs

?? ?
2008-03-27 6de5086ab3e8e7fa852b1e5d9a31aabade25e017
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
@@ -38,6 +38,7 @@
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
public class OracleConvertJobContext extends AbstractOracleJobContext
{
    static Log logger = LogFactory.getLog(OracleConvertJobContext.class);
@@ -59,6 +60,7 @@
    private ElementDispatcher elementDispatcher;
    private HashMap featuresContext = new HashMap();
    private HashMap featuresWriterContext = new HashMap();
    private PessimisticMapWrapper txFeaturesContext;
    private JobExecutionContext executionContext;
@@ -137,17 +139,19 @@
    public void startTransaction()
    {
        txFeaturesContext.startTransaction();
       //txFeaturesContext.startTransaction();
    }
    public void commitTransaction()
    {
        if (!txFeaturesContext.isEmpty())
        {
       if (!txFeaturesContext.isEmpty())
       {
            logger.debug("Transaction size = " + txFeaturesContext.size());
            txFeaturesContext.commitTransaction();
           //txFeaturesContext.commitTransaction();
        } else
        {
            logger.debug("Transaction is empty.");
        }
        if (!featuresContext.isEmpty())
        {
@@ -157,7 +161,7 @@
    public void rollbackTransaction()
    {
        txFeaturesContext.rollbackTransaction();
       //txFeaturesContext.rollbackTransaction();
        if (!featuresContext.isEmpty())
        {
            updateDataStore();
@@ -167,7 +171,7 @@
    private void updateDataStore()
    {
        // todo:
        Iterator it = featuresContext.keySet().iterator();
        Iterator it = featuresContext.keySet().iterator();
        try
        {
@@ -177,9 +181,23 @@
                File sfile = new File(_dataPath + "\\" + featureType.getTypeName());
                logger.debug("Begin Save shapefile:" + sfile.toURI());
                ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL());
                shapefileDataStore.createSchema(featureType);
                FeatureWriter writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT);
                FeatureWriter writer = null;
                if(featuresWriterContext.containsKey( featureType.getTypeName()))
                {
                    writer = (FeatureWriter) featuresWriterContext.get(featureType.getTypeName()) ;
                }
                else
                {
                  ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL());
                  shapefileDataStore.createSchema(featureType);
                  writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT);
                  if(this.featuresWriterContext == null)
                  {
                     this.featuresWriterContext =  new HashMap();
                  }
                  featuresWriterContext.put(featureType.getTypeName() , writer);
                }
                ArrayList features = (ArrayList) featuresContext.get(featureType);
                Iterator itFeature = features.iterator();
                while (itFeature.hasNext())
@@ -187,7 +205,7 @@
                    Feature feature = (Feature) itFeature.next();
                    ((SimpleFeature) writer.next()).setAttributes(feature.getAttributes(null));
                }
                writer.close();
                //writer.close();
                logger.debug("End Save shapefile:" + sfile.toURI());
            }
            featuresContext.clear();
@@ -213,4 +231,16 @@
    {
        executionContext = context;
    }
    public void closeFeatureWrite() throws IOException {
       Iterator iter =   this.featuresWriterContext.values().iterator();
        while(iter.hasNext())
        {
           FeatureWriter writer = (FeatureWriter) iter.next();
           writer.close();
        }
        this.featuresWriterContext = null;
    }
}