From 2e0dbaea5e750552545100ed728027defc678d23 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Mon, 24 Mar 2008 19:57:27 +0800
Subject: [PATCH] EOFM-18

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java |   75 +++++++++++++++++++++++++++++++++++--
 1 files changed, 70 insertions(+), 5 deletions(-)

diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
index 7bddaa9..0a78e96 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
@@ -2,7 +2,11 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLDecoder;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
@@ -15,6 +19,8 @@
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
 import org.apache.commons.transaction.util.CommonsLoggingLogger;
 import org.apache.commons.transaction.util.LoggerFacade;
+import org.apache.commons.digester.Digester;
+import org.apache.commons.digester.xmlrules.DigesterLoader;
 import org.geotools.data.FeatureWriter;
 import org.geotools.data.Transaction;
 import org.geotools.data.shapefile.ShapefileDataStore;
@@ -22,6 +28,8 @@
 import org.geotools.feature.FeatureType;
 import org.geotools.feature.IllegalAttributeException;
 import org.geotools.feature.SimpleFeature;
+import org.geotools.TestData;
+import org.xml.sax.SAXException;
 
 import com.vividsolutions.jts.util.Assert;
 
@@ -30,7 +38,9 @@
 import com.ximple.eofms.filter.CreateLineStringStrategy;
 import com.ximple.eofms.filter.ElementDispatcher;
 import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
 
 public class OracleConvertJobContext
 {
@@ -226,6 +236,11 @@
 
     protected static final long TIMEOUT = Long.MAX_VALUE;
 
+    /**
+     * Encoding of URL path.
+     */
+    private static final String ENCODING = "UTF-8";
+
     static
     {
         try
@@ -252,6 +267,7 @@
     }
 
     private String _oracleHost;
+    private String _filterConfig;
     private String _oracleInstance;
     private String _oraclePort;
     private String _dataPath;
@@ -264,9 +280,10 @@
     private HashMap featuresContext = new HashMap();
     private PessimisticMapWrapper txFeaturesContext;
 
-    public OracleConvertJobContext()
+    public OracleConvertJobContext(String filterConfig)
     {
         properties = new Properties();
+        _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
 
@@ -274,9 +291,40 @@
 
     private ElementDispatcher createElementDispatcher()
     {
-        ElementDispatcher dispatcher = new ElementDispatcher();
-        dispatcher.addRule(new TypeCompIdDispatchableFilter("Conductor", new CreateLineStringStrategy(), 106, 0));
-        return dispatcher;
+        URL rulesURL = getClass().getResource("ElementDispatcherRules.xml");
+
+        File rulesFile = null;
+        try
+        {
+            rulesFile = new File(URLDecoder.decode(rulesURL.getPath(), ENCODING));
+            if (!rulesFile.exists()) {
+                throw new FileNotFoundException("Could not locate test-data: " + rulesFile);
+            }
+            Digester digester = DigesterLoader.createDigester(rulesFile.toURI().toURL());
+            File config = new File(_filterConfig);
+            if (!config.exists())
+            {
+                config = new File("conf\\DefaultConvertShpFilter.xml");
+            }
+            ElementDispatcher dispatcher = (ElementDispatcher) digester.parse(config);
+            return dispatcher;
+        } catch (UnsupportedEncodingException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        } catch (MalformedURLException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        } catch (IOException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        } catch (SAXException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        }
     }
 
     public void setLogin(String userName, String password)
@@ -338,7 +386,15 @@
     {
         Feature feature = elementDispatcher.execute(element);
         if (feature == null)
+        {
+            FrammeAttributeData linkage =
+                    AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
+            logger.debug("Unknown Element:" + element.getElementType().toString() +
+                ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" +
+            (linkage == null ? "NULL" : (linkage.getFsc() + "|" +linkage.getComponentID())));
+
             return;
+        }
 
         if (!txFeaturesContext.containsKey(feature.getFeatureType()))
         {
@@ -355,7 +411,13 @@
 
     public void commitTransaction()
     {
-        txFeaturesContext.commitTransaction();
+        if (!txFeaturesContext.isEmpty())
+        {
+            logger.debug("Transaction size = " + txFeaturesContext.size());
+            txFeaturesContext.commitTransaction();
+        } else
+            logger.debug("Transaction is empty.");
+        
         if (!featuresContext.isEmpty())
         {
             updateDataStore();
@@ -382,6 +444,8 @@
             {
                 FeatureType featureType = (FeatureType) it.next();
                 File sfile = new File(_dataPath + "\\" + featureType.getTypeName());
+                logger.debug("Begin Save shapefile:" + sfile.toURI());
+
                 ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURL());
                 shapefileDataStore.createSchema(featureType);
                 FeatureWriter writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT);
@@ -393,6 +457,7 @@
                     ((SimpleFeature) writer.next()).setAttributes(feature.getAttributes(null));
                 }
                 writer.close();
+                logger.debug("End Save shapefile:" + sfile.toURI());
             }
             featuresContext.clear();
         } catch (MalformedURLException e)

--
Gitblit v0.0.0-SNAPSHOT