From aff20544466124f3a84fac0b6714fba5b609b291 Mon Sep 17 00:00:00 2001
From: Dennis Kao <ulysseskao@ximple.com.tw>
Date: Tue, 06 Aug 2013 19:34:01 +0800
Subject: [PATCH] update geoserver config with rest

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java   |    4 
 xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java                              |    6 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/XGeosConfigDigesterUtils.java                             |   30 +++-
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java   |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java           |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java   |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java                          |  260 ++++++++++++++++++++++++++++++-------
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java   |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java     |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java       |    5 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java |    4 
 xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml                         |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java     |    4 
 xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml                                                            |   37 ++--
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java         |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java  |    4 
 xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/geoserver/config/DefaultXGeosDataConfigRules.xml          |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java     |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java     |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java         |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java       |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java                        |    4 
 22 files changed, 290 insertions(+), 112 deletions(-)

diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
index b7c4a37..966d32c 100644
--- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
+++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
@@ -1,27 +1,30 @@
 <?xml version='1.0' encoding='utf-8'?>
 
 <job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
-    version="1.8">
+                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                     xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
+                     version="1.8">
 
-    <pre-processing-commands>
-        <delete-jobs-in-group>*</delete-jobs-in-group>  <!-- clear all jobs in scheduler -->
-        <delete-triggers-in-group>*</delete-triggers-in-group> <!-- clear all triggers in scheduler -->
-    </pre-processing-commands>
+  <pre-processing-commands>
+    <delete-jobs-in-group>*</delete-jobs-in-group>
+    <!-- clear all jobs in scheduler -->
+    <delete-triggers-in-group>*</delete-triggers-in-group>
+    <!-- clear all triggers in scheduler -->
+  </pre-processing-commands>
 
-    <processing-directives>
-        <!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them -->
-        <overwrite-existing-data>true</overwrite-existing-data>
-        <!-- if there are any jobs/trigger in scheduler of same name (as in this file), and over-write is false, ignore them rather then generating an error -->
-        <ignore-duplicates>false</ignore-duplicates>
-    </processing-directives>
+  <processing-directives>
+    <!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them -->
+    <overwrite-existing-data>true</overwrite-existing-data>
+    <!-- if there are any jobs/trigger in scheduler of same name (as in this file), and over-write is false, ignore them rather then generating an error -->
+    <ignore-duplicates>false</ignore-duplicates>
+  </processing-directives>
 
   <schedule>
     <job>
-      <name>ConvertDgn2PostGisIntoPostgre</name>
+      <name>ConvertDMMS2PostGisWithGeoserver</name>
       <group>DEFAULT</group>
       <description>A job that convert dgn to postgis</description>
+      <!--job-class>com.ximple.eofms.jobs.OracleConvertDgn2PostGISJob</job-class-->
       <job-class>com.ximple.eofms.jobs.GeoserverIntegrateConfigJob</job-class>
       <!--volatility>false</volatility-->
       <durability>false</durability>
@@ -127,7 +130,7 @@
         </entry>
         <entry>
           <key>GEOSERVER_URL</key>
-          <value>http://www.ximple.com.tw/geoserver</value>
+          <value>http://10.10.1.6:8080/geoserver</value>
         </entry>
         <entry>
           <key>GEOSERVER_USER</key>
@@ -148,9 +151,9 @@
       <simple>
         <name>convertTrigger</name>
         <group>DEFAULT</group>
-        <job-name>ConvertDgn2PostGisIntoPostgre</job-name>
+        <job-name>ConvertDMMS2PostGisWithGeoserver</job-name>
         <job-group>DEFAULT</job-group>
-        <start-time>2011-03-01T18:00:00</start-time>
+        <start-time>2013-03-01T18:00:00</start-time>
         <!-- repeat indefinitely every 10 seconds -->
         <repeat-count>0</repeat-count>
         <repeat-interval>500</repeat-interval>
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
index ca2e17b..765f981 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
@@ -18,7 +18,7 @@
 import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeIdDispatchableFilter;
 import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -78,7 +78,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java
index 7eab711..2391245 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java
@@ -1,22 +1,28 @@
 package com.ximple.eofms.jobs;
 
+import com.vividsolutions.jts.geom.*;
 import com.ximple.eofms.geoserver.config.XGeosDataConfig;
 import com.ximple.eofms.geoserver.config.XGeosDataConfigMapping;
 import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
 import com.ximple.eofms.util.PrintfFormat;
