forked from geodmms/xdgnjobs

?? ?
2008-06-03 c335918811ddc282a5e182b2e89878ca258c94f2
update for EOFM-111, EOFM-112
1 files copied
21 files modified
9 files added
8 files renamed
2791 ■■■■■ changed files
.gitattributes 26 ●●●●● patch | view | raw | blame | history
xdgnjobs/pom.xml 23 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-dgnio/pom.xml 4 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-jobcarrier/pom.xml 6 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml 40 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs_shapefiles.xml 99 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/pom.xml 6 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/collector/FeatureClassification.java 28 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/collector/FeatureTypeCollector.java 48 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java 2 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java 19 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java 21 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java 23 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java 22 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java 14 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java 978 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java 1025 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java 28 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java 3 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java 12 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/DummyFeatureConvertJobContext.java 95 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/FeatureDgnConvertJobContext.java 37 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/GeneralDgnConvertJobContext.java 43 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/IndexDgnConvertJobContext.java 6 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertOraSDOJobContext.java 5 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertPostGISJobContext.java 5 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertShapefilesJobContext.java 44 ●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java 4 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/TWD97GeometryConverterDecorator.java 2 ●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml 16 ●●●●● patch | view | raw | blame | history
xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultMapGroups.xml 91 ●●●●● patch | view | raw | blame | history
.gitattributes
@@ -42,8 +42,11 @@
xdgnjobs/ximple-jobcarrier/src/main/resources/log4j.properties svneol=native#text/plain
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz.properties svneol=native#text/plain
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml svneol=native#text/xml
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs_shapefiles.xml svneol=native#text/xml
xdgnjobs/ximple-jobcarrier/src/test/java/com/ximple/eofms/XQuartzJobCarrierTest.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/pom.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/collector/FeatureClassification.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/collector/FeatureTypeCollector.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractFLinkageDispatchableFilter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java svneol=native#text/plain
@@ -61,19 +64,23 @@
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractDgnFileJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleElementLogger.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/DummyFeatureConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/FeatureDgnConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/GeneralDgnConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/IndexDgnConvertJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertOraSDOJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertPostGISJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertShapefilesJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/Base64.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/BinConverter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/Bits.java svneol=native#text/plain
@@ -85,10 +92,13 @@
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/PrintfFormat.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/StringUtils.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/TPCLIDConverter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/TWD97GeometryConverterDecorator.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/TWDDatumConverter.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/main/resources/conf/ConvertShpFilterForLayer.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultMapGroups.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java svneol=native#text/plain
xdgnjobs/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml svneol=native#text/xml
xdgnjobs/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml svneol=native#text/xml
xdgnjobs/pom.xml
@@ -18,8 +18,8 @@
    <test.maxHeapSize>512M</test.maxHeapSize>
    <src.output>${basedir}/target</src.output>
    <java5>1.5</java5>
    <xdgnio.version>0.3.0</xdgnio.version>
    <gt.version>2.4.2</gt.version>
    <xdgnio.version>0.6.0</xdgnio.version>
    <gt.version>2.4.4</gt.version>
    <failIfNoTests>false</failIfNoTests>
  </properties>
@@ -60,7 +60,7 @@
  <groupId>com.ximple.eofms</groupId>
  <artifactId>ximple-dgnjobs</artifactId>
  <packaging>pom</packaging>
  <version>0.3.0</version>
  <version>0.6.0</version>
  <name>ximple-dgnjobs</name>
  <url>http://www.ximple.com.tw</url>
@@ -204,6 +204,21 @@
        <artifactId>gt2-data</artifactId>
        <version>${gt.version}</version>
      </dependency>
      <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt2-oracle-spatial</artifactId>
        <version>${gt.version}</version>
      </dependency>
      <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt2-postgis</artifactId>
        <version>${gt.version}</version>
      </dependency>
      <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt2-mysql</artifactId>
        <version>${gt.version}</version>
      </dependency>
      <!-- because main and sample-data depend on referencing we need a tie breaker -->
      <dependency>
@@ -258,7 +273,7 @@
      <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>5.7</version>
        <version>5.8</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
xdgnjobs/ximple-dgnio/pom.xml
@@ -7,7 +7,7 @@
  <parent>
    <groupId>com.ximple.eofms</groupId>
    <artifactId>ximple-dgnjobs</artifactId>
    <version>0.3.0</version>
    <version>0.6.0</version>
  </parent>
  
  <!-- =========================================================== -->
@@ -15,7 +15,7 @@
  <!-- =========================================================== -->
  <groupId>com.ximple.eofms</groupId>
  <artifactId>ximple-dgnio</artifactId>
  <version>0.3.0</version>
  <version>0.6.0</version>
  <packaging>jar</packaging>
  <name>ximple-dgnio-1.0.x</name>
  <url>http://www.ximple.com.tw</url>
xdgnjobs/ximple-jobcarrier/pom.xml
@@ -6,19 +6,19 @@
  <parent>
    <groupId>com.ximple.eofms</groupId>
    <artifactId>ximple-dgnjobs</artifactId>
    <version>0.3.0</version>
    <version>0.6.0</version>
  </parent>
  <groupId>com.ximple.eofms</groupId>
  <artifactId>ximple-jobcarrier</artifactId>
  <version>0.3.0</version>
  <version>0.6.0</version>
  <packaging>jar</packaging>
  <name>ximple-jobcarrier</name>
  <url>http://maven.apache.org</url>
  <properties>
    <xdgnio.version>0.3.0</xdgnio.version>
    <xdgnio.version>0.6.0</xdgnio.version>
  </properties>
  <scm>
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
@@ -8,24 +8,48 @@
  <job>
    <job-detail>
      <name>ConvertDgn2ShpIntoDirectory</name>
      <name>ConvertDgn2PostGisIntoPostgre</name>
      <group>DEFAULT</group>
      <description>A job that convert dgn to shapefiles</description>
      <job-class>com.ximple.eofms.jobs.OracleConvertDgn2ShpJob</job-class>
      <job-class>com.ximple.eofms.jobs.OracleConvertDgn2PostGISJob</job-class>
      <volatility>false</volatility>
      <durability>false</durability>
      <recover>false</recover>
      <job-data-map allows-transient-data="true">
        <entry>
          <key>SHPDATA_DIR</key>
          <key>JOBDATA_DIR</key>
          <value>g:\temp\data</value>
        </entry>
        <!--
        <entry>
          <key>SHPFILTER_CONF</key>
          <key>ELMSFILTER_CONF</key>
          <value></value>
        </entry>
        -->
        <entry>
          <key>PGHOST</key>
          <value>192.168.11.200</value>
        </entry>
        <entry>
          <key>PGDDATBASE</key>
          <value>nstpc</value>
        </entry>
        <entry>
          <key>PGPORT</key>
          <value>5432</value>
        </entry>
        <entry>
          <key>PGSCHEMA</key>
          <value>public</value>
        </entry>
        <entry>
          <key>PGUSER</key>
          <value>spatialdb</value>
        </entry>
        <entry>
          <key>PGPASS</key>
          <value>spatialdb000</value>
        </entry>
        <entry>
          <key>ORAHOST</key>
          <value>192.168.11.200</value>
@@ -71,8 +95,12 @@
          <value>true</value>
        </entry>
        <entry>
          <key>USEWKB</key>
          <value>true</value>
        </entry>
        <entry>
          <key>TESTMODE</key>
          <value>FALSE</value>
          <value>false</value>
        </entry>
        <entry>
          <key>TESTCOUNT</key>
@@ -85,7 +113,7 @@
      <simple>
        <name>convertTrigger</name>
        <group>DEFAULT</group>
        <job-name>ConvertDgn2ShpIntoDirectory</job-name>
        <job-name>ConvertDgn2PostGisIntoPostgre</job-name>
        <job-group>DEFAULT</job-group>
        <start-time>2008-03-01T18:10:00</start-time>
        <!-- repeat indefinitely every 10 seconds -->
xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs_shapefiles.xml
New file
@@ -0,0 +1,99 @@
<?xml version='1.0' encoding='utf-8'?>
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData
        http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"
        version="1.5">
  <job>
    <job-detail>
      <name>ConvertDgn2ShpIntoDirectory</name>
      <group>DEFAULT</group>
      <description>A job that convert dgn to shapefiles</description>
      <job-class>com.ximple.eofms.jobs.OracleConvertDgn2ShpJob</job-class>
      <volatility>false</volatility>
      <durability>false</durability>
      <recover>false</recover>
      <job-data-map allows-transient-data="true">
        <entry>
          <key>SHPDATA_DIR</key>
          <value>g:\temp\data</value>
        </entry>
        <!--
        <entry>
          <key>ELMSFILTER_CONF</key>
          <value></value>
        </entry>
        -->
        <entry>
          <key>ORAHOST</key>
          <value>192.168.11.200</value>
        </entry>
        <entry>
          <key>ORAINST</key>
          <value>nntpc</value>
        </entry>
        <entry>
          <key>ORAPORT</key>
          <value>1521</value>
        </entry>
        <entry>
          <key>ORAUSER</key>
          <value>spatialdb</value>
        </entry>
        <entry>
          <key>ORAPASS</key>
          <value>spatialdb000</value>
        </entry>
        <entry>
          <key>ORGSCHEMA</key>
          <value>SPATIALDB, CMMS_SPATIALDB</value>
        </entry>
        <entry>
          <key>CONVERTDB</key>
          <value>false</value>
        </entry>
        <entry>
          <key>CONVERTFILE</key>
          <value>false</value>
        </entry>
        <entry>
          <key>CONVERTELEMIN</key>
          <value>false</value>
        </entry>
        <entry>
          <key>CREATEDUMMY</key>
          <value>true</value>
        </entry>
        <entry>
          <key>ELEMLOG</key>
          <value>true</value>
        </entry>
        <entry>
          <key>TESTMODE</key>
          <value>FALSE</value>
        </entry>
        <entry>
          <key>TESTCOUNT</key>
          <value>2</value>
        </entry>
      </job-data-map>
    </job-detail>
    <trigger>
      <simple>
        <name>convertTrigger</name>
        <group>DEFAULT</group>
        <job-name>ConvertDgn2ShpIntoDirectory</job-name>
        <job-group>DEFAULT</job-group>
        <start-time>2008-03-01T18:10:00</start-time>
        <!-- repeat indefinitely every 10 seconds -->
        <repeat-count>0</repeat-count>
        <repeat-interval>500</repeat-interval>
        <!-- <repeat-interval>72000000</repeat-interval> -->
      </simple>
    </trigger>
  </job>
