forked from geodmms/xdgnjobs

Dennis Kao
2013-08-06 aff20544466124f3a84fac0b6714fba5b609b291
update geoserver config with rest
22 files modified
380 ■■■■ changed files
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml 15 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java 260 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java 5 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/XGeosConfigDigesterUtils.java 30 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/geoserver/config/DefaultXGeosDataConfigRules.xml 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java 6 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
@@ -6,8 +6,10 @@
    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 -->
    <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>
@@ -19,9 +21,10 @@
  <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>
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);
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;
                }
            }
            if (!found) {
                GeoServerRESTPublisher publisher = manager.getPublisher();
                publisher.createWorkspace(DEFAULTNAMESPACE, new URI("http://tpc.ximple.com.tw/geodmms"));
            if (!found) {
                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;
    }
}
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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;
    }
}
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"/>
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"/>
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);