+import com.ximple.eofms.util.XGeosConfigDigesterUtils;
 import it.geosolutions.geoserver.rest.GeoServerRESTManager;
 import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
 import it.geosolutions.geoserver.rest.GeoServerRESTReader;
 import it.geosolutions.geoserver.rest.decoder.RESTDataStore;
+import it.geosolutions.geoserver.rest.decoder.RESTStyleList;
+import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
+import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder;
 import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
+import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
 import it.geosolutions.geoserver.rest.manager.GeoServerRESTStoreManager;
 import org.apache.commons.collections.MultiMap;
 import org.apache.commons.digester3.Digester;
-import org.apache.commons.digester3.binder.DigesterLoader;
-import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.geotools.data.Transaction;
+import org.opengis.feature.type.FeatureType;
+import org.opengis.feature.type.GeometryDescriptor;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
 import org.quartz.JobExecutionContext;
@@ -32,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class GeoserverIntegrateConfigJob extends OracleConvertDgn2PostGISJob {
     final static Log logger = LogFactory.getLog(GeoserverIntegrateConfigJob.class);
@@ -39,9 +46,8 @@
     private static final String SKIPCONFIGJOB = "SKIPCONFIGJOB";
     private static final String MASTERMODE = "MASTERMODE";
     private static final String EPSG = "EPSG:";
-    private static final String DEFAULTNAMESPACE = "xtpc";
+    private static final String DEFAULT_NAMESPACE = "xtpc";
     private static final String XGEOSDATACONFIG_PATH = "xgeosdataconfig.xml";
-    private static final String XGEOSRULES_NAME = "DefaultXGeosDataConfigRules.xml";
     private static final String GEOSERVER_BASEURL = "GEOSERVER_URL";
     private static final String GEOSERVER_USER = "GEOSERVER_USER";
     private static final String GEOSERVER_PASS = "GEOSERVER_PASS";
@@ -58,6 +64,7 @@
     // private static final String GRANT_VIEWSQL = "GRANT SELECT ON TABLE \"%s\" TO public";
     private static final int SRSID_TWD97_ZONE119 = 3825;
     private static final int SRSID_TWD97_ZONE121 = 3826;
+    public static final String DEFAULT_STORENAME = "pgDMMS";
 
     private static XGeosDataConfigMapping xgeosDataConfigMapping = null;
 
@@ -102,38 +109,7 @@
 
     protected XGeosDataConfigMapping getConfigMapping() {
         if (xgeosDataConfigMapping == null) {
-            final URL rulesURL = XGeosDataConfigMapping.class.getResource(XGEOSRULES_NAME);
-            assert rulesURL != null;
-
-            DigesterLoader loader = DigesterLoader.newLoader( new FromXmlRulesModule() {
-                        @Override
-                        protected void loadRules() {
-                            loadXMLRules(rulesURL);
-                        }
-
-                    });
-            Digester digester = loader.newDigester();
-            /*
-            File rootDir = GeoserverDataDirectory.getGeoserverDataDirectory();
-            File xfmsConfigDir;
-
-            try {
-                xfmsConfigDir = GeoserverDataDirectory.findConfigDir(rootDir, "xdgnjobs");
-            } catch (ConfigurationException cfe) {
-                logger.warn("no xmark dir found, creating new one");
-                //if for some bizarre reason we don't fine the dir, make a new one.
-                xfmsConfigDir = new File(rootDir, "xdgnjobs");
-            }                            x
-
-            File xfmsConfigFile = new File(xfmsConfigDir, XGEOSDATACONFIG_PATH);
-            try {
-                xgeosDataConfigMapping = (XGeosDataConfigMapping) digester.parse(xfmsConfigFile);
-            } catch (IOException e) {
-                logger.warn(e.getMessage(), e);
-            } catch (SAXException e) {
-                logger.warn(e.getMessage(), e);
-            }
-            */
+            Digester digester = XGeosConfigDigesterUtils.getXGeosConfigDigester();
             final URL configDataURL = XGeosDataConfigMapping.class.getResource(XGEOSDATACONFIG_PATH);
             try {
                 xgeosDataConfigMapping = (XGeosDataConfigMapping) digester.parse(configDataURL);
@@ -153,10 +129,6 @@
         super.execute(jobExecutionContext);
 
         createTargetDataStore();
-        if (getSourceDataStore() == null) {
-            logger.warn("Cannot connect source oracle database.");
-            throw new JobExecutionException("Cannot connect source oracle database.");
-        }
 
         if (getTargetDataStore() == null) {
             logger.warn("Cannot connect source postgreSQL database.");
@@ -369,7 +341,7 @@
         sql = pf.sprintf(viewName);
         stmt.execute(sql);
         stmt.close();
-        connection.commit();
+        // connection.commit();
     }
 
     private void createOrReplaceExtraView(Connection connection, String schemaName, String tableName, String viewName,
@@ -388,7 +360,7 @@
         sql = pf.sprintf(viewName);
         stmt.execute(sql);
         stmt.close();
-        connection.commit();
+        // connection.commit();
     }
 
     private Timestamp retrieveCurrentSchemaTimestamp(Connection connection, short status) throws SQLException {
@@ -484,6 +456,74 @@
         }
     }
 
+    private HashMap<String, String> buildDefaultStylesMapping(XGeosDataConfigMapping configMapping) {
+        HashMap<String, String> result = new HashMap<String, String>();
+
+        for (Object key : configMapping.getMapping().keySet()) {
+            List xgeosConfigs = (List) configMapping.getMapping().get(key);
+            for (Object value : xgeosConfigs) {
+                XGeosDataConfig xgeosConfig = (XGeosDataConfig) value;
+
+                StringBuilder sbView = new StringBuilder("fsc-");
+                sbView.append(xgeosConfig.getFSC()).append("-c");
+                sbView.append(xgeosConfig.getCOMP()).append("-l");
+                sbView.append(xgeosConfig.getLEV()).append("-w");
+                sbView.append(xgeosConfig.getWEIGHT());
+
+                String viewName = sbView.toString();
+                if (!result.containsKey(viewName)) {
+                    result.put(viewName, xgeosConfig.getFTYPE());
+                } else {
+                    if (xgeosConfig.getFTYPE() != null) {
+                        if (!result.get(viewName).equals(xgeosConfig.getFTYPE()))
+                            logger.info("Style Define Diff:" + result.get(viewName) + " - " + xgeosConfig.getFTYPE());
+                    } else {
+                        logger.warn("xgeosConfig getFTYPE() is null - " + xgeosConfig.toString());
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    private void resetFeatureTypesMapping(JobExecutionContext executionContext, GeoServerRESTReader reader)  {
+        try {
+            Connection connection = targetDataStore.getConnection(Transaction.AUTO_COMMIT);
+            if (!checkCurrentRepositoryStatus(connection, DataReposVersionManager.VSSTATUS_LINKVIEW)) {
+                return;
+            }
+
+            RESTStyleList styleList = reader.getStyles();
+
+            // Map styles = dataConfig.getStyles();
+
+            XGeosDataConfigMapping mapping = getConfigMapping();
+            HashMap<String, String> defaultStyles = buildDefaultStylesMapping(mapping);
+
+            try {
+                /*
+                String[] dsFTypeNames = dataStore.getTypeNames();
+
+                for (String featureTypeName : dsFTypeNames) {
+                    String ftKey = dsConf.getId() + DataConfig.SEPARATOR + featureTypeName;
+                    FeatureTypeConfig ftConfig = dataConfig.getFeatureTypeConfig(ftKey);
+                    if (ftConfig == null) {
+                        if (!createFeatureTypeConfig(dataConfig, dsConf, dataStore, styles, featureTypeName, defaultStyles)) {
+                            LOGGER.info("Create Feature Failed. [" + featureTypeName + "]");
+                        }
+                    } else {
+                        updateFeatureTypeConfig(ftConfig, dataStore, styles, defaultStyles);
+                    }
+                }
+                */
+            } finally {
+                // if (dataStore != null) dataStore.dispose();
+            }
+        } catch (IOException e) {
+            logger.warn(e.getMessage(), e);
+        }
+    }
+
     private void resetGeoServerConfig(JobExecutionContext jobExecutionContext) {
         try {
             URL geoServerURL = new URL(_geoServerURL);
@@ -492,30 +532,32 @@
             List<String> workSpaces = reader.getWorkspaceNames();
             boolean found = false;
             for (String name : workSpaces) {
-                if (name.equalsIgnoreCase(DEFAULTNAMESPACE)) {
+                if (name.equalsIgnoreCase(DEFAULT_NAMESPACE)) {
                     found = true;
                     break;
                 }
             }
 
+            GeoServerRESTPublisher publisher = manager.getPublisher();
             if (!found) {
-                GeoServerRESTPublisher publisher = manager.getPublisher();
-                publisher.createWorkspace(DEFAULTNAMESPACE, new URI("http://tpc.ximple.com.tw/geodmms"));
+                publisher.createWorkspace(DEFAULT_NAMESPACE, new URI("http://tpc.ximple.com.tw/geodmms"));
             }
 
-            RESTDataStore dataStore = reader.getDatastore(DEFAULTNAMESPACE, "pgDMMS");
+            RESTDataStore dataStore = reader.getDatastore(DEFAULT_NAMESPACE, DEFAULT_STORENAME);
             if (dataStore == null) {
                 GeoServerRESTStoreManager storeManager = manager.getStoreManager();
-                GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder("pgDMMS");
+                GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder(DEFAULT_STORENAME);
                 store.setHost(_pgHost);
-                // store.setPort(_pgPort);
+                store.setPort(Integer.parseInt(_pgPort));
                 store.setDatabase(_pgDatabase);
-                store.setSchema("public");
+                store.setSchema(_pgSchema);
                 store.setUser(_pgUsername);
                 store.setPassword(_pgPassword);
-                storeManager.create(DEFAULTNAMESPACE, store);
+                storeManager.create(DEFAULT_NAMESPACE, store);
             }
 
+
+            resetFeatureTypesMapping(jobExecutionContext, reader);
 
             XGeosDataConfigMapping configMapping = getConfigMapping();
             MultiMap configMultiMap = configMapping.getMapping();
@@ -523,6 +565,12 @@
                 List values = (List) configMultiMap.get(key);
                 for (Object value : values) {
                     XGeosDataConfig xgeosConfig = (XGeosDataConfig) value;
+
+                    /*
+                    publishPostGISLayer(publisher, DEFAULT_NAMESPACE, DEFAULT_STORENAME,
+                            xgeosConfig.getPG(),
+                            "EPSG:" + SRSID_TWD97_ZONE121, "");
+                    */
                 }
             }
 
@@ -533,4 +581,116 @@
             logger.warn(e.getMessage(), e);
         }
     }
+
+    public boolean publishPostGISLayer(GeoServerRESTPublisher publisher, String workspace, String storename, String layername, String srs,
+                                  String defaultStyle) {
+
+        final GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder();
+
+        fte.setProjectionPolicy(GSResourceEncoder.ProjectionPolicy.REPROJECT_TO_DECLARED);
+        fte.addKeyword("KEYWORD");
+        fte.setTitle(layername);
+        fte.setName(layername);
+        fte.setSRS(srs); // srs=null?"EPSG:4326":srs);
+        final GSLayerEncoder layerEncoder = new GSLayerEncoder();
+        layerEncoder.setDefaultStyle(defaultStyle);
+        return publisher.publishDBLayer(workspace, storename, fte, layerEncoder);
+    }
+
+    protected String getDefaultFeatureTypeStyleId(Map styles, HashMap<String, String> defaultStyles, FeatureType featureType) {
+        String ftName = featureType.getName().getLocalPart();
+        boolean isNormalFeature = false;
+        boolean isLandBased = false;
+        boolean isIndex = false;
+        boolean isSmallIndex = false;
+        boolean isSymbol = false;
+        GeometryDescriptor geomAttrType = featureType.getGeometryDescriptor();
+        Class geomType = geomAttrType.getType().getBinding();
+        if (defaultStyles.containsKey(ftName)) {
+            String defaultStyleName = defaultStyles.get(ftName);
+            String styleName = retrieveDefaultStyle(styles, defaultStyleName, "unknown");
+            if (!styleName.equals("unknown")) {
+                return styleName;
+            }
+        }
+
+        if (ftName.indexOf("fsc") != -1) {
+            isNormalFeature = true;
+        }
+        if (ftName.indexOf("indexshape") != -1) {
+            isIndex = true;
+        }
+        if (ftName.indexOf("indexshapes") != -1) {
+            isSmallIndex = true;
+        }
+        if (ftName.indexOf("lnd") != -1) {
+            isLandBased = true;
+        }
+        /*
+        if (featureType.find("symbol") != -1) {
+            isSymbol = true;
+        }
+        */
+
+        if (Point.class.equals(geomType)) {
+            if (isSymbol) {
+                return retrieveDefaultStyle(styles, "pgTPC_Symbol", "point");
+            } else if (isIndex) {
+                return retrieveDefaultStyle(styles, "pgTPC_TpclidText", "point");
+            } else {
+                return retrieveDefaultStyle(styles, "pgTPC_Text", "point");
+            }
+        } else if (LineString.class.equals(geomType)) {
+            if ((!isIndex) && (!isLandBased)) {
+                return retrieveDefaultStyle(styles, "pgTPC_Conductor", "line");
+            } else if (isIndex) {
+                if (isSmallIndex)
+                    return retrieveDefaultStyle(styles, "pgTPC_INDEXSHAPES", "line");
+
+                return retrieveDefaultStyle(styles, "pgTPC_INDEXSHAPE", "line");
+            } else if (isLandBased) {
+                return retrieveDefaultStyle(styles, "pgTPC_LndcityLine", "line");
+            }
+        } else if (MultiPoint.class.equals(geomType)) {
+            if (isSymbol) {
+                return retrieveDefaultStyle(styles, "pgTPC_Symbol", "point");
+            } else {
+                return retrieveDefaultStyle(styles, "pgTPC_Text", "point");
+            }
+        } else if (Polygon.class.equals(geomType)) {
+            if ((!isIndex) && (!isLandBased)) {
+                return retrieveDefaultStyle(styles, "polygon", "polygon");
+            } else if (isIndex) {
+                return retrieveDefaultStyle(styles, "pgTPC_INDEXSHAPE", "polygon");
+            } else if (isLandBased) {
+                return retrieveDefaultStyle(styles, "pgTPC_LndcityPolygon", "polygon");
+            }
+        } else if (LinearRing.class.equals(geomType)) {
+            if (!isIndex) {
+                return retrieveDefaultStyle(styles, "polygon", "polygon");
+            } else {
+                return retrieveDefaultStyle(styles, "pgTPC_INDEXSHAPE", "polygon");
+            }
+        } else if (MultiLineString.class.equals(geomType)) {
+            if ((!isIndex) && (!isLandBased)) {
+                return retrieveDefaultStyle(styles, "pgTPC_Conductor", "line");
+            } else if (isLandBased) {
+                return retrieveDefaultStyle(styles, "pgTPC_LndcityLine", "line");
+            } else {
+                return retrieveDefaultStyle(styles, "pgTPC_INDEXSHAPE", "line");
+            }
+        } else if (MultiPolygon.class.equals(geomType)) {
+            return "polygon";
+        }
+
+        return "pgTPC_Symbol";
+    }
+
+    private static String retrieveDefaultStyle(Map styles, String styleName, String defaultStyleName) {
+        if (styles.containsKey(styleName)) {
+            return styleName;
+        } else
+            return defaultStyleName;
+    }
+
 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java
index 9f19654..a486435 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java
@@ -10,7 +10,7 @@
 import java.util.Iterator;
 import java.util.List;
 
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -76,7 +76,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java
index 20d1aca..dd4f1f0 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java
@@ -12,7 +12,7 @@
 
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -69,7 +69,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java
index 311a91b..08c0be1 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java
@@ -23,7 +23,7 @@
 import com.ximple.eofms.filter.ElementDispatcher;
 import com.ximple.eofms.filter.FeatureTypeEvent;
 import com.ximple.eofms.jobs.OracleElementLogger;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -97,7 +97,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
index ba88010..98c1a11 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
@@ -16,7 +16,7 @@
 import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -75,7 +75,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
index 426840b..5c1cef7 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
@@ -12,7 +12,7 @@
 
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -68,7 +68,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
index 8bb5c69..c7e0336 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
@@ -11,7 +11,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -91,7 +91,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
index 9b1bf26..70683e1 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
@@ -16,7 +16,7 @@
 import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -75,7 +75,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
index 1c3ebd6..c24b318 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
@@ -12,7 +12,7 @@
 
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -68,7 +68,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
index c7b85f1..09d4d6b 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
@@ -15,7 +15,7 @@
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.eofms.filter.ElementDispatcher;
 import com.ximple.eofms.jobs.OracleElementLogger;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -89,7 +89,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
index aa20926..85319ca 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
@@ -16,7 +16,7 @@
 import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -75,7 +75,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
index 60dc83d..27be640 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
@@ -12,7 +12,7 @@
 
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -69,7 +69,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
index 2a9eb93..853f72e 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
@@ -22,7 +22,7 @@
 import com.ximple.eofms.filter.ElementDispatcher;
 import com.ximple.eofms.filter.FeatureTypeEvent;
 import com.ximple.eofms.jobs.OracleElementLogger;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -35,7 +35,6 @@
 import org.geotools.data.Transaction;
 import org.geotools.data.jdbc.JDBCUtils;
 import org.geotools.feature.SchemaException;
-import org.geotools.feature.type.FeatureTypeImpl;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.postgresql.util.PSQLException;
@@ -96,7 +95,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
index 0e86fbb..d2f85db 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
@@ -17,7 +17,7 @@
 import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
 import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -78,7 +78,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
index 5825139..ffc965e 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
@@ -13,7 +13,7 @@
 
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
 import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import com.ximple.io.dgn7.ComplexElement;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
@@ -76,7 +76,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
index ea60c5a..8beaf47 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
@@ -13,7 +13,7 @@
 import java.util.Iterator;
 import java.util.Properties;
 
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -102,7 +102,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
-            Digester digester = DigesterUtils.getElementDigester();
+            Digester digester = ElementDigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/XGeosConfigDigesterUtils.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/XGeosConfigDigesterUtils.java
index 12df231..a89e7c8 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/XGeosConfigDigesterUtils.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/XGeosConfigDigesterUtils.java
@@ -1,11 +1,27 @@
 package com.ximple.eofms.util;
 
-/**
- * Created with IntelliJ IDEA.
- * User: ulysseskao
- * Date: 2013/8/6
- * Time: 下午 4:35
- * To change this template use File | Settings | File Templates.
- */
+import com.ximple.eofms.geoserver.config.XGeosDataConfigMapping;
+import org.apache.commons.digester3.Digester;
+import org.apache.commons.digester3.binder.DigesterLoader;
+import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
+
 public class XGeosConfigDigesterUtils {
+    private static final String XGEOSRULES_NAME = "DefaultXGeosDataConfigRules.xml";
+
+    protected static Digester digester = null;
+    protected static DigesterLoader loader = DigesterLoader.newLoader( new FromXmlRulesModule() {
+        @Override
+        protected void loadRules() {
+            loadXMLRules(XGeosDataConfigMapping.class.getResource(XGEOSRULES_NAME));
+        }
+
+    } );
+
+    static {
+        digester = loader.newDigester();
+    }
+
+    public static Digester getXGeosConfigDigester() {
+        return digester;
+    }
 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
index 635cd5c..72c6ad4 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
+++ b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding="big5"?>
-<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
+<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "digester-rules-3.0.dtd">
 <digester-rules>
   <pattern value="ElementDispatcherRules">
     <object-create-rule classname="com.ximple.eofms.filter.ElementDispatcher"/>
diff --git a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/geoserver/config/DefaultXGeosDataConfigRules.xml b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/geoserver/config/DefaultXGeosDataConfigRules.xml
index 0c141d5..3674334 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/geoserver/config/DefaultXGeosDataConfigRules.xml
+++ b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/geoserver/config/DefaultXGeosDataConfigRules.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding="big5"?>
-<!DOCTYPE digester-rules PUBLIC "-//Jakarta Apache //DTD digester-rules XML V1.0//EN" "digester-rules.dtd">
+<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "digester-rules-3.0.dtd">
 <digester-rules>
   <pattern value="dataroot">
     <object-create-rule classname="com.ximple.eofms.geoserver.config.XGeosDataConfigMapping"/>
diff --git a/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java b/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
index 6d351fb..21508da 100644
--- a/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
+++ b/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
@@ -3,7 +3,7 @@
 import java.io.File;
 import java.io.IOException;
 
-import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.eofms.util.ElementDigesterUtils;
 import org.apache.commons.digester3.Digester;
 import org.geotools.TestData;
 import org.testng.Assert;
@@ -17,7 +17,7 @@
     @Test
     public void testLoadRules() throws IOException {
         File rules = TestData.file(this, TestRulesName);
-        Digester digester = DigesterUtils.getElementDigester();
+        Digester digester = ElementDigesterUtils.getElementDigester();
         // File config = TestData.file(this, TestConfigName);
         // ElementDispatcher ed = (ElementDispatcher) digester.parse(config);
         Assert.assertNotNull(digester);
@@ -26,7 +26,7 @@
     @Test
     public void testLoadConfig() throws IOException, SAXException {
         File rules = TestData.file(this, TestRulesName);
-        Digester digester = DigesterUtils.getElementDigester();
+        Digester digester = ElementDigesterUtils.getElementDigester();
         File config = TestData.file(this, TestConfigName);
         ElementDispatcher ed = (ElementDispatcher) digester.parse(config);
         Assert.assertNotNull(ed);

--
Gitblit v0.0.0-SNAPSHOT