</quartz>
xdgnjobs/ximple-spatialjob/pom.xml
@@ -7,18 +7,18 @@
  <parent>
    <groupId>com.ximple.eofms</groupId>
    <artifactId>ximple-dgnjobs</artifactId>
    <version>0.3.0</version>
    <version>0.6.0</version>
  </parent>
  <groupId>com.ximple.eofms</groupId>
  <artifactId>ximple-spatialjob</artifactId>
  <version>0.3.0</version>
  <version>0.6.0</version>
  <packaging>jar</packaging>
  <name>ximple-spatialjob</name>
  <url>http://www.ximple.com.tw</url>
  <properties>
    <xdgnio.version>0.3.0</xdgnio.version>
    <xdgnio.version>0.6.0</xdgnio.version>
  </properties>
  <description>
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/collector/FeatureClassification.java
New file
@@ -0,0 +1,28 @@
package com.ximple.eofms.collector;
import java.util.TreeMap;
public class FeatureClassification
{
    private TreeMap<String, FeatureTypeCollector> clasificationRules;
    public FeatureClassification()
    {
        clasificationRules = new TreeMap<String, FeatureTypeCollector>();
    }
    public void addCollector(FeatureTypeCollector collector)
    {
        collector.getName();
    }
    public boolean containsKey(String typeName)
    {
        return clasificationRules.containsKey(typeName);
    }
    public TreeMap<String, FeatureTypeCollector> getClasificationRules()
    {
        return clasificationRules;
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/collector/FeatureTypeCollector.java
New file
@@ -0,0 +1,48 @@
package com.ximple.eofms.collector;
import java.util.ArrayList;
import com.ximple.eofms.util.StringUtils;
public class FeatureTypeCollector
{
    private String name;
    private String description;
    private String featuretypeList;
    private ArrayList<String> featureTypeNameList;
    public FeatureTypeCollector()
    {
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public String getDescription()
    {
        return description;
    }
    public void setDescription(String description)
    {
        this.description = description;
    }
    public String getFeaturetypeList()
    {
        return featuretypeList;
    }
    public void setFeaturetypeList(String featuretypeList)
    {
        featureTypeNameList = StringUtils.split(featuretypeList, ",");
        this.featuretypeList = featuretypeList;
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java
@@ -15,7 +15,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.io.dgn7.ArcElement;
import com.ximple.io.dgn7.Element;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java
@@ -15,7 +15,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.EllipseElement;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
@@ -15,7 +15,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.io.dgn7.ComplexChainElement;
import com.ximple.io.dgn7.Element;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java
@@ -17,7 +17,7 @@
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.eofms.util.TWDDatumConverter;
import com.ximple.io.dgn7.ComplexChainElement;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java
@@ -15,7 +15,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.io.dgn7.ComplexShapeElement;
import com.ximple.io.dgn7.Element;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
@@ -17,7 +17,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
@@ -17,7 +17,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.jobs.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
@@ -9,4 +9,6 @@
    public boolean isDispatchable(Element element);
    public Feature execute(Element element);
    void setUseLongName(boolean useLongName);
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
@@ -9,6 +9,7 @@
public class ElementDispatcher
{
    private LinkedList<ElementDispatchableFilter> rules;
    private boolean useLongName = false;
    public ElementDispatcher()
    {
@@ -22,9 +23,27 @@
    public void addRule(ElementDispatchableFilter rule)
    {
        rule.setUseLongName(useLongName);
        rules.add(rule);
    }
    public boolean isUseLongName()
    {
        return useLongName;
    }
    public void setUseLongName(boolean useLongName)
    {
        if (this.useLongName != useLongName)
        {
            this.useLongName = useLongName;
            for (ElementDispatchableFilter filter : rules)
            {
                filter.setUseLongName(useLongName);
            }
        }
    }
    public Feature execute(Element element)
    {
        for (ElementDispatchableFilter rule : rules)
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
@@ -13,6 +13,7 @@
    private int tid;
    private int cid;
    private CreateFeatureTypeStrategy createStrategy;
    private boolean useLongName = false;
    public TypeCompIdDispatchableFilter()
    {
@@ -58,6 +59,15 @@
        this.createStrategy = createStrategy;
    }
    public boolean isUseLongName()
    {
        return useLongName;
    }
    public void setUseLongName(boolean useLongName)
    {
        this.useLongName = useLongName;
    }
    //§PÂ_¬O§_²Å©M±ø¥ó
    public boolean isDispatchable(Element element)
@@ -92,10 +102,13 @@
    {
        StringBuilder sb= new StringBuilder();
        sb.append(getName());
        sb.append("_");
        sb.append(element.getLevelIndex());
        sb.append("_");
        sb.append(element.getWeight());
        if (useLongName)
        {
            sb.append("_");
            sb.append(element.getLevelIndex());
            sb.append("_");
            sb.append(element.getWeight());
        }
        return sb.toString();
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
@@ -14,6 +14,7 @@
    private int cid;
    private int lid;
    private CreateFeatureTypeStrategy createStrategy;
    private boolean useLongName = false;
    public TypeCompLevelIdDispatchableFilter()
    {
@@ -70,6 +71,17 @@
        this.createStrategy = createStrategy;
    }
    public boolean isUseLongName()
    {
        return useLongName;
    }
    public void setUseLongName(boolean useLongName)
    {
        this.useLongName = useLongName;
    }
    public boolean isDispatchable(Element element)
    {
        FrammeAttributeData featureLinkage = getFeatureLinkage(element);
@@ -99,10 +111,13 @@
    {
        StringBuilder sb= new StringBuilder();
        sb.append(getName());
        sb.append("_");
        sb.append(element.getLevelIndex());
        sb.append("_");
        sb.append(element.getWeight());
        if (useLongName)
        {
            sb.append("_");
            sb.append(element.getLevelIndex());
            sb.append("_");
            sb.append(element.getWeight());
        }
        return sb.toString();
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java
@@ -12,6 +12,7 @@
{
    private int tid;
    private CreateFeatureTypeStrategy createStrategy;
    private boolean useLongName = false;
    public TypeIdDispatchableFilter()
    {
@@ -69,14 +70,27 @@
        return null;
    }
    public boolean isUseLongName()
    {
        return useLongName;
    }
    public void setUseLongName(boolean useLongName)
    {
        this.useLongName = useLongName;
    }
    public String getFeatureTypeName(Element element)
    {
        StringBuilder sb= new StringBuilder();
        sb.append(getName());
        sb.append("_");
        sb.append(element.getLevelIndex());
        sb.append("_");
        sb.append(element.getWeight());
        if (useLongName)
        {
            sb.append("_");
            sb.append(element.getLevelIndex());
            sb.append("_");
            sb.append(element.getWeight());
        }
        return sb.toString();
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
@@ -19,10 +19,12 @@
import oracle.sql.BLOB;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
public abstract class AbstractOracleDatabaseJob implements Job
{
    private static final String SHPDATA_DIR = "SHPDATA_DIR";
    private static final String CONFSHPFILTER = "SHPFILTER_CONF";
    private static final String JOBDATA_DIR = "JOBDATA_DIR";
    private static final String CONFELMSFILTER = "ELMSFILTER_CONF";
    private static final String SPATAILSCHEMA = "ORGSCHEMA";
    private static final String CONVERTDB = "CONVERTDB";
    private static final String CONVERTFILE = "CONVERTFILE";
@@ -61,8 +63,8 @@
    {
        // The directory to scan is stored in the job map
        JobDataMap dataMap = jobDetail.getJobDataMap();
        _dataPath = dataMap.getString(SHPDATA_DIR);
        _filterPath = dataMap.getString(CONFSHPFILTER);
        _dataPath = dataMap.getString(JOBDATA_DIR);
        _filterPath = dataMap.getString(CONFELMSFILTER);
        _oracleHost = dataMap.getString(ORAHOST);
        _oracleInstance = dataMap.getString(ORAINST);
        _oraclePort = dataMap.getString(ORAPORT);
@@ -75,8 +77,8 @@
        _createDummy = dataMap.getString(CREATEDUMMY);
        Log logger = getLogger();
        logger.info("SHPDATA_DIR=" + _dataPath);
        logger.info("CONFSHPFILTER=" + _filterPath);
        logger.info("JOBDATA_DIR=" + _dataPath);
        logger.info("CONFELMSFILTER=" + _filterPath);
        logger.info("ORAHOST=" + _oracleHost);
        logger.info("ORAINST=" + _oracleInstance);
        logger.info("ORAPORT=" + _oraclePort);
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
New file
@@ -0,0 +1,978 @@
package com.ximple.eofms.jobs;
import java.util.Date;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Types;
import java.io.IOException;
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.FileChannel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.collections.OrderedMap;
import org.apache.commons.collections.OrderedMapIterator;
import org.apache.commons.collections.map.LinkedMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobDetail;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.SchemaException;
import com.vividsolutions.jts.geom.GeometryFactory;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BLOB;
import oracle.sql.ARRAY;
import com.ximple.util.PrintfFormat;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.Dgn7fileException;
import com.ximple.io.dgn7.ElementType;
import com.ximple.io.dgn7.IElementHandler;
import com.ximple.io.dgn7.ComplexElement;
import com.ximple.io.dgn7.Dgn7fileReader;
import com.ximple.io.dgn7.Lock;
import com.ximple.io.dgn7.TextElement;
import com.ximple.eofms.util.BinConverter;
import com.ximple.eofms.util.ByteArrayCompressor;
import com.ximple.eofms.util.StringUtils;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
import com.ximple.eofms.jobs.context.FeatureDgnConvertJobContext;
import com.ximple.eofms.jobs.context.GeneralDgnConvertJobContext;
import com.ximple.eofms.jobs.context.IndexDgnConvertJobContext;
import com.ximple.eofms.jobs.context.OracleConvertShapefilesJobContext;
public class OracleConvertDgn2OraSDOJob extends AbstractOracleDatabaseJob
{
    final static Log logger = LogFactory.getLog(OracleConvertDgn2OraSDOJob.class);
    /** The Oracle driver class name */
    private static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
    private static final int FETCHSIZE = 30;
    private static final int BATCHSIZE = 25;
    private static final int COMMITSIZE = 20;
    class Pair
    {
        Object first;
        Object second;
        public Pair(Object first, Object second)
        {
            this.first = first;
            this.second = second;
        }
    }
    GeometryFactory _geomFactory = new GeometryFactory();
    public Log getLogger()
    {
        return logger;
    }
    // OracleDataStoreFactory factory = new OracleDataStoreFactory();
    /*
        Map map = new HashMap();
        map.put("host", fixture.getProperty("host"));
        map.put("port", fixture.getProperty("port"));
        map.put("instance", fixture.getProperty("instance"));
        map.put("user", fixture.getProperty("user"));
        map.put("passwd", fixture.getProperty("passwd"));
        map.put("dbtype", "oracle");
        map.put("alias", fixture.getProperty("instance"));
        map.put("namespace", null);
        assertTrue(factory.canProcess(map));
        OracleDataStore store = (OracleDataStore) factory.createDataStore(map);
        assertNull(store.getNameSpace());
        map.put("schema", fixture.getProperty("user").toUpperCase());
        store = (OracleDataStore) factory.createDataStore(map);
        assertNull(store.getNameSpace());
        map.put("namespace", "topp");
        store = (OracleDataStore) factory.createDataStore(map);
        assertEquals(new URI("topp"), store.getNameSpace());
     */
    /*
        FeatureWriter writer = dstore.getFeatureWriter("ORA_TEST_POINTS", Filter.INCLUDE,
                Transaction.AUTO_COMMIT);
        assertNotNull(writer);
        Feature feature = writer.next();
        System.out.println(feature);
        feature.setAttribute(0, "Changed Feature");
        System.out.println(feature);
        writer.write();
        writer.close();
     */
    /*
        Map fidGen = new HashMap();
        fidGen.put("ORA_TEST_POINTS", JDBCDataStoreConfig.FID_GEN_MANUAL_INC);
        JDBCDataStoreConfig config = JDBCDataStoreConfig.createWithSchemaNameAndFIDGenMap(schemaName,
                fidGen);
        String name = "add_name";
        BigDecimal intval = new BigDecimal(70);
        Point point = jtsFactory.createPoint(new Coordinate(-15.0, -25));
        Feature feature = dstore.getSchema("ORA_TEST_POINTS")
                                .create(new Object[] { name, intval, point });
        FeatureStore fs = (FeatureStore) dstore.getFeatureSource("ORA_TEST_POINTS");
        fs.addFeatures(DataUtilities.collection(feature));
     */
    protected AbstractOracleJobContext prepareJobContext(String filterPath)
    {
        return new OracleConvertShapefilesJobContext(filterPath);
    }
    public void execute(JobExecutionContext context) throws JobExecutionException
    {
        // Every job has its own job detail
        JobDetail jobDetail = context.getJobDetail();
        // The name is defined in the job definition
        String jobName = jobDetail.getName();
        // Log the time the job started
        logger.info(jobName + " fired at " + new Date());
        extractJobConfiguration(jobDetail);
        try
        {
            logger.info("-- step:clearOutputDirectory --");
            clearOutputDirectory();
            boolean bFirst = true;
            if (checkConvertDB())
            {
                logger.info("-- step:convertOracleDB --");
                for (String orgSchema : _orgSchema)
                {
                    OracleConvertShapefilesJobContext jobContext = (OracleConvertShapefilesJobContext) prepareJobContext(_filterPath);
                    jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance);
                    jobContext.setLogin(_username, _password);
                    jobContext.setShapeData(_dataPath);
                    jobContext.setConvertDB(_convertDB);
                    jobContext.setConvertFile(_convertFile);
                    jobContext.setConvertElementIn(_convertElementIn);
                    jobContext.setElementLogging(checkElementLogging());
                    jobContext.setExecutionContext(context);
                    if (bFirst)
                        copyConnectivity(jobContext);
                    else
                        bFirst = false;
                    logger.info("----- start schema:" + orgSchema + " -----");
                    exetcuteConvert(jobContext, orgSchema, _dataPath);
                    //close all open filewriter instance
                    jobContext.closeFeatureWriter();
                }
            }
            if (checkConvertFile())
            {
                logger.info("-- step:convertIndexDesignFile --");
                convertIndexDesignFile(context);
                logger.info("-- step:convertOtherDesignFile --");
                convertOtherDesignFile(context);
            }
            if (checkConvertElementIn())
            {
                logger.info("-- step:convertFeatureDesignFile --");
                convertFeatureDesignFile(context);
            }
            if (checkCreateDummy())
            {
                logger.info("-- step:createDummyFeatureFile --");
                createDummyFeatureFile(context);
            }
        } catch (SQLException e)
        {
            logger.warn(e.getMessage(), e);
            throw new JobExecutionException("Database error. " + e.getMessage(), e);
        } catch (IOException ex)
        {
            logger.warn(ex.getMessage(), ex);
            throw new JobExecutionException("IO error. " + ex.getMessage(), ex);
        }
        logger.info(jobName + " end at " + new Date());
    }
    /**
     * Connectivity½Æ»s¤@­Óª©¥»¡A¦b¬d¸ß¹q¬y¤è¦V®É¥Î¨Ó¤ñ¹ïOMS¸ê®Æ®wªº¹q¾¹³s±µ©Ê(Connectivity)
     *
     * @param jobContext job context
     * @throws SQLException sql exception
     */
    private void copyConnectivity(OracleConvertShapefilesJobContext jobContext) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        Statement stmt = connection.createStatement();
        stmt.execute(OracleConvertShapefilesJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK);
        stmt.execute(OracleConvertShapefilesJobContext.COPY_CONNECTIVITY_TO_WEBCHECK);
    }
    private void exetcuteConvert(OracleConvertShapefilesJobContext jobContext,
                                 String querySchema, String dataPath) throws SQLException
    {
        int order = 0;
        OrderedMap map = getBlobStorageList(jobContext.getOracleConnection(), querySchema, "SD$SPACENODES"
                , null);
        logger.info("begin convert job:[" + map.size() + "]:testmode=" + _testMode);
        int total = map.size(); //spacenodes count
        int step = total / 100;
        int current = 0;
        //jobContext.startTransaction();
        jobContext.setCurrentSchema(querySchema);
        jobContext.getExecutionContext().put("ConvertDgn2ShpJobProgress", 0);
        for (OrderedMapIterator it = map.orderedMapIterator(); it.hasNext();)
        {
            it.next();
            Pair pair = (Pair) it.getValue();
            String tableSrc = (String) pair.first;
            logger.info("begin convert:[" + order + "]-" + tableSrc);
            queryIgsetElement(jobContext, querySchema, tableSrc);
            order++;
            if (_testMode)
            {
                if ((_testCount < 0) || (order >= _testCount))
                    break;
            }
            if ((order % COMMITSIZE) == 0)
            {
                // OracleConnection connection = jobContext.getOracleConnection();
                // connection.commitTransaction();
                jobContext.commitTransaction();
                //jobContext.startTransaction();
                System.gc();
            }
            int now = order % step;
            if (now != current)
            {
                current = now;
                jobContext.getExecutionContext().put("ConvertDgn2ShpJobProgress", current);
            }
        }
        jobContext.getExecutionContext().put("ConvertDgn2ShpJobProgress", 100);
        jobContext.commitTransaction();
        logger.info("end convert job:[" + order + "]");
        System.gc();
    }
    protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
                                            OrderedMap orderedMap) throws SQLException
    {
        if (orderedMap == null)
            orderedMap = new LinkedMap(99);
        String fetchStmtFmt = "SELECT SNID, SPACETABLE FROM \"%s\".\"%s\"";
        PrintfFormat spf = new PrintfFormat(fetchStmtFmt);
        String fetchStmt = spf.sprintf(new Object[]{schemaSrc, tableSrc});
        Statement stmt = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = null;
        stmt.setFetchSize(FETCHSIZE);
        try
        {
            rs = stmt.executeQuery(fetchStmt);
            while (rs.next())
            {
                int size = rs.getMetaData().getColumnCount();
                Object[] values = new Object[size];
                for (int i = 0; i < size; i++)
                {
                    values[i] = rs.getObject(i + 1);
                }
                Integer key = ((BigDecimal) values[0]).intValue();
                String name = (String) values[1];
                Pair pair = (Pair) orderedMap.get(key);
                if (pair == null)
                    orderedMap.put(key, new Pair(name, null));
                else
                    pair.first = name;
            }
        } catch (SQLException e)
        {
            logger.error(e.toString(), e);
            logger.error("stmt=" + fetchStmt);
            throw e;
        } finally
        {
            if (rs != null) rs.close();
            stmt.close();
        }
        return orderedMap;
    }
    protected OrderedMap getRawFormatStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
                                                 OrderedMap orderedMap) throws SQLException
    {
        if (orderedMap == null)
            orderedMap = new LinkedMap(99);
        String fetchStmtFmt = "SELECT RNID, SPACETABLE FROM \"%s\".\"%s\"";
        PrintfFormat spf = new PrintfFormat(fetchStmtFmt);
        String fetchStmt = spf.sprintf(new Object[]{schemaSrc, tableSrc});
        Statement stmt = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        stmt.setFetchSize(FETCHSIZE);
        ResultSet rs = stmt.executeQuery(fetchStmt);
        while (rs.next())
        {
            int size = rs.getMetaData().getColumnCount();
            Object[] values = new Object[size];
            for (int i = 0; i < size; i++)
            {
                values[i] = rs.getObject(i + 1);
            }
            Integer key = ((BigDecimal) values[0]).intValue();
            String name = (String) values[1];
            Pair pair = (Pair) orderedMap.get(key);
            if (pair == null)
                orderedMap.put(key, new Pair(null, name));
            else
                pair.second = name;
        }
        rs.close();
        stmt.close();
        return orderedMap;
    }
    protected void queryIgsetElement(OracleConvertShapefilesJobContext jobContext,
                                     String srcschema, String srctable) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID";
        PrintfFormat spf = new PrintfFormat(fetchSrcStmtFmt);
        String fetchSrcStmt = spf.sprintf(new Object[]{srcschema, srctable});
        Statement stmtSrc = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        stmtSrc.setFetchSize(FETCHSIZE);
        ResultSet rsSrc = stmtSrc.executeQuery(fetchSrcStmt);
        while (rsSrc.next())
        {
            byte[] raw = null;
            if (rsSrc.getMetaData().getColumnType(1) == Types.BLOB)
            {
                BLOB blob = (BLOB) rsSrc.getBlob(1);
                raw = getBytesFromBLOB(blob);
                blob.close();
            } else
            {
                raw = rsSrc.getBytes(1);
            }
            try
            {
                Element element = fetchBinaryElement(raw);
                jobContext.putFeatureCollection(element);
            } catch (Dgn7fileException e)
            {
                logger.warn("Dgn7Exception", e);
            }
        }
        rsSrc.close();
        stmtSrc.close();
    }
    protected void queryRawElement(OracleConvertShapefilesJobContext jobContext,
                                   String srcschema, String srctable) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID";
        PrintfFormat spf = new PrintfFormat(fetchDestStmtFmt);
        String fetchDestStmt = spf.sprintf(new Object[]{srcschema, srctable});
        Statement stmtDest = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        stmtDest.setFetchSize(FETCHSIZE);
        ResultSet rsDest = stmtDest.executeQuery(fetchDestStmt);
        while (rsDest.next())
        {
            ARRAY rawsValue = ((OracleResultSet) rsDest).getARRAY(1);
            long[] rawData = rawsValue.getLongArray();
            byte[] comparessedValue;
            /*
            if (dataMode == TransferTask.DataMode.Normal)
            {
                comparessedValue = BinConverter.unmarshalByteArray(rawData, true);
            } else
            {
                comparessedValue = BinConverter.unmarshalCompactByteArray(rawData);
            }
            */
            comparessedValue = BinConverter.unmarshalByteArray(rawData, true);
            byte[] rawDest = ByteArrayCompressor.decompressByteArray(comparessedValue);
            try
            {
                Element element = fetchBinaryElement(rawDest);
                jobContext.putFeatureCollection(element);
            } catch (Dgn7fileException e)
            {
                logger.warn("Dgn7Exception:" + e.getMessage(), e);
            }
        }
        rsDest.close();
        stmtDest.close();
    }
    // Binary to Element
    private Element fetchBinaryElement(byte[] raws) throws Dgn7fileException
    {
        ByteBuffer buffer = ByteBuffer.wrap(raws);
        buffer.order(ByteOrder.LITTLE_ENDIAN);
        short signature = buffer.getShort();
        // byte type = (byte) (buffer.get() & 0x7f);
        byte type = (byte) ((signature >>> 8) & 0x007f);
        // silly Bentley say contentLength is in 2-byte words
        // and ByteByffer uses raws.
        // track the record location
        int elementLength = (buffer.getShort() * 2) + 4;
        ElementType recordType = ElementType.forID(type);
        IElementHandler handler;
        handler = recordType.getElementHandler();
        Element dgnElement = (Element) handler.read(buffer, signature, elementLength);
        if (recordType.isComplexElement() && (elementLength < raws.length))
        {
            int offset = elementLength;
            while (offset < (raws.length - 4))
            {
                buffer.position(offset);
                signature = buffer.getShort();
                type = (byte) ((signature >>> 8) & 0x007f);
                elementLength = (buffer.getShort() * 2) + 4;
                if (raws.length < (offset + elementLength))
                {
                    System.out.println("Length not match:" + offset + ":" + buffer.position() + ":" + buffer.limit());
                    break;
                }
                recordType = ElementType.forID(type);
                handler = recordType.getElementHandler();
                if (handler != null)
                {
                    Element subElement = (Element) handler.read(buffer, signature, elementLength);
                    ((ComplexElement) dgnElement).add(subElement);
                    offset += elementLength;
                } else
                {
                    byte[] remain = new byte[buffer.remaining()];
                    System.arraycopy(raws, offset, remain, 0, buffer.remaining());
                    for (int i = 0; i < remain.length; i++)
                    {
                        if (remain[i] != 0)
                        {
                            logger.info("fetch element has some error. index=" + (offset + i) + ":value=" + remain[i]);
                            System.out.println("fetch element has some error. index=" + (offset + i) + ":value=" + remain[i]);
                        }
                    }
                    break;
                }
            }
        }
        return dgnElement;
    }
    /**
     * °õ¦æÂà´«¯Á¤Þ¹ÏÀɪº¤u§@
     *
     * @param context ¤u§@°õ¦æÀô¹Ò
     * @throws org.quartz.JobExecutionException exception
     */
    private void convertIndexDesignFile(JobExecutionContext context) throws JobExecutionException
    {
        File indexDir = new File(getDataPath(), "index");
        if (!indexDir.exists())
        {
            logger.info("index dir=" + indexDir + " not exist.");
            return;
        }
        if (!indexDir.isDirectory())
        {
            logger.info("index dir=" + indexDir + " is not a directory.");
        }
        File[] dgnFiles = indexDir.listFiles(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(".dgn");
            }
        });
        for (File dgnFile : dgnFiles)
        {
            IndexDgnConvertJobContext convertContext = new IndexDgnConvertJobContext(getDataPath());
            logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---");
            try
            {
                convertContext.setExecutionContext(context);
                String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator);
                convertContext.setFilename(dgnPaths[dgnPaths.length - 1]);
                FileInputStream fs = new FileInputStream(dgnFile);
                FileChannel fc = fs.getChannel();
                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
                convertContext.setReader(reader);
                scanIndexDgnElement(convertContext);
                convertContext.commitTransaction();
                convertContext.closeFeatureWriter();
                System.gc();
            } catch (FileNotFoundException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (Dgn7fileException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IOException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IllegalAttributeException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (SchemaException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            }
        }
    }
    protected void scanIndexDgnElement(IndexDgnConvertJobContext convertContext)
            throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException
    {
        Dgn7fileReader reader = convertContext.getReader();
        int count = 0;
        Element lastComplex = null;
        while (reader.hasNext())
        {
            Dgn7fileReader.Record record = reader.nextElement();
            if (record.element() != null)
            {
                Element element = (Element) record.element();
                ElementType type = element.getElementType();
                if ((!type.isComplexElement()) && (!element.isComponentElement()))
                {
                    lastComplex = null;
                    processIndexElement(element, convertContext);
                } else if (element.isComponentElement())
                {
                    if (lastComplex != null)
                    {
                        ((ComplexElement) lastComplex).add(element);
                    }
                } else if (type.isComplexElement())
                {
                    if (lastComplex == null)
                    {
                        lastComplex = element;
                    } else
                    {
                        processIndexElement(element, convertContext);
                        lastComplex = element;
                    }
                }
            }
            count++;
        }
        logger.debug("ElementRecord Count=" + count);
    }
    private void processIndexElement(Element element, IndexDgnConvertJobContext convertContext) throws IllegalAttributeException, SchemaException
    {
        if (element instanceof TextElement)
        {
            convertContext.putFeatureCollection(element);
        }
    }
    /**
     * °õ¦æÂà´«¨ä¥L³]­p¹ÏÀɪº¤u§@
     *
     * @param context jobContext
     * @throws org.quartz.JobExecutionException exception
     */
    private void convertOtherDesignFile(JobExecutionContext context) throws JobExecutionException
    {
        File otherDir = new File(getDataPath(), "other");
        if (!otherDir.exists())
        {
            logger.info("other dir=" + otherDir + " not exist.");
            return;
        }
        if (!otherDir.isDirectory())
        {
            logger.info("other dir=" + otherDir + " is not a directory.");
        }
        File[] dgnFiles = otherDir.listFiles(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(".dgn");
            }
        });
        for (File dgnFile : dgnFiles)
        {
            GeneralDgnConvertJobContext convertContext = new GeneralDgnConvertJobContext(getDataPath());
            logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
            try
            {
                convertContext.setExecutionContext(context);
                String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator);
                convertContext.setFilename(dgnPaths[dgnPaths.length - 1]);
                FileInputStream fs = new FileInputStream(dgnFile);
                FileChannel fc = fs.getChannel();
                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
                convertContext.setReader(reader);
                scanOtherDgnElement(convertContext);
                convertContext.commitTransaction();
                convertContext.closeFeatureWriter();
                System.gc();
            } catch (FileNotFoundException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (Dgn7fileException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IOException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IllegalAttributeException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (SchemaException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            }
        }
    }
    public void scanOtherDgnElement(GeneralDgnConvertJobContext convertContext)
            throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException
    {
        Dgn7fileReader reader = convertContext.getReader();
        int count = 0;
        Element lastComplex = null;
        while (reader.hasNext())
        {
            Dgn7fileReader.Record record = reader.nextElement();
            if (record.element() != null)
            {
                Element element = (Element) record.element();
                ElementType type = element.getElementType();
                if ((!type.isComplexElement()) && (!element.isComponentElement()))
                {
                    lastComplex = null;
                    processOtherElement(element, convertContext);
                } else if (element.isComponentElement())
                {
                    if (lastComplex != null)
                    {
                        ((ComplexElement) lastComplex).add(element);
                    }
                } else if (type.isComplexElement())
                {
                    if (lastComplex == null)
                    {
                        lastComplex = element;
                    } else
                    {
                        processOtherElement(element, convertContext);
                        lastComplex = element;
                    }
                }
            }
            count++;
        }
        logger.debug("ElementRecord Count=" + count);
    }
    private void processOtherElement(Element element, GeneralDgnConvertJobContext convertContext)
            throws IllegalAttributeException, SchemaException
    {
        convertContext.putFeatureCollection(element);
    }
    private void clearOutputDirectory()
    {
        File outDataPath = new File(getDataPath(), OracleConvertShapefilesJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
        }
        outDataPath = new File(getDataPath(), IndexDgnConvertJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
        }
        outDataPath = new File(getDataPath(), GeneralDgnConvertJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
        }
    }
    private void deleteFilesInPath(File outDataPath)
    {
        deleteFilesInPath(outDataPath, true);
    }
    private void deleteFilesInPath(File outDataPath, boolean removeSubDir)
    {
        if (!outDataPath.isDirectory())
        {
            return;
        }
        File[] files = outDataPath.listFiles();
        for (File file : files)
        {
            if (file.isFile())
            {
                if (!file.delete())
                {
                    logger.info("Cannot delete file-" + file.toString());
                }
            } else if (file.isDirectory())
            {
                deleteFilesInPath(file, removeSubDir);
                if (removeSubDir)
                {
                    if (file.delete())
                    {
                        logger.info("Cannot delete dir-" + file.toString());
                    }
                }
            }
        }
    }
    private void convertFeatureDesignFile(JobExecutionContext context) throws JobExecutionException
    {
        File elminDir = new File(getDataPath(), "elmin");
        if (!elminDir.exists())
        {
            logger.info("elmin dir=" + elminDir + " not exist.");
            return;
        }
        if (!elminDir.isDirectory())
        {
            logger.info("elmin dir=" + elminDir + " is not a directory.");
        }
        File[] dgnFiles = elminDir.listFiles(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(".dgn");
            }
        });
        for (File dgnFile : dgnFiles)
        {
            FeatureDgnConvertJobContext convertContext = new FeatureDgnConvertJobContext(getDataPath(), _filterPath);
            logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
            try
            {
                convertContext.setExecutionContext(context);
                String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator);
                convertContext.setFilename(dgnPaths[dgnPaths.length - 1]);
                FileInputStream fs = new FileInputStream(dgnFile);
                FileChannel fc = fs.getChannel();
                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
                convertContext.setReader(reader);
                scanFeatureDgnElement(convertContext);
                convertContext.commitTransaction();
                convertContext.closeFeatureWriter();
                System.gc();
            } catch (FileNotFoundException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (Dgn7fileException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IOException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IllegalAttributeException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (SchemaException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            }
        }
    }
    public void scanFeatureDgnElement(FeatureDgnConvertJobContext convertContext)
            throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException
    {
        Dgn7fileReader reader = convertContext.getReader();
        int count = 0;
        Element lastComplex = null;
        while (reader.hasNext())
        {
            Dgn7fileReader.Record record = reader.nextElement();
            if (record.element() != null)
            {
                Element element = (Element) record.element();
                ElementType type = element.getElementType();
                if ((!type.isComplexElement()) && (!element.isComponentElement()))
                {
                    lastComplex = null;
                    processFeatureElement(element, convertContext);
                } else if (element.isComponentElement())
                {
                    if (lastComplex != null)
                    {
                        ((ComplexElement) lastComplex).add(element);
                    }
                } else if (type.isComplexElement())
                {
                    if (lastComplex == null)
                    {
                        lastComplex = element;
                    } else
                    {
                        processFeatureElement(element, convertContext);
                        lastComplex = element;
                    }
                }
            }
            count++;
        }
        logger.debug("ElementRecord Count=" + count);
    }
    private void processFeatureElement(Element element, FeatureDgnConvertJobContext convertContext)
            throws IllegalAttributeException, SchemaException
    {
        convertContext.putFeatureCollection(element);
    }
    private void createDummyFeatureFile(JobExecutionContext context) throws JobExecutionException
    {
        /*
        DummyFeatureConvertJobContext convertContext = new DummyFeatureConvertJobContext(getDataPath(), _filterPath);
        try {
            convertContext.startTransaction();
            convertContext.commitTransaction();
            convertContext.closeFeatureWriter();
        } catch (IOException e)
        {
            logger.warn(e.getMessage(), e);
            throw new JobExecutionException(e.getMessage(), e);
        }
        */
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
New file
@@ -0,0 +1,1025 @@
package com.ximple.eofms.jobs;
import java.util.Date;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Types;
import java.io.IOException;
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.FileChannel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.collections.OrderedMap;
import org.apache.commons.collections.OrderedMapIterator;
import org.apache.commons.collections.map.LinkedMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobDetail;
import org.quartz.JobDataMap;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.SchemaException;
import com.vividsolutions.jts.geom.GeometryFactory;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BLOB;
import oracle.sql.ARRAY;
import com.ximple.util.PrintfFormat;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.Dgn7fileException;
import com.ximple.io.dgn7.ElementType;
import com.ximple.io.dgn7.IElementHandler;
import com.ximple.io.dgn7.ComplexElement;
import com.ximple.io.dgn7.Dgn7fileReader;
import com.ximple.io.dgn7.Lock;
import com.ximple.io.dgn7.TextElement;
import com.ximple.eofms.util.BinConverter;
import com.ximple.eofms.util.ByteArrayCompressor;
import com.ximple.eofms.util.StringUtils;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
import com.ximple.eofms.jobs.context.FeatureDgnConvertJobContext;
import com.ximple.eofms.jobs.context.GeneralDgnConvertJobContext;
import com.ximple.eofms.jobs.context.IndexDgnConvertJobContext;
import com.ximple.eofms.jobs.context.OracleConvertShapefilesJobContext;
public class OracleConvertDgn2PostGISJob extends AbstractOracleDatabaseJob
{
    final static Log logger = LogFactory.getLog(OracleConvertDgn2PostGISJob.class);
    private static final String PGHOST = "PGHOST";
    private static final String PGDDATBASE = "PGDDATBASE";
    private static final String PGPORT = "PGPORT";
    private static final String PGSCHEMA = "PGSCHEMA";
    private static final String PGUSER = "PGUSER";
    private static final String PGPASS = " PGPASS";
    private static final String USEWKB = "USEWKB";
    private static final int FETCHSIZE = 30;
    private static final int BATCHSIZE = 25;
    private static final int COMMITSIZE = 20;
    class Pair
    {
        Object first;
        Object second;
        public Pair(Object first, Object second)
        {
            this.first = first;
            this.second = second;
        }
    }
    GeometryFactory _geomFactory = new GeometryFactory();
    protected String _pgHost;
    protected String _pgDatabase;
    protected String _pgPort;
    protected String _pgSchema;
    protected String _pgUsername;
    protected String _pgPassword;
    protected String _pgUseWKB;
    // static PostgisDataStoreFactory factory = new PostgisDataStoreFactory();
    /*
        f = PostgisTests.newFixture();
        remote = new HashMap();
        remote.put("dbtype", "postgis");
        remote.put("charset", "");
        remote.put("host", f.host);
        remote.put("port", f.port);
        remote.put("database", f.database);
        remote.put("user", f.user);
        remote.put("passwd", f.password);
        remote.put("namespace", f.namespace);
     */
    /*
        PostgisDataStore pg = new PostgisDataStore(pool, f.schema, getName(),
                PostgisDataStore.OPTIMIZE_SQL);
        pg.setWKBEnabled(WKB_ENABLED);
        pg.setEstimatedExtent(true);
        pg.setFIDMapper("road", new TypedFIDMapper(new BasicFIDMapper("fid", 255, false), "road"));
        pg.setFIDMapper("river", new TypedFIDMapper(new BasicFIDMapper("fid", 255, false), "river"));
        pg.setFIDMapper("testset",
            new TypedFIDMapper(new BasicFIDMapper("gid", 255, true), "testset"));
     */
    /*
        Transaction transaction = new DefaultTransaction("attemptWriteFW");
        FeatureWriter writer = ds.getFeatureWriter(table, transaction);
        Feature feature;
        while (writer.hasNext()) {
            feature = (Feature) writer.next();
        }
        feature = (Feature) writer.next();
        feature.setAttribute(0, "test");
        writer.write();
        String id = feature.getID();
        transaction.commit();
        transaction.close();
     */
    public Log getLogger()
    {
        return logger;
    }
    protected AbstractOracleJobContext prepareJobContext(String filterPath)
    {
        return new OracleConvertShapefilesJobContext(filterPath);
    }
    protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException
    {
        super.extractJobConfiguration(jobDetail);
        JobDataMap dataMap = jobDetail.getJobDataMap();
        _pgHost = dataMap.getString(PGHOST);
        _pgDatabase = dataMap.getString(PGDDATBASE);
        _pgPort = dataMap.getString(PGPORT);
        _pgSchema = dataMap.getString(PGSCHEMA);
        _pgUsername = dataMap.getString(PGUSER);
        _pgPassword = dataMap.getString(PGPASS);
        _pgUseWKB = dataMap.getString(USEWKB);
        Log logger = getLogger();
        logger.info("PGHOST=" + _pgHost);
        logger.info("PGDDATBASE=" + _pgDatabase);
        logger.info("PGPORT=" + _pgPort);
        logger.info("PGSCHEMA=" + _pgSchema);
        logger.info("PGUSER=" + _pgUsername);
        logger.info("PGPASS=" + _pgPassword);
        logger.info("USEWKB=" + _pgUseWKB);
        if (_pgHost == null)
        {
            throw new JobExecutionException("Unknown PostGIS host.");
        }
        if (_pgDatabase == null)
        {
            throw new JobExecutionException("Unknown PostGIS database.");
        }
        if (_pgPort == null)
        {
            throw new JobExecutionException("Unknown PostGIS port.");
        }
        if (_pgSchema == null)
        {
            throw new JobExecutionException("Unknown PostGIS schema.");
        }
        if (_pgUsername == null)
        {
            throw new JobExecutionException("Unknown PostGIS username.");
        }
        if (_pgPassword == null)
        {
            throw new JobExecutionException("Unknown PostGIS password.");
        }
    }
    public void execute(JobExecutionContext context) throws JobExecutionException
    {
        // Every job has its own job detail
        JobDetail jobDetail = context.getJobDetail();
        // The name is defined in the job definition
        String jobName = jobDetail.getName();
        // Log the time the job started
        logger.info(jobName + " fired at " + new Date());
        extractJobConfiguration(jobDetail);
        try
        {
            logger.info("-- step:clearOutputDirectory --");
            clearOutputDirectory();
            boolean bFirst = true;
            if (checkConvertDB())
            {
                logger.info("-- step:convertOracleDB --");
                for (String orgSchema : _orgSchema)
                {
                    OracleConvertShapefilesJobContext jobContext = (OracleConvertShapefilesJobContext) prepareJobContext(_filterPath);
                    jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance);
                    jobContext.setLogin(_username, _password);
                    jobContext.setShapeData(_dataPath);
                    jobContext.setConvertDB(_convertDB);
                    jobContext.setConvertFile(_convertFile);
                    jobContext.setConvertElementIn(_convertElementIn);
                    jobContext.setElementLogging(checkElementLogging());
                    jobContext.setExecutionContext(context);
                    if (bFirst)
                        copyConnectivity(jobContext);
                    else
                        bFirst = false;
                    logger.info("----- start schema:" + orgSchema + " -----");
                    exetcuteConvert(jobContext, orgSchema, _dataPath);
                    //close all open filewriter instance
                    jobContext.closeFeatureWriter();
                }
            }
            if (checkConvertFile())
            {
                logger.info("-- step:convertIndexDesignFile --");
                convertIndexDesignFile(context);
                logger.info("-- step:convertOtherDesignFile --");
                convertOtherDesignFile(context);
            }
            if (checkConvertElementIn())
            {
                logger.info("-- step:convertFeatureDesignFile --");
                convertFeatureDesignFile(context);
            }
            if (checkCreateDummy())
            {
                logger.info("-- step:createDummyFeatureFile --");
                createDummyFeatureFile(context);
            }
        } catch (SQLException e)
        {
            logger.warn(e.getMessage(), e);
            throw new JobExecutionException("Database error. " + e.getMessage(), e);
        } catch (IOException ex)
        {
            logger.warn(ex.getMessage(), ex);
            throw new JobExecutionException("IO error. " + ex.getMessage(), ex);
        }
        logger.info(jobName + " end at " + new Date());
    }
    /**
     * Connectivity½Æ»s¤@­Óª©¥»¡A¦b¬d¸ß¹q¬y¤è¦V®É¥Î¨Ó¤ñ¹ïOMS¸ê®Æ®wªº¹q¾¹³s±µ©Ê(Connectivity)
     *
     * @param jobContext job context
     * @throws SQLException sql exception
     */
    private void copyConnectivity(OracleConvertShapefilesJobContext jobContext) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        Statement stmt = connection.createStatement();
        stmt.execute(OracleConvertShapefilesJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK);
        stmt.execute(OracleConvertShapefilesJobContext.COPY_CONNECTIVITY_TO_WEBCHECK);
    }
    private void exetcuteConvert(OracleConvertShapefilesJobContext jobContext,
                                 String querySchema, String dataPath) throws SQLException
    {
        int order = 0;
        OrderedMap map = getBlobStorageList(jobContext.getOracleConnection(), querySchema, "SD$SPACENODES"
                , null);
        logger.info("begin convert job:[" + map.size() + "]:testmode=" + _testMode);
        int total = map.size(); //spacenodes count
        int step = total / 100;
        int current = 0;
        //jobContext.startTransaction();
        jobContext.setCurrentSchema(querySchema);
        jobContext.getExecutionContext().put("ConvertDgn2PostGISJobProgress", 0);
        for (OrderedMapIterator it = map.orderedMapIterator(); it.hasNext();)
        {
            it.next();
            Pair pair = (Pair) it.getValue();
            String tableSrc = (String) pair.first;
            logger.info("begin convert:[" + order + "]-" + tableSrc);
            queryIgsetElement(jobContext, querySchema, tableSrc);
            order++;
            if (_testMode)
            {
                if ((_testCount < 0) || (order >= _testCount))
                    break;
            }
            if ((order % COMMITSIZE) == 0)
            {
                // OracleConnection connection = jobContext.getOracleConnection();
                // connection.commitTransaction();
                jobContext.commitTransaction();
                //jobContext.startTransaction();
                System.gc();
            }
            int now = order % step;
            if (now != current)
            {
                current = now;
                jobContext.getExecutionContext().put("ConvertDgn2PostGISJobProgress", current);
            }
        }
        jobContext.getExecutionContext().put("ConvertDgn2PostGISJobProgress", 100);
        jobContext.commitTransaction();
        logger.info("end convert job:[" + order + "]");
        System.gc();
    }
    protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
                                            OrderedMap orderedMap) throws SQLException
    {
        if (orderedMap == null)
            orderedMap = new LinkedMap(99);
        String fetchStmtFmt = "SELECT SNID, SPACETABLE FROM \"%s\".\"%s\"";
        PrintfFormat spf = new PrintfFormat(fetchStmtFmt);
        String fetchStmt = spf.sprintf(new Object[]{schemaSrc, tableSrc});
        Statement stmt = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = null;
        stmt.setFetchSize(FETCHSIZE);
        try
        {
            rs = stmt.executeQuery(fetchStmt);
            while (rs.next())
            {
                int size = rs.getMetaData().getColumnCount();
                Object[] values = new Object[size];
                for (int i = 0; i < size; i++)
                {
                    values[i] = rs.getObject(i + 1);
                }
                Integer key = ((BigDecimal) values[0]).intValue();
                String name = (String) values[1];
                Pair pair = (Pair) orderedMap.get(key);
                if (pair == null)
                    orderedMap.put(key, new Pair(name, null));
                else
                    pair.first = name;
            }
        } catch (SQLException e)
        {
            logger.error(e.toString(), e);
            logger.error("stmt=" + fetchStmt);
            throw e;
        } finally
        {
            if (rs != null) rs.close();
            stmt.close();
        }
        return orderedMap;
    }
    protected OrderedMap getRawFormatStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
                                                 OrderedMap orderedMap) throws SQLException
    {
        if (orderedMap == null)
            orderedMap = new LinkedMap(99);
        String fetchStmtFmt = "SELECT RNID, SPACETABLE FROM \"%s\".\"%s\"";
        PrintfFormat spf = new PrintfFormat(fetchStmtFmt);
        String fetchStmt = spf.sprintf(new Object[]{schemaSrc, tableSrc});
        Statement stmt = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        stmt.setFetchSize(FETCHSIZE);
        ResultSet rs = stmt.executeQuery(fetchStmt);
        while (rs.next())
        {
            int size = rs.getMetaData().getColumnCount();
            Object[] values = new Object[size];
            for (int i = 0; i < size; i++)
            {
                values[i] = rs.getObject(i + 1);
            }
            Integer key = ((BigDecimal) values[0]).intValue();
            String name = (String) values[1];
            Pair pair = (Pair) orderedMap.get(key);
            if (pair == null)
                orderedMap.put(key, new Pair(null, name));
            else
                pair.second = name;
        }
        rs.close();
        stmt.close();
        return orderedMap;
    }
    protected void queryIgsetElement(OracleConvertShapefilesJobContext jobContext,
                                     String srcschema, String srctable) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID";
        PrintfFormat spf = new PrintfFormat(fetchSrcStmtFmt);
        String fetchSrcStmt = spf.sprintf(new Object[]{srcschema, srctable});
        Statement stmtSrc = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        stmtSrc.setFetchSize(FETCHSIZE);
        ResultSet rsSrc = stmtSrc.executeQuery(fetchSrcStmt);
        while (rsSrc.next())
        {
            byte[] raw = null;
            if (rsSrc.getMetaData().getColumnType(1) == Types.BLOB)
            {
                BLOB blob = (BLOB) rsSrc.getBlob(1);
                raw = getBytesFromBLOB(blob);
                blob.close();
            } else
            {
                raw = rsSrc.getBytes(1);
            }
            try
            {
                Element element = fetchBinaryElement(raw);
                jobContext.putFeatureCollection(element);
            } catch (Dgn7fileException e)
            {
                logger.warn("Dgn7Exception", e);
            }
        }
        rsSrc.close();
        stmtSrc.close();
    }
    protected void queryRawElement(OracleConvertShapefilesJobContext jobContext,
                                   String srcschema, String srctable) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID";
        PrintfFormat spf = new PrintfFormat(fetchDestStmtFmt);
        String fetchDestStmt = spf.sprintf(new Object[]{srcschema, srctable});
        Statement stmtDest = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        stmtDest.setFetchSize(FETCHSIZE);
        ResultSet rsDest = stmtDest.executeQuery(fetchDestStmt);
        while (rsDest.next())
        {
            ARRAY rawsValue = ((OracleResultSet) rsDest).getARRAY(1);
            long[] rawData = rawsValue.getLongArray();
            byte[] comparessedValue;
            /*
            if (dataMode == TransferTask.DataMode.Normal)
            {
                comparessedValue = BinConverter.unmarshalByteArray(rawData, true);
            } else
            {
                comparessedValue = BinConverter.unmarshalCompactByteArray(rawData);
            }
            */
            comparessedValue = BinConverter.unmarshalByteArray(rawData, true);
            byte[] rawDest = ByteArrayCompressor.decompressByteArray(comparessedValue);
            try
            {
                Element element = fetchBinaryElement(rawDest);
                jobContext.putFeatureCollection(element);
            } catch (Dgn7fileException e)
            {
                logger.warn("Dgn7Exception:" + e.getMessage(), e);
            }
        }
        rsDest.close();
        stmtDest.close();
    }
    // Binary to Element
    private Element fetchBinaryElement(byte[] raws) throws Dgn7fileException
    {
        ByteBuffer buffer = ByteBuffer.wrap(raws);
        buffer.order(ByteOrder.LITTLE_ENDIAN);
        short signature = buffer.getShort();
        // byte type = (byte) (buffer.get() & 0x7f);
        byte type = (byte) ((signature >>> 8) & 0x007f);
        // silly Bentley say contentLength is in 2-byte words
        // and ByteByffer uses raws.
        // track the record location
        int elementLength = (buffer.getShort() * 2) + 4;
        ElementType recordType = ElementType.forID(type);
        IElementHandler handler;
        handler = recordType.getElementHandler();
        Element dgnElement = (Element) handler.read(buffer, signature, elementLength);
        if (recordType.isComplexElement() && (elementLength < raws.length))
        {
            int offset = elementLength;
            while (offset < (raws.length - 4))
            {
                buffer.position(offset);
                signature = buffer.getShort();
                type = (byte) ((signature >>> 8) & 0x007f);
                elementLength = (buffer.getShort() * 2) + 4;
                if (raws.length < (offset + elementLength))
                {
                    System.out.println("Length not match:" + offset + ":" + buffer.position() + ":" + buffer.limit());
                    break;
                }
                recordType = ElementType.forID(type);
                handler = recordType.getElementHandler();
                if (handler != null)
                {
                    Element subElement = (Element) handler.read(buffer, signature, elementLength);
                    ((ComplexElement) dgnElement).add(subElement);
                    offset += elementLength;
                } else
                {
                    byte[] remain = new byte[buffer.remaining()];
                    System.arraycopy(raws, offset, remain, 0, buffer.remaining());
                    for (int i = 0; i < remain.length; i++)
                    {
                        if (remain[i] != 0)
                        {
                            logger.info("fetch element has some error. index=" + (offset + i) + ":value=" + remain[i]);
                            System.out.println("fetch element has some error. index=" + (offset + i) + ":value=" + remain[i]);
                        }
                    }
                    break;
                }
            }
        }
        return dgnElement;
    }
    /**
     * °õ¦æÂà´«¯Á¤Þ¹ÏÀɪº¤u§@
     *
     * @param context ¤u§@°õ¦æÀô¹Ò
     * @throws org.quartz.JobExecutionException exception
     */
    private void convertIndexDesignFile(JobExecutionContext context) throws JobExecutionException
    {
        File indexDir = new File(getDataPath(), "index");
        if (!indexDir.exists())
        {
            logger.info("index dir=" + indexDir + " not exist.");
            return;
        }
        if (!indexDir.isDirectory())
        {
            logger.info("index dir=" + indexDir + " is not a directory.");
        }
        File[] dgnFiles = indexDir.listFiles(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(".dgn");
            }
        });
        for (File dgnFile : dgnFiles)
        {
            IndexDgnConvertJobContext convertContext = new IndexDgnConvertJobContext(getDataPath());
            logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---");
            try
            {
                convertContext.setExecutionContext(context);
                String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator);
                convertContext.setFilename(dgnPaths[dgnPaths.length - 1]);
                FileInputStream fs = new FileInputStream(dgnFile);
                FileChannel fc = fs.getChannel();
                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
                convertContext.setReader(reader);
                scanIndexDgnElement(convertContext);
                convertContext.commitTransaction();
                convertContext.closeFeatureWriter();
                System.gc();
            } catch (FileNotFoundException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (Dgn7fileException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IOException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IllegalAttributeException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (SchemaException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            }
        }
    }
    protected void scanIndexDgnElement(IndexDgnConvertJobContext convertContext)
            throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException
    {
        Dgn7fileReader reader = convertContext.getReader();
        int count = 0;
        Element lastComplex = null;
        while (reader.hasNext())
        {
            Dgn7fileReader.Record record = reader.nextElement();
            if (record.element() != null)
            {
                Element element = (Element) record.element();
                ElementType type = element.getElementType();
                if ((!type.isComplexElement()) && (!element.isComponentElement()))
                {
                    lastComplex = null;
                    processIndexElement(element, convertContext);
                } else if (element.isComponentElement())
                {
                    if (lastComplex != null)
                    {
                        ((ComplexElement) lastComplex).add(element);
                    }
                } else if (type.isComplexElement())
                {
                    if (lastComplex == null)
                    {
                        lastComplex = element;
                    } else
                    {
                        processIndexElement(element, convertContext);
                        lastComplex = element;
                    }
                }
            }
            count++;
        }
        logger.debug("ElementRecord Count=" + count);
    }
    private void processIndexElement(Element element, IndexDgnConvertJobContext convertContext) throws IllegalAttributeException, SchemaException
    {
        if (element instanceof TextElement)
        {
            convertContext.putFeatureCollection(element);
        }
    }
    /**
     * °õ¦æÂà´«¨ä¥L³]­p¹ÏÀɪº¤u§@
     *
     * @param context jobContext
     * @throws org.quartz.JobExecutionException exception
     */
    private void convertOtherDesignFile(JobExecutionContext context) throws JobExecutionException
    {
        File otherDir = new File(getDataPath(), "other");
        if (!otherDir.exists())
        {
            logger.info("other dir=" + otherDir + " not exist.");
            return;
        }
        if (!otherDir.isDirectory())
        {
            logger.info("other dir=" + otherDir + " is not a directory.");
        }
        File[] dgnFiles = otherDir.listFiles(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(".dgn");
            }
        });
        for (File dgnFile : dgnFiles)
        {
            GeneralDgnConvertJobContext convertContext = new GeneralDgnConvertJobContext(getDataPath());
            logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
            try
            {
                convertContext.setExecutionContext(context);
                String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator);
                convertContext.setFilename(dgnPaths[dgnPaths.length - 1]);
                FileInputStream fs = new FileInputStream(dgnFile);
                FileChannel fc = fs.getChannel();
                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
                convertContext.setReader(reader);
                scanOtherDgnElement(convertContext);
                convertContext.commitTransaction();
                convertContext.closeFeatureWriter();
                System.gc();
            } catch (FileNotFoundException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (Dgn7fileException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IOException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IllegalAttributeException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (SchemaException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            }
        }
    }
    public void scanOtherDgnElement(GeneralDgnConvertJobContext convertContext)
            throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException
    {
        Dgn7fileReader reader = convertContext.getReader();
        int count = 0;
        Element lastComplex = null;
        while (reader.hasNext())
        {
            Dgn7fileReader.Record record = reader.nextElement();
            if (record.element() != null)
            {
                Element element = (Element) record.element();
                ElementType type = element.getElementType();
                if ((!type.isComplexElement()) && (!element.isComponentElement()))
                {
                    lastComplex = null;
                    processOtherElement(element, convertContext);
                } else if (element.isComponentElement())
                {
                    if (lastComplex != null)
                    {
                        ((ComplexElement) lastComplex).add(element);
                    }
                } else if (type.isComplexElement())
                {
                    if (lastComplex == null)
                    {
                        lastComplex = element;
                    } else
                    {
                        processOtherElement(element, convertContext);
                        lastComplex = element;
                    }
                }
            }
            count++;
        }
        logger.debug("ElementRecord Count=" + count);
    }
    private void processOtherElement(Element element, GeneralDgnConvertJobContext convertContext)
            throws IllegalAttributeException, SchemaException
    {
        convertContext.putFeatureCollection(element);
    }
    private void clearOutputDirectory()
    {
        File outDataPath = new File(getDataPath(), OracleConvertShapefilesJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
        }
        outDataPath = new File(getDataPath(), IndexDgnConvertJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
        }
        outDataPath = new File(getDataPath(), GeneralDgnConvertJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
        }
    }
    private void deleteFilesInPath(File outDataPath)
    {
        deleteFilesInPath(outDataPath, true);
    }
    private void deleteFilesInPath(File outDataPath, boolean removeSubDir)
    {
        if (!outDataPath.isDirectory())
        {
            return;
        }
        File[] files = outDataPath.listFiles();
        for (File file : files)
        {
            if (file.isFile())
            {
                if (!file.delete())
                {
                    logger.info("Cannot delete file-" + file.toString());
                }
            } else if (file.isDirectory())
            {
                deleteFilesInPath(file, removeSubDir);
                if (removeSubDir)
                {
                    if (file.delete())
                    {
                        logger.info("Cannot delete dir-" + file.toString());
                    }
                }
            }
        }
    }
    private void convertFeatureDesignFile(JobExecutionContext context) throws JobExecutionException
    {
        File elminDir = new File(getDataPath(), "elmin");
        if (!elminDir.exists())
        {
            logger.info("elmin dir=" + elminDir + " not exist.");
            return;
        }
        if (!elminDir.isDirectory())
        {
            logger.info("elmin dir=" + elminDir + " is not a directory.");
        }
        File[] dgnFiles = elminDir.listFiles(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(".dgn");
            }
        });
        for (File dgnFile : dgnFiles)
        {
            FeatureDgnConvertJobContext convertContext = new FeatureDgnConvertJobContext(getDataPath(), _filterPath);
            logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
            try
            {
                convertContext.setExecutionContext(context);
                String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator);
                convertContext.setFilename(dgnPaths[dgnPaths.length - 1]);
                FileInputStream fs = new FileInputStream(dgnFile);
                FileChannel fc = fs.getChannel();
                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
                convertContext.setReader(reader);
                scanFeatureDgnElement(convertContext);
                convertContext.commitTransaction();
                convertContext.closeFeatureWriter();
                System.gc();
            } catch (FileNotFoundException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (Dgn7fileException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IOException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (IllegalAttributeException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            } catch (SchemaException e)
            {
                convertContext.rollbackTransaction();
                logger.warn(e.getMessage(), e);
                throw new JobExecutionException(e.getMessage(), e);
            }
        }
    }
    public void scanFeatureDgnElement(FeatureDgnConvertJobContext convertContext)
            throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException
    {
        Dgn7fileReader reader = convertContext.getReader();
        int count = 0;
        Element lastComplex = null;
        while (reader.hasNext())
        {
            Dgn7fileReader.Record record = reader.nextElement();
            if (record.element() != null)
            {
                Element element = (Element) record.element();
                ElementType type = element.getElementType();
                if ((!type.isComplexElement()) && (!element.isComponentElement()))
                {
                    lastComplex = null;
                    processFeatureElement(element, convertContext);
                } else if (element.isComponentElement())
                {
                    if (lastComplex != null)
                    {
                        ((ComplexElement) lastComplex).add(element);
                    }
                } else if (type.isComplexElement())
                {
                    if (lastComplex == null)
                    {
                        lastComplex = element;
                    } else
                    {
                        processFeatureElement(element, convertContext);
                        lastComplex = element;
                    }
                }
            }
            count++;
        }
        logger.debug("ElementRecord Count=" + count);
    }
    private void processFeatureElement(Element element, FeatureDgnConvertJobContext convertContext)
            throws IllegalAttributeException, SchemaException
    {
        convertContext.putFeatureCollection(element);
    }
    private void createDummyFeatureFile(JobExecutionContext context) throws JobExecutionException
    {
        /*
        DummyFeatureConvertJobContext convertContext = new DummyFeatureConvertJobContext(getDataPath(), _filterPath);
        try {
            convertContext.startTransaction();
            convertContext.commitTransaction();
            convertContext.closeFeatureWriter();
        } catch (IOException e)
        {
            logger.warn(e.getMessage(), e);
            throw new JobExecutionException(e.getMessage(), e);
        }
        */
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
@@ -36,6 +36,11 @@
import com.ximple.eofms.util.BinConverter;
import com.ximple.eofms.util.ByteArrayCompressor;
import com.ximple.eofms.util.StringUtils;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
import com.ximple.eofms.jobs.context.FeatureDgnConvertJobContext;
import com.ximple.eofms.jobs.context.GeneralDgnConvertJobContext;
import com.ximple.eofms.jobs.context.IndexDgnConvertJobContext;
import com.ximple.eofms.jobs.context.OracleConvertShapefilesJobContext;
import com.ximple.io.dgn7.ComplexElement;
import com.ximple.io.dgn7.Dgn7fileException;
import com.ximple.io.dgn7.Dgn7fileReader;
@@ -78,7 +83,12 @@
    protected AbstractOracleJobContext prepareJobContext(String filterPath)
    {
        return new OracleConvertJobContext(filterPath);
        return new OracleConvertShapefilesJobContext(filterPath);
    }
    protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException
    {
        super.extractJobConfiguration(jobDetail);
    }
    public void execute(JobExecutionContext context) throws JobExecutionException
@@ -104,7 +114,7 @@
                for (String orgSchema : _orgSchema)
                {
                    OracleConvertJobContext jobContext = (OracleConvertJobContext) prepareJobContext(_filterPath);
                    OracleConvertShapefilesJobContext jobContext = (OracleConvertShapefilesJobContext) prepareJobContext(_filterPath);
                    jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance);
                    jobContext.setLogin(_username, _password);
                    jobContext.setShapeData(_dataPath);
@@ -164,15 +174,15 @@
     * @param jobContext job context
     * @throws SQLException sql exception
     */
    private void copyConnectivity(OracleConvertJobContext jobContext) throws SQLException
    private void copyConnectivity(OracleConvertShapefilesJobContext jobContext) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
        Statement stmt = connection.createStatement();
        stmt.execute(OracleConvertJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK);
        stmt.execute(OracleConvertJobContext.COPY_CONNECTIVITY_TO_WEBCHECK);
        stmt.execute(OracleConvertShapefilesJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK);
        stmt.execute(OracleConvertShapefilesJobContext.COPY_CONNECTIVITY_TO_WEBCHECK);
    }
    private void exetcuteConvert(OracleConvertJobContext jobContext,
    private void exetcuteConvert(OracleConvertShapefilesJobContext jobContext,
                                 String querySchema, String dataPath) throws SQLException
    {
        int order = 0;
@@ -321,7 +331,7 @@
        return orderedMap;
    }
    protected void queryIgsetElement(OracleConvertJobContext jobContext,
    protected void queryIgsetElement(OracleConvertShapefilesJobContext jobContext,
                                     String srcschema, String srctable) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
@@ -363,7 +373,7 @@
        stmtSrc.close();
    }
    protected void queryRawElement(OracleConvertJobContext jobContext,
    protected void queryRawElement(OracleConvertShapefilesJobContext jobContext,
                                   String srcschema, String srctable) throws SQLException
    {
        OracleConnection connection = jobContext.getOracleConnection();
@@ -728,7 +738,7 @@
    private void clearOutputDirectory()
    {
        File outDataPath = new File(getDataPath(), OracleConvertJobContext.SHPOUTPATH);
        File outDataPath = new File(getDataPath(), OracleConvertShapefilesJobContext.SHPOUTPATH);
        if (outDataPath.exists() && outDataPath.isDirectory())
        {
            deleteFilesInPath(outDataPath);
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
@@ -13,6 +13,9 @@
import oracle.jdbc.OracleDatabaseMetaData;
import oracle.jdbc.OracleStatement;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
import com.ximple.eofms.jobs.context.OracleUpgradeJobContext;
public class OracleUpgradeBlob2UDTJob extends AbstractOracleDatabaseJob
{
    static Log logger = LogFactory.getLog(OracleUpgradeBlob2UDTJob.class);
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractDgnFileJobContext.java
@@ -1,4 +1,4 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.util.Properties;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java
@@ -1,10 +1,12 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import oracle.jdbc.OracleConnection;
import com.ximple.eofms.jobs.context.OracleConvertShapefilesJobContext;
public abstract class AbstractOracleJobContext
{
@@ -174,7 +176,7 @@
    /**
     * copy connectivity to connectivity_webcheck sql
     */
    protected static final String TRUNCATE_CONNECTIVITY_WEBCHECK = "TRUNCATE TABLE  BASEDB.CONNECTIVITY_WEBCHECK";
    public static final String TRUNCATE_CONNECTIVITY_WEBCHECK = "TRUNCATE TABLE  BASEDB.CONNECTIVITY_WEBCHECK";
    protected static final String CREATE_CONNECTIVITY_WEBCHECK = "CREATE TABLE BASEDB.CONNECTIVITY_WEBCHECK\n" +
            "( FSC      NUMBER(5) NOT NULL," +
            "  UFID     NUMBER(10) NOT NULL," +
@@ -194,7 +196,7 @@
            "PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT )\n" +
            "LOGGING NOCOMPRESS NOCACHE NOPARALLEL MONITORING;";
     protected static final String COPY_CONNECTIVITY_TO_WEBCHECK = "INSERT /*+ APPEND */ INTO BASEDB.CONNECTIVITY_WEBCHECK\n" +
     public static final String COPY_CONNECTIVITY_TO_WEBCHECK = "INSERT /*+ APPEND */ INTO BASEDB.CONNECTIVITY_WEBCHECK\n" +
             "(FSC, UFID, N1, N2, FDR1, FDR2, DIR, OHUG,OSTATUS, PHASE, X, Y)\n" +
             "SELECT FSC, UFID, N1, N2, FDR1, FDR2, DIR, OHUG, OSTATUS, PHASE, X, Y FROM BASEDB.CONNECTIVITY ";
@@ -258,7 +260,7 @@
            return oracleConnection;
        } catch (SQLException e)
        {
            OracleConvertJobContext.logger.warn(e.getMessage(), e);
            OracleConvertShapefilesJobContext.logger.warn(e.getMessage(), e);
        }
        oracleConnection = null;
@@ -277,7 +279,7 @@
            }
        } catch (SQLException e)
        {
            OracleConvertJobContext.logger.warn(e.getMessage(), e);
            OracleConvertShapefilesJobContext.logger.warn(e.getMessage(), e);
        }
    }
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/DummyFeatureConvertJobContext.java
copy from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java copy to xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/DummyFeatureConvertJobContext.java
File was copied from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java
@@ -1,46 +1,50 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.transaction.util.CommonsLoggingLogger;
import org.apache.commons.transaction.memory.PessimisticMapWrapper;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.geotools.feature.Feature;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.SchemaException;
import org.geotools.feature.FeatureType;
import org.geotools.feature.SimpleFeature;
import org.geotools.data.FeatureWriter;
import org.geotools.data.Transaction;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.indexed.IndexedShapefileDataStore;
import org.geotools.feature.Feature;
import org.geotools.feature.FeatureType;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.SchemaException;
import org.geotools.feature.SimpleFeature;
import org.xml.sax.SAXException;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
import com.ximple.eofms.filter.ElementDispatcher;
import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
import com.ximple.eofms.filter.ElementDispatchableFilter;
import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
import com.ximple.eofms.filter.TypeIdDispatchableFilter;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
import com.ximple.io.dgn7.UserAttributeData;
import com.ximple.io.dgn7.ComplexElement;
import com.ximple.io.dgn7.UserAttributeData;
public class FeatureDgnConvertJobContext extends AbstractDgnFileJobContext
public class DummyFeatureConvertJobContext extends AbstractDgnFileJobContext
{
    static final Log logger = LogFactory.getLog(FeatureDgnConvertJobContext.class);
    static final Log logger = LogFactory.getLog(DummyFeatureConvertJobContext.class);
    static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
    static final GeometryFactory geometryFactory = new GeometryFactory();
    static final String SHPOUTPATH = "shpout";
@@ -54,8 +58,9 @@
    private ElementDispatcher elementDispatcher;
    private String _filterConfig;
    private boolean withIndex = false;
    public FeatureDgnConvertJobContext(String dataPath, String filterConfig)
    public DummyFeatureConvertJobContext(String dataPath, String filterConfig)
    {
        super(dataPath);
        txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
@@ -144,6 +149,20 @@
    public void startTransaction()
    {
        assert elementDispatcher != null;
        for (ElementDispatchableFilter filter : elementDispatcher.getRules())
        {
            if (filter instanceof TypeCompIdDispatchableFilter)
            {
                ((TypeCompIdDispatchableFilter) filter).getCreateStrategy();
            } else if (filter instanceof TypeCompLevelIdDispatchableFilter)
            {
                ((TypeCompIdDispatchableFilter) filter).getCreateStrategy();
            } else if(filter instanceof TypeIdDispatchableFilter)
            {
                ((TypeCompIdDispatchableFilter) filter).getCreateStrategy();
            }
        }
    }
    public void commitTransaction()
@@ -190,21 +209,25 @@
                    writer = featuresWriterContext.get(featureType.getTypeName());
                } else
                {
                    // ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL());
                    /*
                    ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                            true, Charset.forName("UTF-8"));
                    */
                    if (!sfile.exists())
                    ShapefileDataStore shapefileDataStore = null;
                    boolean existFile = sfile.exists();
                    if (!withIndex)
                    {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                        shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                                true, Charset.forName("UTF-8"));
                    } else
                    {
                        shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                    }
                    if (!existFile)
                    {
                        shapefileDataStore.createSchema(featureType);
                        writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    } else {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                        writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    }
@@ -276,5 +299,15 @@
        }
        return null;
    }
}
    public boolean isWithIndex()
    {
        return withIndex;
    }
    public void setWithIndex(boolean withIndex)
    {
        this.withIndex = withIndex;
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/FeatureDgnConvertJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java
@@ -1,4 +1,4 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.io.File;
import java.io.IOException;
@@ -33,6 +33,7 @@
import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
import com.ximple.eofms.filter.ElementDispatcher;
import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
import com.ximple.io.dgn7.UserAttributeData;
@@ -54,6 +55,7 @@
    private ElementDispatcher elementDispatcher;
    private String _filterConfig;
    private boolean withIndex = false;
    public FeatureDgnConvertJobContext(String dataPath, String filterConfig)
    {
@@ -190,21 +192,25 @@
                    writer = featuresWriterContext.get(featureType.getTypeName());
                } else
                {
                    // ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL());
                    /*
                    ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                            true, Charset.forName("UTF-8"));
                    */
                    if (!sfile.exists())
                    ShapefileDataStore shapefileDataStore = null;
                    boolean existFile = sfile.exists();
                    if (!withIndex)
                    {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                        shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                                true, Charset.forName("UTF-8"));
                    } else
                    {
                        shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                    }
                    if (!existFile)
                    {
                        shapefileDataStore.createSchema(featureType);
                        writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    } else {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                        writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    }
@@ -276,5 +282,16 @@
        }
        return null;
    }
    public boolean isWithIndex()
    {
        return withIndex;
    }
    public void setWithIndex(boolean withIndex)
    {
        this.withIndex = withIndex;
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/GeneralDgnConvertJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java
@@ -1,4 +1,4 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.io.File;
import java.io.IOException;
@@ -33,6 +33,8 @@
import com.vividsolutions.jts.geom.GeometryFactory;
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
import com.ximple.io.dgn7.ArcElement;
import com.ximple.io.dgn7.ComplexChainElement;
import com.ximple.io.dgn7.Element;
@@ -50,7 +52,7 @@
    static final Log logger = LogFactory.getLog(GeneralDgnConvertJobContext.class);
    static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
    static final GeometryFactory geometryFactory = new GeometryFactory();
    static final String SHPOUTPATH = "shpout";
    public static final String SHPOUTPATH = "shpout";
    private String dataOut = null;
@@ -63,6 +65,7 @@
    private TWD97GeometryConverterDecorator convertDecorator = null;
    private String featureBaseName = null;
    private boolean withIndex = false;
    public GeneralDgnConvertJobContext(String dataPath)
    {
@@ -158,22 +161,25 @@
                    writer = featuresWriterContext.get(featureType.getTypeName());
                } else
                {
                    // ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL());
                    /*
                    ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                            true, Charset.forName("UTF-8"));
                    */
                    if (!sfile.exists())
                    ShapefileDataStore shapefileDataStore = null;
                    boolean existFile = sfile.exists();
                    if (!withIndex)
                    {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                        shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                                true, Charset.forName("UTF-8"));
                    } else
                    {
                        shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                    }
                    if (!existFile)
                    {
                        shapefileDataStore.createSchema(featureType);
                        writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    } else
                    {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                    } else {
                        writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    }
@@ -551,4 +557,15 @@
        }
        return null;
    }
    public boolean isWithIndex()
    {
        return withIndex;
    }
    public void setWithIndex(boolean withIndex)
    {
        this.withIndex = withIndex;
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/IndexDgnConvertJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java
@@ -1,4 +1,4 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.io.File;
import java.io.IOException;
@@ -36,6 +36,8 @@
import com.ximple.eofms.util.DefaultColorTable;
import com.ximple.eofms.util.TPCLIDConverter;
import com.ximple.eofms.util.TWDDatumConverter;
import com.ximple.eofms.util.TWD97GeometryConverterDecorator;
import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
import com.ximple.io.dgn7.TextElement;
@@ -47,7 +49,7 @@
    static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
    static final GeometryFactory geometryFactory = new GeometryFactory();
    TWD97GeometryConverterDecorator convertDecorator = new TWD97GeometryConverterDecorator();
    static final String SHPOUTPATH = "shpout";
    public static final String SHPOUTPATH = "shpout";
    private String dataOut = null;
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertOraSDOJobContext.java
New file
@@ -0,0 +1,5 @@
package com.ximple.eofms.jobs.context;
public class OracleConvertOraSDOJobContext
{
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertPostGISJobContext.java
New file
@@ -0,0 +1,5 @@
package com.ximple.eofms.jobs.context;
public class OracleConvertPostGISJobContext
{
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleConvertShapefilesJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
@@ -1,4 +1,4 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import java.io.File;
import java.io.IOException;
@@ -35,17 +35,19 @@
import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
import com.ximple.eofms.filter.ElementDispatcher;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
import com.ximple.eofms.jobs.OracleElementLogger;
import com.ximple.io.dgn7.Element;
import com.ximple.io.dgn7.FrammeAttributeData;
import com.ximple.io.dgn7.ComplexElement;
public class OracleConvertJobContext extends AbstractOracleJobContext
public class OracleConvertShapefilesJobContext extends AbstractOracleJobContext
{
    static Log logger = LogFactory.getLog(OracleConvertJobContext.class);
    static Log logger = LogFactory.getLog(OracleConvertShapefilesJobContext.class);
    static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
    static final String SHPOUTPATH = "shpout";
    public static final String SHPOUTPATH = "shpout";
    private OracleElementLogger elmLogger = null;
@@ -76,8 +78,9 @@
    private String currentSchema = null;
    private boolean schemaChanged = false;
    private String _convertElementIn = null;
    private boolean withIndex = false;
    public OracleConvertJobContext(String filterConfig)
    public OracleConvertShapefilesJobContext(String filterConfig)
    {
        properties = new Properties();
        _filterConfig = filterConfig;
@@ -217,20 +220,25 @@
                    writer = featuresWriterContext.get(featureType.getTypeName());
                } else
                {
                    /*
                    ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                            true, Charset.forName("UTF-8"));
                    */
                    if (!sfile.exists())
                    ShapefileDataStore shapefileDataStore = null;
                    boolean existFile = sfile.exists();
                    if (!withIndex)
                    {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                        shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(),
                                true, Charset.forName("UTF-8"));
                    } else
                    {
                        shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                    }
                    if (!existFile)
                    {
                        shapefileDataStore.createSchema(featureType);
                        writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    } else {
                        ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(),
                                null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8"));
                        writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(),
                                Transaction.AUTO_COMMIT);
                    }
@@ -344,4 +352,14 @@
    {
        _convertElementIn = convertElementIn;
    }
    public boolean isWithIndex()
    {
        return withIndex;
    }
    public void setWithIndex(boolean withIndex)
    {
        this.withIndex = withIndex;
    }
}
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java
@@ -1,4 +1,6 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.jobs.context;
import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
public class OracleUpgradeJobContext extends AbstractOracleJobContext
{
xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/TWD97GeometryConverterDecorator.java
File was renamed from xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java
@@ -1,4 +1,4 @@
package com.ximple.eofms.jobs;
package com.ximple.eofms.util;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml
New file
@@ -0,0 +1,16 @@
<?xml version='1.0' encoding="big5"?>
<!DOCTYPE digester-rules PUBLIC "-//Jakarta Apache //DTD digester-rules XML V1.0//EN" "digester-rules.dtd">
<digester-rules>
  <pattern value="FeatureClassificationRules">
    <object-create-rule classname="com.ximple.eofms.collector.FeatureClassification"/>
    <set-properties-rule/>
    <pattern value="FeatureTypeCollector">
      <object-create-rule classname="com.ximple.eofms.collector.FeatureTypeCollector"/>
      <set-next-rule methodname="addCollector" paramtype="com.ximple.eofms.collector.FeatureTypeCollector"/>
      <set-properties-rule/>
      <bean-property-setter-rule pattern="name"/>
      <bean-property-setter-rule pattern="description"/>
      <bean-property-setter-rule pattern="featuretypeList"/>
    </pattern>
  </pattern>
</digester-rules>
xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultMapGroups.xml
New file
@@ -0,0 +1,91 @@
<FeatureClassificationRules>
  <FeatureTypeCollector name="22KVSUBHV">
    <featuretypeList>
      tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-999.C-0_62_1,tpc:FSC-503.C-0_1_2,tpc:FSC-411.C-0_27_1,tpc:FSC-411.C-1_37_1,tpc:FSC-114.C-3_60_1,tpc:FSC-114.C-2_24_1,tpc:FSC-114.C-0_24_1,tpc:FSC-114.C-1_34_1,tpc:FSC-106.C-2_4_1,tpc:FSC-106.C-0_4_1,tpc:FSC-115.C-6_48_1,tpc:FSC-115.C-0_48_1,tpc:FSC-122.C-0_24_1,tpc:FSC-122.C-1_34_1,tpc:FSC-105.C-0_39_1,tpc:FSC-106.C-0_3_1,tpc:FSC-115.C-6_48_1,tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-1_56_1,tpc:FSC-411.C-0_8_1,tpc:FSC-411.C-1_18_1,tpc:FSC-107.C-0_26_1,tpc:FSC-107.C-2_36_1,tpc:FSC-120.C-0_52_1,tpc:FSC-101.C-0_51_0,tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-9_10_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="11KVHVOH">
    <featuretypeList>tpc:FSC-115.C-0_46_1,tpc:FSC-115.C-0_46_2,tpc:FSC-115.C-1_46_1,tpc:FSC-115.C-1_46_2,tpc:FSC-106.C-2_1_1,tpc:FSC-106.C-2_1_2,tpc:FSC-106.C-4_1_1,tpc:FSC-106.C-4_1_2,tpc:FSC-106.C-0_1_1,tpc:FSC-106.C-0_1_2,tpc:FSC-140.C-2_51_1,tpc:FSC-140.C-2_51_2,tpc:FSC-140.C-0_51_1,tpc:FSC-140.C-0_51_2,tpc:FSC-130.C-0_11_1,tpc:FSC-130.C-0_11_2,tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-108.C-0_44_2,tpc:FSC-108.C-1_54_2,tpc:FSC-119.C-0_61_2,tpc:FSC-118.C-0_49_2,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-8_9_2,tpc:FSC-407.C-9_9_1,tpc:FSC-407.C-9_9_2,tpc:FSC-407.C-10_9_1,tpc:FSC-407.C-11_9_1,tpc:FSC-114.C-0_21_1,tpc:FSC-114.C-0_21_2,tpc:FSC-114.C-2_21_0,tpc:FSC-114.C-2_21_1,tpc:FSC-114.C-2_21_2,tpc:FSC-107.C-2_37_1,tpc:FSC-107.C-0_27_1,tpc:FSC-117.C-0_27_2,tpc:FSC-120.C-0_42_1,tpc:FSC-120.C-0_42_2,tpc:FSC-131.C-0_12_1,tpc:FSC-131.C-0_12_2,tpc:FSC-109.C-0_13_1,tpc:FSC-109.C-0_13_2,tpc:FSC-109.C-0_13_3,tpc:FSC-116.C-0_14_1,tpc:FSC-116.C-0_14_2,tpc:FSC-102.C-0_30_2,tpc:FSC-102.C-0_40_1,tpc:FSC-100.C-0_59_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-999.C-0_62_1,tpc:FSC-503.C-0_1_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="CLS">
    <featuretypeList>tpc:FSC-203.C-1_37_1,tpc:FSC-203.C-0_37_1,tpc:FSC-203.C-1_38_1,tpc:FSC-203.C-0_38_1,tpc:FSC-311.C-0_45_1,tpc:FSC-311.C-1_45_0,tpc:FSC-311.C-1_45_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="LVOH">
    <featuretypeList>tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-1_9_1,tpc:FSC-407.C-1_9_2,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-8_9_2,tpc:FSC-407.C-9_10_1,tpc:FSC-407.C-9_9_1,tpc:FSC-407.C-9_9_2,tpc:FSC-115.C-2_50_2,tpc:FSC-115.C-3_50_1,tpc:FSC-115.C-7_58_1,tpc:FSC-200.C-0_28_1,tpc:FSC-200.C-0_30_1,tpc:FSC-202.C-1_36_0,tpc:FSC-202.C-0_36_1,tpc:FSC-203.C-1_38_1,tpc:FSC-204.C-0_49_1,tpc:FSC-205.C-2_41_1,tpc:FSC-205.C-0_39_1,tpc:FSC-208.C-0_44_1,tpc:FSC-209.C-0_46_1,tpc:FSC-211.C-0_32_1,tpc:FSC-212.C-1_34_0,tpc:FSC-303.C-0_29_1,tpc:FSC-305.C-0_34_1,tpc:FSC-306.C-0_36_1,tpc:FSC-307.C-0_38_1,tpc:FSC-308.C-0_40_1,tpc:FSC-314.C-0_26_1,tpc:FSC-314.C-1_28_0,tpc:FSC-315.C-0_26_1,tpc:FSC-315.C-1_28_0,tpc:FSC-316.C-0_54_1,tpc:FSC-317.C-0_32_1,tpc:FSC-317.C-1_32_1,tpc:FSC-318.C-0_54_4,tpc:FSC-503.C-0_1_2,tpc:FSC-502.C-0_1_1,tpc:FSC-502.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-999.C-0_62_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="HICUSTOMER">
    <featuretypeList>tpc:FSC-107.C-0_25_1,tpc:FSC-107.C-0_25_2,tpc:FSC-107.C-0_26_1,tpc:FSC-107.C-0_26_2,tpc:FSC-107.C-0_27_1,tpc:FSC-107.C-2_0_1,tpc:FSC-107.C-2_25_1,tpc:FSC-107.C-2_26_1,tpc:FSC-107.C-2_35_1,tpc:FSC-107.C-2_35_2,tpc:FSC-107.C-2_36_1,tpc:FSC-107.C-2_36_2,tpc:FSC-107.C-2_37_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="22KVHVUG">
    <featuretypeList>tpc:FSC-113.C-0_4_1,tpc:FSC-403.C-2_14_1,tpc:FSC-403.C-2_15_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-403.C-1_4_1,tpc:FSC-403.C-1_13_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-101.C-0_51_0,tpc:FSC-101.C-0_51_1,tpc:FSC-140.C-1_54_0,tpc:FSC-140.C-1_54_1,tpc:FSC-140.C-2_54_1,tpc:FSC-140.C-2_54_2,tpc:FSC-140.C-0_54_1,tpc:FSC-140.C-0_54_2,tpc:FSC-140.C-3_54_0,tpc:FSC-140.C-4_54_1,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-411.C-0_27_1,tpc:FSC-411.C-0_27_2,tpc:FSC-411.C-0_8_1,tpc:FSC-411.C-0_8_2,tpc:FSC-411.C-1_37_1,tpc:FSC-411.C-1_37_2,tpc:FSC-411.C-1_18_1,tpc:FSC-411.C-1_18_2,tpc:FSC-118.C-0_50_2,tpc:FSC-115.C-0_48_1,tpc:FSC-115.C-0_48_2,tpc:FSC-114.C-3_60_1,tpc:FSC-114.C-3_60_2,tpc:FSC-114.C-2_24_1,tpc:FSC-114.C-2_24_2,tpc:FSC-114.C-0_24_1,tpc:FSC-114.C-0_24_2,tpc:FSC-114.C-1_34_1,tpc:FSC-114.C-1_34_2,tpc:FSC-122.C-0_24_1,tpc:FSC-122.C-1_34_1,tpc:FSC-107.C-0_26_1,tpc:FSC-107.C-0_26_2,tpc:FSC-117.C-0_27_2,tpc:FSC-105.C-0_39_1,tpc:FSC-105.C-0_39_2,tpc:FSC-120.C-0_52_1,tpc:FSC-120.C-0_52_2,tpc:FSC-108.C-0_45_2,tpc:FSC-108.C-1_55_2,tpc:FSC-119.C-0_62_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="11KVSUBHV">
    <featuretypeList>tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-999.C-0_62_1,tpc:FSC-503.C-0_1_2,tpc:FSC-114.C-3_60_1,tpc:FSC-114.C-2_23_1,tpc:FSC-114.C-0_23_1,tpc:FSC-114.C-1_33_1,tpc:FSC-106.C-2_2_1,tpc:FSC-106.C-0_2_1,tpc:FSC-106.C-2_1_1,tpc:FSC-106.C-0_1_1,tpc:FSC-106.C-4_1_1,tpc:FSC-115.C-0_47_1,tpc:FSC-115.C-1_57_1,tpc:FSC-122.C-0_23_1,tpc:FSC-122.C-1_33_1,tpc:FSC-105.C-0_29_1,tpc:FSC-114.C-0_21_1,tpc:FSC-115.C-6_47_1,tpc:FSC-115.C-0_46_1,tpc:FSC-115.C-1_46_1,tpc:FSC-411.C-0_7_1,tpc:FSC-411.C-1_17_1,tpc:FSC-107.C-2_35_1,tpc:FSC-107.C-0_25_1,tpc:FSC-107.C-2_37_1,tpc:FSC-107.C-0_27_1,tpc:FSC-116.C-0_14_1,tpc:FSC-120.C-0_42_1,tpc:FSC-101.C-0_41_0,tpc:FSC-109.C-0_13_1,tpc:FSC-102.C-0_40_1,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-9_9_1,tpc:FSC-407.C-10_9_1,tpc:FSC-407.C-11_9_1,tpc:FSC-130.C-0_11_1,tpc:FSC-131.C-0_12_1,tpc:FSC-411.C-0_27_1,tpc:FSC-411.C-1_37_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="FIBER">
    <featuretypeList>tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-1_16_2,tpc:FSC-300.C-3_11_1,tpc:FSC-300.C-2_11_1,tpc:FSC-300.C-0_10_2,tpc:FSC-319.C-0_12_1,tpc:FSC-320.C-0_13_1,tpc:FSC-323.C-0_1_1,tpc:FSC-324.C-1_2_1,tpc:FSC-324.C-0_1_1,tpc:FSC-403.C-6_45_1,tpc:FSC-403.C-7_45_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="LINEFEATURE">
    <featuretypeList>tpc:FSC-115.C-0_46_1,tpc:FSC-115.C-0_46_2,tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-1_46_1,tpc:FSC-115.C-1_46_2,tpc:FSC-115.C-1_56_1,tpc:FSC-115.C-0_47_1,tpc:FSC-115.C-0_47_2,tpc:FSC-115.C-0_48_1,tpc:FSC-115.C-0_48_2,tpc:FSC-102.C-0_30_2,tpc:FSC-102.C-0_40_1,tpc:FSC-117.C-0_27_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="22KVMAINHV">
    <featuretypeList>tpc:FSC-117.C-0_27_2,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-999.C-0_62_1,tpc:FSC-503.C-0_1_2,tpc:FSC-118.C-0_50_2,tpc:FSC-114.C-3_60_2,tpc:FSC-114.C-2_24_2,tpc:FSC-114.C-0_24_2,tpc:FSC-114.C-1_34_2,tpc:FSC-106.C-0_4_2,tpc:FSC-115.C-0_48_2,tpc:FSC-105.C-0_39_2,tpc:FSC-411.C-0_8_2,tpc:FSC-411.C-1_18_2,tpc:FSC-107.C-0_26_2,tpc:FSC-107.C-2_36_2,tpc:FSC-120.C-0_52_2,tpc:FSC-101.C-0_51_1,tpc:FSC-119.C-0_62_2,tpc:FSC-108.C-0_45_2,tpc:FSC-108.C-1_55_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-1_37_2,tpc:FSC-100.C-0_60_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="SLS">
    <featuretypeList>tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-115.C-3_50_1,tpc:FSC-115.C-3_51_1,tpc:FSC-115.C-2_50_2,tpc:FSC-115.C-2_51_2,tpc:FSC-115.C-7_55_1,tpc:FSC-115.C-7_58_1,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-8_9_2,tpc:FSC-203.C-0_37_1,tpc:FSC-203.C-0_38_1,tpc:FSC-203.C-1_37_1,tpc:FSC-203.C-1_38_1,tpc:FSC-303.C-0_29_1,tpc:FSC-303.C-1_43_0,tpc:FSC-303.C-3_43_0,tpc:FSC-301.C-0_21_1,tpc:FSC-301.C-1_23_0,tpc:FSC-301.C-3_23_0,tpc:FSC-305.C-0_33_1,tpc:FSC-305.C-0_34_1,tpc:FSC-306.C-0_35_1,tpc:FSC-306.C-0_36_1,tpc:FSC-307.C-0_46_1,tpc:FSC-307.C-0_37_1,tpc:FSC-307.C-0_38_1,tpc:FSC-308.C-0_39_1,tpc:FSC-308.C-0_40_1,tpc:FSC-314.C-0_26_1,tpc:FSC-314.C-1_28_0,tpc:FSC-315.C-0_26_1,tpc:FSC-315.C-1_28_0,tpc:FSC-316.C-0_53_1,tpc:FSC-316.C-0_54_1,tpc:FSC-317.C-0_31_1,tpc:FSC-317.C-0_32_1,tpc:FSC-318.C-0_53_4,tpc:FSC-318.C-0_54_4,tpc:FSC-302.C-0_25_1,tpc:FSC-302.C-1_27_0,tpc:FSC-317.C-1_31_1,tpc:FSC-317.C-1_32_1,tpc:FSC-403.C-4_44_1,tpc:FSC-403.C-5_44_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-0_1_1,tpc:FSC-502.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-501.C-1_2_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="OMS">
    <featuretypeList>tpc:FSC-101.C-0_41_0,tpc:FSC-503.C-0_1_2,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-0_1_1,tpc:FSC-411.C-1_37_2,tpc:FSC-411.C-1_37_1,tpc:FSC-411.C-1_18_2,tpc:FSC-411.C-1_18_1,tpc:FSC-411.C-1_17_2,tpc:FSC-411.C-1_17_1,tpc:FSC-411.C-0_8_2,tpc:FSC-411.C-0_8_1,tpc:FSC-411.C-0_7_2,tpc:FSC-411.C-0_7_1,tpc:FSC-411.C-0_27_2,tpc:FSC-411.C-0_27_1,tpc:FSC-407.C-8_9_2,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_10_1,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-1_27_2,tpc:FSC-402.C-1_16_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-0_27_2,tpc:FSC-131.C-0_12_2,tpc:FSC-131.C-0_12_1,tpc:FSC-130.C-0_11_2,tpc:FSC-130.C-0_11_1,tpc:FSC-122.C-1_34_1,tpc:FSC-122.C-1_33_2,tpc:FSC-122.C-1_33_1,tpc:FSC-122.C-0_24_1,tpc:FSC-122.C-0_23_2,tpc:FSC-122.C-0_23_1,tpc:FSC-120.C-0_52_2,tpc:FSC-120.C-0_52_1,tpc:FSC-120.C-0_42_2,tpc:FSC-120.C-0_42_1,tpc:FSC-119.C-0_62_2,tpc:FSC-119.C-0_61_2,tpc:FSC-118.C-0_50_2,tpc:FSC-118.C-0_49_2,tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-0_48_2,tpc:FSC-115.C-0_48_1,tpc:FSC-115.C-0_47_2,tpc:FSC-115.C-0_47_1,tpc:FSC-115.C-0_46_2,tpc:FSC-115.C-0_46_1,tpc:FSC-114.C-3_60_2,tpc:FSC-114.C-3_60_1,tpc:FSC-114.C-2_24_2,tpc:FSC-114.C-2_24_1,tpc:FSC-114.C-2_23_2,tpc:FSC-114.C-2_23_1,tpc:FSC-114.C-2_21_2,tpc:FSC-114.C-2_21_1,tpc:FSC-114.C-2_21_0,tpc:FSC-114.C-1_34_2,tpc:FSC-114.C-1_34_1,tpc:FSC-114.C-1_33_2,tpc:FSC-114.C-1_33_1,tpc:FSC-114.C-0_24_2,tpc:FSC-114.C-0_24_1,tpc:FSC-114.C-0_23_2,tpc:FSC-114.C-0_23_1,tpc:FSC-114.C-0_21_2,tpc:FSC-114.C-0_21_1,tpc:FSC-109.C-0_13_3,tpc:FSC-109.C-0_13_2,tpc:FSC-109.C-0_13_1,tpc:FSC-108.C-1_55_2,tpc:FSC-108.C-1_54_2,tpc:FSC-108.C-0_45_2,tpc:FSC-108.C-0_44_2,tpc:FSC-107.C-2_36_2,tpc:FSC-107.C-2_36_1,tpc:FSC-107.C-2_35_2,tpc:FSC-107.C-2_35_1,tpc:FSC-107.C-0_27_1,tpc:FSC-107.C-0_26_2,tpc:FSC-107.C-0_26_1,tpc:FSC-107.C-0_25_2,tpc:FSC-107.C-0_25_1,tpc:FSC-106.C-0_4_1,tpc:FSC-106.C-0_3_1,tpc:FSC-106.C-0_2_2,tpc:FSC-106.C-0_2_1,tpc:FSC-106.C-0_1_2,tpc:FSC-106.C-0_1_1,tpc:FSC-102.C-0_40_1,tpc:FSC-102.C-0_30_2,tpc:FSC-101.C-0_51_1,tpc:FSC-101.C-0_51_0,tpc:FSC-101.C-0_41_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="LVPIPE">
    <featuretypeList>tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-411.C-2_7_1,tpc:FSC-411.C-2_7_2,tpc:FSC-411.C-2_8_1,tpc:FSC-411.C-2_8_2,tpc:FSC-411.C-3_17_1,tpc:FSC-411.C-3_17_2,tpc:FSC-411.C-3_37_1,tpc:FSC-411.C-3_37_2,tpc:FSC-411.C-3_18_1,tpc:FSC-411.C-3_18_2,tpc:FSC-411.C-7_7_1,tpc:FSC-411.C-7_7_2,tpc:FSC-411.C-7_8_1,tpc:FSC-407.C-2_9_1,tpc:FSC-407.C-2_9_2,tpc:FSC-407.C-2_10_1,tpc:FSC-407.C-2_10_1,tpc:FSC-407.C-3_19_1,tpc:FSC-407.C-3_19_2,tpc:FSC-407.C-3_20_1,tpc:FSC-407.C-7_10_1,tpc:FSC-407.C-7_9_1,tpc:FSC-407.C-7_9_2,tpc:FSC-202.C-1_35_0,tpc:FSC-202.C-0_35_1,tpc:FSC-203.C-1_37_1,tpc:FSC-203.C-0_37_1,tpc:FSC-206.C-2_1_0,tpc:FSC-206.C-1_1_1,tpc:FSC-206.C-0_1_1,tpc:FSC-207.C-1_1_0,tpc:FSC-207.C-0_1_1,tpc:FSC-209.C-0_45_1,tpc:FSC-216.C-2_1_0,tpc:FSC-216.C-1_1_1,tpc:FSC-216.C-0_1_1,tpc:FSC-401.C-1_11_0,tpc:FSC-401.C-0_11_1,tpc:FSC-401.C-2_11_1,tpc:FSC-401.C-3_11_0,tpc:FSC-403.C-0_11_1,tpc:FSC-403.C-1_11_1,tpc:FSC-403.C-0_3_1,tpc:FSC-403.C-1_3_1,tpc:FSC-403.C-0_22_1,tpc:FSC-403.C-0_23_1,tpc:FSC-403.C-0_24_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-420.C-0_54_3,tpc:FSC-420.C-1_2_1,tpc:FSC-421.C-1_2_1,tpc:FSC-421.C-0_1_3,tpc:FSC-424.C-0_1_1,tpc:FSC-503.C-0_1_2,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-999.C-0_62_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="POLE">
    <featuretypeList>tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-1_9_1,tpc:FSC-407.C-1_9_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="22KVHVOH">
    <featuretypeList>tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-1_56_1,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-9_10_1,tpc:FSC-117.C-0_27_2,tpc:FSC-118.C-0_50_2,tpc:FSC-108.C-1_55_2,tpc:FSC-119.C-0_62_2,tpc:FSC-100.C-0_60_2,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="11KVHVUG">
    <featuretypeList>tpc:FSC-113.C-0_4_1,tpc:FSC-122.C-0_23_1,tpc:FSC-122.C-0_23_2,tpc:FSC-122.C-1_33_1,tpc:FSC-122.C-1_33_2,tpc:FSC-140.C-1_52_0,tpc:FSC-140.C-1_52_1,tpc:FSC-140.C-2_52_2,tpc:FSC-140.C-2_52_1,tpc:FSC-140.C-0_52_2,tpc:FSC-140.C-0_52_1,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-411.C-1_17_1,tpc:FSC-411.C-1_17_2,tpc:FSC-411.C-1_37_1,tpc:FSC-411.C-1_37_2,tpc:FSC-411.C-0_7_1,tpc:FSC-411.C-0_7_1,tpc:FSC-107.C-2_35_1,tpc:FSC-107.C-2_35_2,tpc:FSC-107.C-0_25_1,tpc:FSC-107.C-0_25_2,tpc:FSC-107.C-0_27_1,tpc:FSC-105.C-0_29_1,tpc:FSC-105.C-0_29_2,tpc:FSC-101.C-0_41_0,tpc:FSC-101.C-0_41_1,tpc:FSC-130.C-0_11_1,tpc:FSC-130.C-0_11_2,tpc:FSC-108.C-0_44_2,tpc:FSC-108.C-1_54_2,tpc:FSC-119.C-0_61_2,tpc:FSC-115.C-0_47_1,tpc:FSC-115.C-0_47_2,tpc:FSC-118.C-0_49_2,tpc:FSC-403.C-2_14_1,tpc:FSC-403.C-2_15_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-403.C-1_4_1,tpc:FSC-403.C-1_13_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-114.C-1_33_1,tpc:FSC-114.C-1_33_2,tpc:FSC-114.C-3_60_1,tpc:FSC-114.C-3_60_2,tpc:FSC-114.C-2_23_1,tpc:FSC-114.C-0_23_1,tpc:FSC-114.C-0_23_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="11KVMAINHV">
    <featuretypeList>tpc:FSC-117.C-0_27_2,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-999.C-0_62_1,tpc:FSC-503.C-0_1_2,tpc:FSC-118.C-0_49_2,tpc:FSC-114.C-3_60_2,tpc:FSC-114.C-2_23_2,tpc:FSC-114.C-1_33_2,tpc:FSC-106.C-2_2_2,tpc:FSC-106.C-0_2_2,tpc:FSC-115.C-0_47_2,tpc:FSC-122.C-0_23_2,tpc:FSC-122.C-1_33_2,tpc:FSC-105.C-0_29_2,tpc:FSC-114.C-2_21_2,tpc:FSC-114.C-0_21_2,tpc:FSC-106.C-2_1_2,tpc:FSC-106.C-0_1_2,tpc:FSC-106.C-4_1_2,tpc:FSC-115.C-6_47_2,tpc:FSC-115.C-0_46_2,tpc:FSC-115.C-1_46_2,tpc:FSC-411.C-0_7_2,tpc:FSC-411.C-1_17_2,tpc:FSC-107.C-2_35_2,tpc:FSC-107.C-0_25_2,tpc:FSC-116.C-0_14_2,tpc:FSC-120.C-0_42_2,tpc:FSC-101.C-0_41_1,tpc:FSC-109.C-0_13_2,tpc:FSC-102.C-0_30_2,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-8_9_2,tpc:FSC-407.C-9_9_2,tpc:FSC-119.C-0_61_2,tpc:FSC-130.C-0_11_2,tpc:FSC-131.C-0_12_2,tpc:FSC-108.C-0_44_2,tpc:FSC-108.C-1_54_2,tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-100.C-0_59_1,tpc:FSC-411.C-0_27_2,tpc:FSC-411.C-1_37_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="ALL">
    <featuretypeList>tpc:FSC-100.C-0_59_1,tpc:FSC-100.C-0_60_2,tpc:FSC-101.C-0_41_0,tpc:FSC-101.C-0_41_1,tpc:FSC-101.C-0_51_0,tpc:FSC-101.C-0_51_1,tpc:FSC-102.C-0_30_2,tpc:FSC-102.C-0_40_1,tpc:FSC-105.C-0_29_1,tpc:FSC-105.C-0_29_2,tpc:FSC-105.C-0_39_1,tpc:FSC-105.C-0_39_2,tpc:FSC-105.C-0_60_2,tpc:FSC-106.C-0_19_2,tpc:FSC-106.C-0_1_1,tpc:FSC-106.C-0_1_2,tpc:FSC-106.C-0_24_2,tpc:FSC-106.C-0_2_1,tpc:FSC-106.C-0_2_2,tpc:FSC-106.C-0_3_1,tpc:FSC-106.C-0_4_1,tpc:FSC-106.C-0_4_2,tpc:FSC-106.C-2_1_1,tpc:FSC-106.C-2_1_2,tpc:FSC-106.C-2_2_1,tpc:FSC-106.C-2_2_2,tpc:FSC-106.C-2_3_1,tpc:FSC-106.C-2_4_1,tpc:FSC-106.C-4_1_1,tpc:FSC-106.C-4_1_2,tpc:FSC-107.C-0_25_1,tpc:FSC-107.C-0_25_2,tpc:FSC-107.C-0_26_1,tpc:FSC-107.C-0_26_2,tpc:FSC-107.C-0_27_1,tpc:FSC-107.C-2_0_1,tpc:FSC-107.C-2_25_1,tpc:FSC-107.C-2_26_1,tpc:FSC-107.C-2_35_1,tpc:FSC-107.C-2_35_2,tpc:FSC-107.C-2_36_1,tpc:FSC-107.C-2_36_2,tpc:FSC-107.C-2_37_1,tpc:FSC-108.C-0_44_2,tpc:FSC-108.C-0_45_2,tpc:FSC-108.C-1_0_2,tpc:FSC-108.C-1_54_2,tpc:FSC-108.C-1_55_2,tpc:FSC-109.C-0_13_1,tpc:FSC-109.C-0_13_2,tpc:FSC-109.C-0_13_3,tpc:FSC-113.C-0_4_1,tpc:FSC-114.C-0_21_1,tpc:FSC-114.C-0_21_2,tpc:FSC-114.C-0_23_1,tpc:FSC-114.C-0_23_2,tpc:FSC-114.C-0_24_1,tpc:FSC-114.C-0_24_2,tpc:FSC-114.C-1_23_1,tpc:FSC-114.C-1_23_2,tpc:FSC-114.C-1_24_1,tpc:FSC-114.C-1_24_2,tpc:FSC-114.C-1_33_1,tpc:FSC-114.C-1_33_2,tpc:FSC-114.C-1_34_1,tpc:FSC-114.C-1_34_2,tpc:FSC-114.C-2_21_0,tpc:FSC-114.C-2_21_1,tpc:FSC-114.C-2_21_2,tpc:FSC-114.C-2_23_1,tpc:FSC-114.C-2_23_2,tpc:FSC-114.C-2_24_1,tpc:FSC-114.C-2_24_2,tpc:FSC-114.C-2_60_1,tpc:FSC-114.C-2_60_2,tpc:FSC-114.C-3_33_1,tpc:FSC-114.C-3_33_2,tpc:FSC-114.C-3_34_1,tpc:FSC-114.C-3_34_2,tpc:FSC-114.C-3_60_1,tpc:FSC-114.C-3_60_2,tpc:FSC-115.C-0_46_1,tpc:FSC-115.C-0_46_2,tpc:FSC-115.C-0_47_1,tpc:FSC-115.C-0_47_2,tpc:FSC-115.C-0_48_1,tpc:FSC-115.C-0_48_2,tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-1_46_1,tpc:FSC-115.C-1_46_2,tpc:FSC-115.C-1_56_1,tpc:FSC-115.C-1_57_1,tpc:FSC-115.C-2_50_2,tpc:FSC-115.C-2_51_2,tpc:FSC-115.C-3_50_1,tpc:FSC-115.C-3_51_1,tpc:FSC-115.C-4_13_2,tpc:FSC-115.C-4_14_2,tpc:FSC-115.C-4_51_2,tpc:FSC-115.C-4_60_2,tpc:FSC-115.C-5_13_1,tpc:FSC-115.C-5_14_1,tpc:FSC-115.C-5_51_1,tpc:FSC-115.C-5_60_1,tpc:FSC-115.C-6_13_1,tpc:FSC-115.C-6_14_1,tpc:FSC-115.C-6_47_1,tpc:FSC-115.C-6_47_2,tpc:FSC-115.C-6_48_1,tpc:FSC-115.C-6_51_1,tpc:FSC-115.C-6_56_1,tpc:FSC-115.C-6_58_1,tpc:FSC-115.C-6_60_1,tpc:FSC-115.C-7_55_1,tpc:FSC-115.C-7_58_1,tpc:FSC-115.C-8_47_1,tpc:FSC-115.C-8_47_2,tpc:FSC-115.C-8_48_1,tpc:FSC-116.C-0_14_1,tpc:FSC-116.C-0_14_2,tpc:FSC-117.C-0_27_2,tpc:FSC-118.C-0_49_2,tpc:FSC-118.C-0_50_2,tpc:FSC-119.C-0_61_2,tpc:FSC-119.C-0_62_2,tpc:FSC-120.C-0_42_1,tpc:FSC-120.C-0_42_2,tpc:FSC-120.C-0_52_1,tpc:FSC-120.C-0_52_2,tpc:FSC-122.C-0_23_1,tpc:FSC-122.C-0_23_2,tpc:FSC-122.C-0_24_1,tpc:FSC-122.C-1_23_1,tpc:FSC-122.C-1_24_1,tpc:FSC-122.C-1_33_1,tpc:FSC-122.C-1_33_2,tpc:FSC-122.C-1_34_1,tpc:FSC-130.C-0_11_1,tpc:FSC-130.C-0_11_2,tpc:FSC-131.C-0_12_1,tpc:FSC-131.C-0_12_2,tpc:FSC-140.C-0_51_1,tpc:FSC-140.C-0_51_2,tpc:FSC-140.C-0_52_1,tpc:FSC-140.C-0_52_2,tpc:FSC-140.C-0_54_1,tpc:FSC-140.C-0_54_2,tpc:FSC-140.C-0_60_1,tpc:FSC-140.C-0_60_2,tpc:FSC-140.C-1_52_0,tpc:FSC-140.C-1_52_1,tpc:FSC-140.C-1_54_0,tpc:FSC-140.C-1_54_1,tpc:FSC-140.C-2_51_1,tpc:FSC-140.C-2_51_2,tpc:FSC-140.C-2_52_1,tpc:FSC-140.C-2_52_2,tpc:FSC-140.C-2_54_1,tpc:FSC-140.C-2_54_2,tpc:FSC-140.C-3_54_0,tpc:FSC-140.C-4_54_1,tpc:FSC-200.C-0_28_1,tpc:FSC-200.C-0_29_1,tpc:FSC-200.C-0_30_1,tpc:FSC-200.C-0_60_1,tpc:FSC-201.C-0_31_1,tpc:FSC-201.C-0_40_1,tpc:FSC-201.C-1_33_0,tpc:FSC-201.C-1_40_0,tpc:FSC-202.C-0_35_1,tpc:FSC-202.C-0_36_1,tpc:FSC-202.C-0_56_1,tpc:FSC-202.C-1_13_0,tpc:FSC-202.C-1_35_0,tpc:FSC-202.C-1_36_0,tpc:FSC-202.C-1_53_0,tpc:FSC-202.C-1_56_0,tpc:FSC-202.C-1_60_0,tpc:FSC-203.C-0_37_1,tpc:FSC-203.C-0_38_1,tpc:FSC-203.C-1_13_1,tpc:FSC-203.C-1_37_1,tpc:FSC-203.C-1_38_1,tpc:FSC-204.C-0_49_1,tpc:FSC-205.C-0_39_1,tpc:FSC-205.C-2_41_1,tpc:FSC-206.C-0_1_1,tpc:FSC-206.C-1_1_1,tpc:FSC-206.C-2_1_0,tpc:FSC-207.C-0_1_1,tpc:FSC-207.C-1_1_0,tpc:FSC-207.C-2_1_1,tpc:FSC-208.C-0_43_1,tpc:FSC-208.C-0_44_1,tpc:FSC-209.C-0_45_1,tpc:FSC-209.C-0_46_1,tpc:FSC-209.C-1_45_1,tpc:FSC-209.C-1_46_1,tpc:FSC-210.C-4_42_0,tpc:FSC-211.C-0_32_1,tpc:FSC-212.C-1_34_0,tpc:FSC-213.C-0_31_1,tpc:FSC-213.C-1_33_0,tpc:FSC-215.C-0_45_1,tpc:FSC-216.C-0_1_1,tpc:FSC-216.C-1_1_1,tpc:FSC-216.C-2_1_0,tpc:FSC-217.C-0_11_1,tpc:FSC-300.C-0_10_2,tpc:FSC-300.C-2_11_1,tpc:FSC-300.C-3_11_1,tpc:FSC-301.C-0_21_1,tpc:FSC-301.C-0_60_1,tpc:FSC-301.C-1_23_0,tpc:FSC-301.C-1_60_0,tpc:FSC-301.C-3_23_0,tpc:FSC-301.C-3_60_0,tpc:FSC-302.C-0_25_1,tpc:FSC-302.C-1_27_0,tpc:FSC-303.C-0_29_1,tpc:FSC-303.C-1_43_0,tpc:FSC-303.C-3_43_0,tpc:FSC-305.C-0_33_1,tpc:FSC-305.C-0_34_1,tpc:FSC-306.C-0_35_1,tpc:FSC-306.C-0_36_1,tpc:FSC-307.C-0_37_1,tpc:FSC-307.C-0_38_1,tpc:FSC-307.C-0_46_1,tpc:FSC-308.C-0_39_1,tpc:FSC-308.C-0_40_1,tpc:FSC-311.C-0_45_1,tpc:FSC-311.C-0_60_1,tpc:FSC-311.C-0_63_1,tpc:FSC-311.C-1_45_0,tpc:FSC-311.C-1_45_1,tpc:FSC-311.C-1_60_1,tpc:FSC-311.C-1_63_1,tpc:FSC-314.C-0_26_1,tpc:FSC-314.C-1_28_0,tpc:FSC-315.C-0_26_1,tpc:FSC-315.C-1_28_0,tpc:FSC-316.C-0_53_1,tpc:FSC-316.C-0_54_1,tpc:FSC-317.C-0_31_1,tpc:FSC-317.C-0_32_1,tpc:FSC-317.C-1_31_1,tpc:FSC-317.C-1_32_1,tpc:FSC-318.C-0_53_4,tpc:FSC-318.C-0_54_4,tpc:FSC-319.C-0_12_1,tpc:FSC-320.C-0_13_1,tpc:FSC-323.C-0_1_1,tpc:FSC-324.C-0_1_1,tpc:FSC-324.C-1_2_1,tpc:FSC-401.C-0_11_1,tpc:FSC-401.C-0_4_2,tpc:FSC-401.C-0_60_1,tpc:FSC-401.C-1_11_0,tpc:FSC-401.C-1_4_0,tpc:FSC-401.C-2_11_1,tpc:FSC-401.C-2_4_1,tpc:FSC-401.C-3_11_0,tpc:FSC-401.C-3_4_1,tpc:FSC-401.C-5_4_1,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-1_16_2,tpc:FSC-402.C-1_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-1_5_2,tpc:FSC-402.C-1_6_2,tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-2_37_2,tpc:FSC-403.C-0_11_1,tpc:FSC-403.C-0_13_1,tpc:FSC-403.C-0_22_1,tpc:FSC-403.C-0_23_1,tpc:FSC-403.C-0_24_1,tpc:FSC-403.C-0_3_1,tpc:FSC-403.C-0_4_1,tpc:FSC-403.C-1_11_1,tpc:FSC-403.C-1_13_1,tpc:FSC-403.C-1_14_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-403.C-1_3_1,tpc:FSC-403.C-1_4_1,tpc:FSC-403.C-1_60_1,tpc:FSC-403.C-2_13_1,tpc:FSC-403.C-2_14_1,tpc:FSC-403.C-2_15_1,tpc:FSC-403.C-2_20_1,tpc:FSC-403.C-2_60_1,tpc:FSC-403.C-4_11_1,tpc:FSC-403.C-4_44_1,tpc:FSC-403.C-5_11_1,tpc:FSC-403.C-5_44_1,tpc:FSC-403.C-5_60_1,tpc:FSC-403.C-6_45_1,tpc:FSC-403.C-7_45_1,tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-10_9_1,tpc:FSC-407.C-11_9_1,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-1_9_1,tpc:FSC-407.C-1_9_2,tpc:FSC-407.C-2_10_1,tpc:FSC-407.C-2_9_1,tpc:FSC-407.C-2_9_2,tpc:FSC-407.C-3_19_1,tpc:FSC-407.C-3_19_2,tpc:FSC-407.C-3_20_1,tpc:FSC-407.C-7_10_1,tpc:FSC-407.C-7_9_1,tpc:FSC-407.C-7_9_2,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-8_9_2,tpc:FSC-407.C-9_10_1,tpc:FSC-407.C-9_9_1,tpc:FSC-407.C-9_9_2,tpc:FSC-411.C-0_27_1,tpc:FSC-411.C-0_27_2,tpc:FSC-411.C-0_7_1,tpc:FSC-411.C-0_7_2,tpc:FSC-411.C-0_8_1,tpc:FSC-411.C-0_8_2,tpc:FSC-411.C-1_17_1,tpc:FSC-411.C-1_17_2,tpc:FSC-411.C-1_18_1,tpc:FSC-411.C-1_18_2,tpc:FSC-411.C-1_37_1,tpc:FSC-411.C-1_37_2,tpc:FSC-411.C-1_7_1,tpc:FSC-411.C-1_7_2,tpc:FSC-411.C-1_8_1,tpc:FSC-411.C-1_8_2,tpc:FSC-411.C-2_27_1,tpc:FSC-411.C-2_27_2,tpc:FSC-411.C-2_7_1,tpc:FSC-411.C-2_7_2,tpc:FSC-411.C-2_8_1,tpc:FSC-411.C-2_8_2,tpc:FSC-411.C-3_17_1,tpc:FSC-411.C-3_17_2,tpc:FSC-411.C-3_18_1,tpc:FSC-411.C-3_18_2,tpc:FSC-411.C-3_37_1,tpc:FSC-411.C-3_37_2,tpc:FSC-411.C-7_7_1,tpc:FSC-411.C-7_7_2,tpc:FSC-411.C-7_8_1,tpc:FSC-420.C-0_54_3,tpc:FSC-420.C-1_2_1,tpc:FSC-421.C-0_1_3,tpc:FSC-421.C-1_2_1,tpc:FSC-423.C-1_4_1,tpc:FSC-424.C-0_1_1,tpc:FSC-501.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-502.C-1_2_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="LVUG">
    <featuretypeList>tpc:FSC-217.C-0_11_1,tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-407.C-2_10_1,tpc:FSC-407.C-2_9_1,tpc:FSC-407.C-2_9_2,tpc:FSC-407.C-3_19_1,tpc:FSC-407.C-3_19_2,tpc:FSC-407.C-3_20_1,tpc:FSC-407.C-7_10_1,tpc:FSC-407.C-7_9_1,tpc:FSC-407.C-7_9_2,tpc:FSC-411.C-7_7_1,tpc:FSC-411.C-7_7_2,tpc:FSC-411.C-7_8_1,tpc:FSC-115.C-8_47_1,tpc:FSC-115.C-8_47_2,tpc:FSC-115.C-8_48_1,tpc:FSC-115.C-6_47_1,tpc:FSC-115.C-6_47_2,tpc:FSC-115.C-2_51_2,tpc:FSC-115.C-3_51_1,tpc:FSC-115.C-4_51_2,tpc:FSC-115.C-5_51_1,tpc:FSC-115.C-6_56_1,tpc:FSC-115.C-7_55_1,tpc:FSC-200.C-0_28_1,tpc:FSC-200.C-0_29_1,tpc:FSC-201.C-0_31_1,tpc:FSC-201.C-1_33_0,tpc:FSC-202.C-1_35_0,tpc:FSC-202.C-0_35_1,tpc:FSC-203.C-1_37_1,tpc:FSC-203.C-0_37_1,tpc:FSC-206.C-2_1_0,tpc:FSC-206.C-1_1_1,tpc:FSC-206.C-0_1_1,tpc:FSC-207.C-1_1_0,tpc:FSC-207.C-0_1_1,tpc:FSC-208.C-0_43_1,tpc:FSC-209.C-0_45_1,tpc:FSC-210.C-4_42_0,tpc:FSC-213.C-0_31_1,tpc:FSC-213.C-1_33_0,tpc:FSC-215.C-0_45_1,tpc:FSC-216.C-2_1_0,tpc:FSC-216.C-0_1_1,tpc:FSC-216.C-1_1_1,tpc:FSC-301.C-1_23_0,tpc:FSC-301.C-0_21_1,tpc:FSC-301.C-1_23_0,tpc:FSC-301.C-3_23_0,tpc:FSC-303.C-0_29_1,tpc:FSC-303.C-1_43_0,tpc:FSC-303.C-3_43_0,tpc:FSC-307.C-0_46_1,tpc:FSC-307.C-0_37_1,tpc:FSC-302.C-0_25_1,tpc:FSC-302.C-1_27_0,tpc:FSC-305.C-0_33_1,tpc:FSC-306.C-0_35_1,tpc:FSC-308.C-0_39_1,tpc:FSC-316.C-0_53_1,tpc:FSC-317.C-1_31_1,tpc:FSC-318.C-0_53_4,tpc:FSC-403.C-2_20_1,tpc:FSC-403.C-2_15_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-501.C-0_1_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="OHS">
    <featuretypeList>tpc:FSC-106.C-2_1_1,tpc:FSC-106.C-2_1_2,tpc:FSC-106.C-4_1_1,tpc:FSC-106.C-4_1_2,tpc:FSC-106.C-0_1_1,tpc:FSC-106.C-0_1_2,tpc:FSC-106.C-2_3_1,tpc:FSC-106.C-0_3_1,tpc:FSC-140.C-2_51_1,tpc:FSC-140.C-2_51_2,tpc:FSC-140.C-0_51_1,tpc:FSC-140.C-0_51_2,tpc:FSC-402.C-2_15_2,tpc:FSC-403.C-2_15_1,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-407.C-0_9_1,tpc:FSC-407.C-0_9_2,tpc:FSC-407.C-0_10_1,tpc:FSC-407.C-1_19_1,tpc:FSC-407.C-1_19_2,tpc:FSC-407.C-1_20_1,tpc:FSC-407.C-9_9_1,tpc:FSC-407.C-9_9_2,tpc:FSC-407.C-9_10_1,tpc:FSC-407.C-10_9_1,tpc:FSC-407.C-11_9_1,tpc:FSC-118.C-0_49_2,tpc:FSC-118.C-0_50_2,tpc:FSC-407.C-8_9_1,tpc:FSC-407.C-8_9_2,tpc:FSC-114.C-0_21_1,tpc:FSC-114.C-0_21_2,tpc:FSC-114.C-2_21_0,tpc:FSC-114.C-2_21_1,tpc:FSC-114.C-2_21_2,tpc:FSC-115.C-0_46_1,tpc:FSC-115.C-0_46_2,tpc:FSC-115.C-0_56_1,tpc:FSC-115.C-1_46_1,tpc:FSC-115.C-1_46_2,tpc:FSC-115.C-1_56_1,tpc:FSC-115.C-2_50_2,tpc:FSC-115.C-2_51_2,tpc:FSC-115.C-3_51_1,tpc:FSC-115.C-3_50_1,tpc:FSC-115.C-7_58_1,tpc:FSC-115.C-7_55_1,tpc:FSC-107.C-2_35_1,tpc:FSC-107.C-2_35_2,tpc:FSC-107.C-0_25_1,tpc:FSC-107.C-0_25_2,tpc:FSC-107.C-2_36_1,tpc:FSC-107.C-2_36_2,tpc:FSC-107.C-0_26_1,tpc:FSC-107.C-0_26_2,tpc:FSC-107.C-2_37_1,tpc:FSC-107.C-0_27_1,tpc:FSC-117.C-0_27_2,tpc:FSC-120.C-0_42_1,tpc:FSC-120.C-0_42_2,tpc:FSC-120.C-0_52_1,tpc:FSC-120.C-0_52_2,tpc:FSC-130.C-0_11_1,tpc:FSC-130.C-0_11_2,tpc:FSC-131.C-0_12_1,tpc:FSC-131.C-0_12_2,tpc:FSC-109.C-0_13_1,tpc:FSC-109.C-0_13_2,tpc:FSC-109.C-0_13_3,tpc:FSC-116.C-0_14_1,tpc:FSC-116.C-0_14_2,tpc:FSC-102.C-0_30_2,tpc:FSC-100.C-0_59_1,tpc:FSC-100.C-0_60_2,tpc:FSC-502.C-0_1_1,tpc:FSC-502.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-503.C-0_1_2,tpc:FSC-999.C-0_62_1,tpc:FSC-200.C-0_30_1,tpc:FSC-200.C-0_28_1,tpc:FSC-202.C-1_36_0,tpc:FSC-202.C-0_36_1,tpc:FSC-203.C-1_38_1,tpc:FSC-203.C-0_38_1,tpc:FSC-205.C-2_41_1,tpc:FSC-205.C-0_39_1,tpc:FSC-208.C-0_44_1,tpc:FSC-209.C-0_46_1,tpc:FSC-211.C-0_32_1,tpc:FSC-212.C-1_34_0,tpc:FSC-303.C-1_43_0,tpc:FSC-303.C-0_29_1,tpc:FSC-303.C-3_43_0,tpc:FSC-305.C-0_34_1,tpc:FSC-306.C-0_36_1,tpc:FSC-307.C-0_46_1,tpc:FSC-307.C-0_38_1,tpc:FSC-308.C-0_40_1,tpc:FSC-314.C-0_26_1,tpc:FSC-314.C-1_28_0,tpc:FSC-315.C-0_26_1,tpc:FSC-315.C-1_28_0,tpc:FSC-316.C-0_54_1,tpc:FSC-317.C-0_32_1,tpc:FSC-317.C-1_32_1,tpc:FSC-318.C-0_54_4</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="HVPIPE">
    <featuretypeList>tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-411.C-2_7_1,tpc:FSC-411.C-2_7_2,tpc:FSC-411.C-2_27_1,tpc:FSC-411.C-2_27_2,tpc:FSC-411.C-2_8_1,tpc:FSC-411.C-2_8_2,tpc:FSC-411.C-3_17_1,tpc:FSC-411.C-3_17_2,tpc:FSC-411.C-3_37_1,tpc:FSC-411.C-3_37_2,tpc:FSC-411.C-3_18_1,tpc:FSC-411.C-3_18_2,tpc:FSC-411.C-7_7_1,tpc:FSC-411.C-7_7_2,tpc:FSC-411.C-7_8_1,tpc:FSC-407.C-2_9_1,tpc:FSC-407.C-2_9_2,tpc:FSC-407.C-2_10_1,tpc:FSC-407.C-3_19_1,tpc:FSC-407.C-3_19_2,tpc:FSC-407.C-3_20_1,tpc:FSC-407.C-7_10_1,tpc:FSC-407.C-7_9_1,tpc:FSC-407.C-7_9_2,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-1_2_1,tpc:FSC-502.C-0_1_1,tpc:FSC-501.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-420.C-0_54_3,tpc:FSC-420.C-1_2_1,tpc:FSC-423.C-1_4_1,tpc:FSC-401.C-1_4_0,tpc:FSC-401.C-3_4_1,tpc:FSC-401.C-0_4_2,tpc:FSC-401.C-2_4_1,tpc:FSC-401.C-5_4_1,tpc:FSC-403.C-0_4_1,tpc:FSC-403.C-0_13_1,tpc:FSC-403.C-0_3_1,tpc:FSC-403.C-1_3_1,tpc:FSC-403.C-1_4_1,tpc:FSC-403.C-1_13_1,tpc:FSC-403.C-0_22_1,tpc:FSC-403.C-0_23_1,tpc:FSC-403.C-0_24_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-503.C-0_1_2,tpc:FSC-421.C-0_1_3,tpc:FSC-421.C-1_2_1,tpc:FSC-424.C-0_1_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
  <FeatureTypeCollector name="HLVPIPE">
    <featuretypeList>tpc:FSC-402.C-2_15_2,tpc:FSC-402.C-0_5_2,tpc:FSC-402.C-1_15_2,tpc:FSC-402.C-2_37_2,tpc:FSC-402.C-0_27_2,tpc:FSC-402.C-1_37_2,tpc:FSC-402.C-2_16_2,tpc:FSC-402.C-0_6_2,tpc:FSC-402.C-1_16_2,tpc:FSC-411.C-2_7_1,tpc:FSC-411.C-2_7_2,tpc:FSC-411.C-2_27_1,tpc:FSC-411.C-2_27_2,tpc:FSC-411.C-2_8_1,tpc:FSC-411.C-2_8_2,tpc:FSC-411.C-3_17_1,tpc:FSC-411.C-3_17_2,tpc:FSC-411.C-3_37_1,tpc:FSC-411.C-3_37_2,tpc:FSC-411.C-3_18_1,tpc:FSC-411.C-3_18_2,tpc:FSC-411.C-7_7_1,tpc:FSC-411.C-7_7_2,tpc:FSC-411.C-7_8_1,tpc:FSC-407.C-2_9_1,tpc:FSC-407.C-2_9_2,tpc:FSC-407.C-2_10_1,tpc:FSC-407.C-3_19_1,tpc:FSC-407.C-3_19_2,tpc:FSC-407.C-3_20_1,tpc:FSC-407.C-7_10_1,tpc:FSC-407.C-7_9_1,tpc:FSC-407.C-7_9_2,tpc:FSC-202.C-1_35_0,tpc:FSC-202.C-0_35_1,tpc:FSC-203.C-1_37_1,tpc:FSC-203.C-0_37_1,tpc:FSC-206.C-2_1_0,tpc:FSC-206.C-1_1_1,tpc:FSC-206.C-0_1_1,tpc:FSC-207.C-1_1_0,tpc:FSC-209.C-0_45_1,tpc:FSC-216.C-2_1_0,tpc:FSC-216.C-1_1_1,tpc:FSC-216.C-0_1_1,tpc:FSC-401.C-0_11_1,tpc:FSC-401.C-0_4_2,tpc:FSC-401.C-1_11_0,tpc:FSC-401.C-3_11_0,tpc:FSC-401.C-2_11_1,tpc:FSC-401.C-1_4_0,tpc:FSC-401.C-3_4_1,tpc:FSC-401.C-2_4_1,tpc:FSC-401.C-5_4_1,tpc:FSC-403.C-0_3_1,tpc:FSC-403.C-0_4_1,tpc:FSC-403.C-0_13_1,tpc:FSC-403.C-1_3_1,tpc:FSC-403.C-1_11_1,tpc:FSC-403.C-1_4_1,tpc:FSC-403.C-1_13_1,tpc:FSC-403.C-0_22_1,tpc:FSC-403.C-0_23_1,tpc:FSC-403.C-0_24_1,tpc:FSC-403.C-1_22_1,tpc:FSC-403.C-1_23_1,tpc:FSC-403.C-1_24_1,tpc:FSC-421.C-0_1_3,tpc:FSC-421.C-1_2_1,tpc:FSC-423.C-1_4_1,tpc:FSC-424.C-0_1_1,tpc:FSC-999.C-0_62_1,tpc:FSC-502.C-0_1_1,tpc:FSC-502.C-1_2_1,tpc:FSC-501.C-0_1_1,tpc:FSC-501.C-1_2_1,tpc:FSC-420.C-0_54_3,tpc:FSC-420.C-1_2_1</featuretypeList>
    <featuretypeList/>
  </FeatureTypeCollector>
</FeatureClassificationRules>