From b2f56dae55d1de8f7378f22b2466e314b1e30cc7 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Tue, 25 Mar 2008 11:33:25 +0800
Subject: [PATCH] update for EOFM-15

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java    |   11 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java     |   22 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java      |   16 +
 .gitattributes                                                                                   |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java     |  265 ++++++++++++++++++++
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java      |  324 ++----------------------
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java      |   52 +--
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java   |   23 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java         |   38 ++
 10 files changed, 400 insertions(+), 355 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 0de4810..a1e8922 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -53,10 +53,12 @@
 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/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/GeometryCoordinateDecorator.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/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/util/BinConverter.java svneol=native#text/plain
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/Bits.java svneol=native#text/plain
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/ByteArrayCompressor.java svneol=native#text/plain
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java
index 5a493f8..70c9922 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java
@@ -7,7 +7,7 @@
 {
     private String name;
     private String description;
-    private int  elmtype;
+    private int elmtype;
 
     protected Log logger = LogFactory.getLog(AbstractFLinkageDispatchableFilter.class);
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
index 4427809..12ca65d 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
@@ -8,14 +8,15 @@
 import org.geotools.feature.FeatureTypeBuilder;
 import org.geotools.feature.IllegalAttributeException;
 import org.geotools.feature.SchemaException;
-import org.opengis.geometry.Geometry;
 
 import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.Geometry;
 
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
 import com.ximple.io.dgn7.LineStringElement;
 import com.ximple.io.dgn7.UserAttributeData;
+import com.ximple.io.dgn7.ComplexChainElement;
 
 public class CreateLineStringStrategy implements CreateFeatureTypeStrategy
 {
@@ -36,8 +37,7 @@
         {
             if (anUsrData instanceof FrammeAttributeData)
             {
-                FrammeAttributeData featureLinkage = (FrammeAttributeData) anUsrData;
-                return featureLinkage;
+                return (FrammeAttributeData) anUsrData;
             }
         }
         return null;
@@ -69,7 +69,7 @@
         {
             LineStringElement lineStringElement = (LineStringElement) element;
             Feature feature = featureType.create(new Object[]{
-                    geometryFactory.createLineString(lineStringElement.getVertices()),
+                    lineStringElement.toGeometry(geometryFactory),
                     (int) fLinkage.getFsc(),
                     (long) fLinkage.getUfid(),
                     (int) fLinkage.getComponentID(),
@@ -80,6 +80,21 @@
                     lineStringElement.getLineStyle(),
             });
             return feature;
+        } else if (element instanceof ComplexChainElement)
+        {
+            ComplexChainElement complexChain = (ComplexChainElement) element;
+            Feature feature = featureType.create(new Object[]{
+                    complexChain.toGeometry(geometryFactory),
+                    (int) fLinkage.getFsc(),
+                    (long) fLinkage.getUfid(),
+                    (int) fLinkage.getComponentID(),
+                    0,
+                    complexChain.getLevelIndex(),
+                    complexChain.getColorIndex(),
+                    complexChain.getWeight(),
+                    complexChain.getLineStyle(),
+            });
+            return feature;
         }
         return null;
     }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
index 206214a..254d071 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
@@ -8,14 +8,15 @@
 import org.geotools.feature.FeatureTypeBuilder;
 import org.geotools.feature.IllegalAttributeException;
 import org.geotools.feature.SchemaException;
-import org.opengis.geometry.Geometry;
 
 import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.Geometry;
 
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
 import com.ximple.io.dgn7.TextElement;
 import com.ximple.io.dgn7.UserAttributeData;
+import com.ximple.io.dgn7.TextNodeElement;
 
 public class CreateTextStrategy implements CreateFeatureTypeStrategy
 {
@@ -36,8 +37,7 @@
         {
             if (anUsrData instanceof FrammeAttributeData)
             {
-                FrammeAttributeData featureLinkage = (FrammeAttributeData) anUsrData;
-                return featureLinkage;
+                return (FrammeAttributeData) anUsrData;
             }
         }
         return null;
@@ -75,7 +75,7 @@
         {
             TextElement txtElement = (TextElement) element;
             Feature feature = featureType.create(new Object[]{
-                    geometryFactory.createPoint(txtElement.getUserOrigin()),
+                    txtElement.toGeometry(geometryFactory),
                     (int) fLinkage.getFsc(),
                     (long) fLinkage.getUfid(),
                     (int) fLinkage.getComponentID(),
@@ -92,6 +92,36 @@
                     txtElement.getText()
             });
             return feature;
+        } else if (element instanceof TextNodeElement)
+        {
+            TextNodeElement nodeElement = (TextNodeElement) element;
+            String[] texts = nodeElement.getTextArray();
+            StringBuffer sb = new StringBuffer();
+            for (String text : texts)
+            {
+                if (sb.length() != 0)
+                sb.append("\n");
+                sb.append(text);
+            }
+
+            Feature feature = featureType.create(new Object[]{
+                    nodeElement.toGeometry(geometryFactory),
+                    (int) fLinkage.getFsc(),
+                    (long) fLinkage.getUfid(),
+                    (int) fLinkage.getComponentID(),
+                    0,
+                    nodeElement.getLevelIndex(),
+                    nodeElement.getColorIndex(),
+                    nodeElement.getWeight(),
+                    nodeElement.getLineStyle(),
+                    nodeElement.getFontIndex(),
+                    nodeElement.getJustification(),
+                    nodeElement.getTextNodeHeight(),
+                    nodeElement.getTextNodeLength(),
+                    nodeElement.getRotationAngle(),
+                    sb.toString()
+            });
+            return feature;
         }
         return null;
     }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
index 00e66d6..00057d2 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
@@ -39,7 +39,7 @@
     protected String _password;
     protected String _orgSchema;
     protected boolean _testMode = false;
-    protected int    _testCount = -1;
+    protected int _testCount = -1;
 
     public abstract void execute(JobExecutionContext context) throws JobExecutionException;
 
@@ -105,10 +105,7 @@
         }
     }
 
-    protected OracleConvertJobContext prepareJobContext()
-    {
-        return new OracleConvertJobContext();
-    }
+    protected abstract AbstractOracleJobContext prepareJobContext(String filterPath);
 
     protected static byte[] getBytesFromBLOB(BLOB blob) throws SQLException
     {
@@ -119,7 +116,7 @@
         byte[] chunk = new byte[optimalSize];
         InputStream is = blob.getBinaryStream(0);
         ByteBuffer buffer = null;    // ByteBuffer.allocate(optimalSize);
-        int len = 0;
+        int len;
 
         try
         {
@@ -137,6 +134,8 @@
             }
 
             is.close();
+
+            assert buffer != null;
             buffer.position(0);
             raw = buffer.array();
         } catch (IOException e)
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java
new file mode 100644
index 0000000..1cf6f27
--- /dev/null
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java
@@ -0,0 +1,265 @@
+package com.ximple.eofms.jobs;
+
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import oracle.jdbc.OracleConnection;
+
+public abstract class AbstractOracleJobContext
+{
+    private static final String ORACLE_URL = "jdbc:oracle:thin:@";
+    private static final String PROPUsrKey = "user";
+    private static final String PROPPassKey = "password";
+    /**
+     * Table Prefiex
+     */
+    protected static final String TABLE_PREFIX = "GEO$";
+    protected static final String UDT_SCHEMA = "SPATIALDB";
+    /**
+     * User Types
+     */
+    protected static final String UDT_RAWS = "CREATE OR REPLACE TYPE \"" + UDT_SCHEMA + "\".\"RAWS\" AS VARRAY (1048576) OF NUMBER(38)";
+    protected static final String UDT_OFMID = "CREATE OR REPLACE TYPE  \"" + UDT_SCHEMA + "\".\"OFMID\" AS OBJECT ("
+            + "\"CLSID\" NUMBER(5), \"OID\" NUMBER(10), \"STATUS\" NUMBER(5), \"COMPID\" NUMBER(3), "
+            + "\"RULEID\" NUMBER(3), \"OCCID\" NUMBER(3))";
+    protected static final String UDT_RAWSNAME = "RAWS";
+    protected static final String UDT_OFMIDNAME = "OFMID";
+    /**
+     * Utility SQL
+     */
+    protected static final String TAB_DROP = "DROP TABLE %s.%s CASCADE CONSTRAINTS";
+    protected static final String TAB_DELETE = "DELETE FROM %s.%s";
+    /**
+     * Table Schema
+     */
+    protected static final String TAB_RANGENODEINDEX_1 = "CREATE TABLE \"%s\".\"%s\"\n"
+            + "   (    \"RNID\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"RPID\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"RNG_LOWX\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"RNG_LOWY\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"RNG_HIGHX\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"RNG_HIGHY\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"EXTENTS\" MDSYS.SDO_GEOMETRY,\n"
+            + "    \"RNDESCR\" VARCHAR2(255), \n"
+            + "    PRIMARY KEY ( \"RNID\" ) ENABLE )";
+    protected static final String TAB_RANGENODEINDEX = "CREATE TABLE \"%s\".\"%s\"\n"
+            + "   (    \"RNID\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"RPID\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"RNG_LOWX\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"RNG_LOWY\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"RNG_HIGHX\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"RNG_HIGHY\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"RNDESCR\" VARCHAR2(255), \n"
+            + "    PRIMARY KEY ( \"RNID\" ) ENABLE )";
+    protected static final String TAB_RANGENODESTORAGE = "CREATE TABLE \"%s\".\"%s\"\n"
+            + "   (    \"RNID\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"LAYERID\" NUMBER(5,0) NOT NULL ENABLE,\n"
+            + "    \"LASTUPDATE\" DATE NOT NULL ENABLE,\n"
+            + "    \"SPACETABLE\" VARCHAR2(255)\n" + "   )";
+    protected static final String TAB_ELEMENTINDEX_1 = "CREATE TABLE %s.%s (\n"
+            + "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"ZLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"ZHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n"
+            + "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n"
+            + "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n"
+            + "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n"
+            + "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n"
+            + "     PRIMARY KEY (\"ELMNO\") ENABLE\n"
+            + "   )";
+    protected static final String TAB_ELEMENTINDEX = "CREATE TABLE %s.%s (\n"
+            + "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n"
+            + "    \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"XLOW\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"YLOW\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"ZLOW\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"XHIGH\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"YHIGH\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"ZHIGH\" FLOAT NOT NULL ENABLE,\n"
+            + "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n"
+            + "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n"
+            + "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n"
+            + "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n"
+            + "    \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n"
+            + "     PRIMARY KEY (\"ELMNO\") ENABLE\n"
+            + "   )";
+    protected static final String TAB_IGDSSEED = "CREATE TABLE  %s.%s (\n"
+            + "   \"ELMNO\" INTEGER NOT NULL ENABLE,\n"
+            + "   \"SEEDELM\" \"" + UDT_SCHEMA
+            + "\".\"RAWS\" NOT NULL ENABLE\n" + "   )";
+    protected static final String TAB_STORAGE_1 = "CREATE TABLE %s.%s (\n" +
+            "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n" +
+            "    \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" +
+            "    \"PROPS\" INTEGER NOT NULL ENABLE,\n" +
+            "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" +
+            "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" +
+            "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" +
+            "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE, \n" +
+            "    \"GEOM\" MDSYS.SDO_GEOMETRY \n" +
+            "   )";
+    protected static final String TAB_STORAGE = "CREATE TABLE %s.%s (\n" +
+            "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n" +
+            "    \"XLOW\" FLOAT NOT NULL ENABLE,\n" +
+            "    \"YLOW\" FLOAT NOT NULL ENABLE,\n" +
+            "    \"XHIGH\" FLOAT NOT NULL ENABLE,\n" +
+            "    \"YHIGH\" FLOAT NOT NULL ENABLE,\n" +
+            "    \"PROPS\" INTEGER NOT NULL ENABLE,\n" +
+            "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" +
+            "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" +
+            "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" +
+            "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" +
+            "   )";
+    protected static final String TAB_STORAGE2 = "CREATE TABLE %s.%s (\n" +
+            "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n" +
+            "    \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
+            "    \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" +
+            "    \"PROPS\" INTEGER NOT NULL ENABLE,\n" +
+            "    \"ID\" " + UDT_SCHEMA + ".OFMID NOT NULL ENABLE,\n" +
+            "    \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" +
+            "    \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" +
+            "   )";
+    /**
+     * Trigger
+     */
+    protected static final String TRG_SPACENODE = "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n"
+            + "    AFTER DELETE OR INSERT OR UPDATE ON \"%s\".\"%s\"\n" + "    BEGIN\n"
+            + "        UPDATE SPACENODES SET LASTUPDATE = SYSDATE\n" + "        WHERE SNID = \"%d\";\n"
+            + "    END;";
+    protected static final String TRG_ELMINDEX =
+            "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n"
+                    + "    AFTER INSERT OR UPDATE OR DELETE ON \"%s\".\"%s\"\n"
+                    + "    REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW\n"
+                    + "    BEGIN\n"
+                    + "        IF INSERTING THEN\n"
+                    + "            INSERT INTO \"%s\".\"%s\" (ELMNO, TYPE, XLOW, YLOW, XHIGH, YHIGH,\n"
+                    + "                UFID, FSC, COMPID, OCCID, SPACENAME)\n"
+                    + "            VALUES (SD$ELEMENTNUMBER_SEQ.NEXTVAL, :new.ELMTYPE, :new.XLOW, :new.YLOW, :new.XHIGH, :new.YHIGH,\n"
+                    + "                :new.UFID, :new.FSC, :new.COMPID, :new.OCCID, '%s');\n"
+                    + "        ELSIF DELETING THEN\n"
+                    + "            DELETE FROM \"%s\".\"%s\"\n"
+                    + "            WHERE \"%s\".UFID = :old.UFID AND\n"
+                    + "                \"%s\".FSC = :old.FSC AND\n"
+                    + "                \"%s\".COMPID = :old.COMPID AND\n"
+                    + "                \"%s\".OCCID = :old.OCCID;\n"
+                    + "        ELSE\n" + "            UPDATE \"%s\"\n"
+                    + "            SET XLOW = :new.XLOW, YLOW = :new.YLOW, XHIGH = :new.XHIGH, YHIGH = :new.YHIGH\n"
+                    + "            WHERE FSC = :new.FSC AND UFID = :new.UFID AND COMPID = :new.COMPID AND OCCID = :new.OCCID;\n"
+                    + "        END IF;\n" + "    END;";
+    /**
+     *
+     */
+    protected static final String TAB_ELEMENTSET_PREFIX = "ELMSET_";
+    protected static final String STMT_CLEARCYCLEBIN = "PURGE RECYCLEBIN";
+    protected static final String SMTM_GRANTOBJECTTYPE = "GRANT EXECUTE ANY TYPE TO \"" + UDT_SCHEMA + "\"";
+    protected static final long TIMEOUT = Long.MAX_VALUE;
+    /**
+     * Encoding of URL path.
+     */
+    protected static final String ENCODING = "UTF-8";
+    private String _oracleHost;
+    private String _oracleInstance;
+    private String _oraclePort;
+    protected String _dataPath;
+    private OracleConnection oracleConnection = null;
+    protected Properties properties;
+
+    public static String getCurrentURL(String oracleHost, String oraclePort, String oracleInstance)
+    {
+        StringBuilder builder = new StringBuilder();
+
+        builder.append(ORACLE_URL);
+        builder.append(oracleHost);
+        builder.append(":");
+        builder.append(oraclePort);
+        builder.append(":");
+        builder.append(oracleInstance);
+
+        return builder.toString();
+    }
+
+    public void setLogin(String userName, String password)
+    {
+        properties.put(PROPUsrKey, userName);
+        properties.put(PROPPassKey, password);
+    }
+
+    public void setShapeData(String dataPath)
+    {
+        _dataPath = dataPath;
+    }
+
+    public OracleConnection getOracleConnection()
+    {
+        try
+        {
+            if (oracleConnection == null)
+            {
+                oracleConnection = (OracleConnection) DriverManager.getConnection(
+                        getCurrentURL(_oracleHost, _oraclePort, _oracleInstance),
+                        properties);
+            }
+
+            return oracleConnection;
+        } catch (SQLException e)
+        {
+            OracleConvertJobContext.logger.warn(e.getMessage(), e);
+        }
+
+        oracleConnection = null;
+
+        return null;
+    }
+
+    public void closeConnection()
+    {
+        try
+        {
+            if (oracleConnection != null)
+            {
+                oracleConnection.close();
+                oracleConnection = null;
+            }
+        } catch (SQLException e)
+        {
+            OracleConvertJobContext.logger.warn(e.getMessage(), e);
+        }
+    }
+
+    public void setConnectionInfo(String oracleHost, String oraclePort, String oracleInstance)
+    {
+        _oracleHost = oracleHost;
+        _oracleInstance = oracleInstance;
+        _oraclePort = oraclePort;
+    }
+
+    public abstract void startTransaction();
+
+    public abstract void commitTransaction();
+
+    public abstract void rollbackTransaction();
+}
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
index b360e1d..213d056 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
@@ -64,6 +64,11 @@
         return logger;
     }
 
+    protected OracleConvertJobContext prepareJobContext(String filterPath)
+    {
+        return new OracleConvertJobContext(filterPath);
+    }
+
     public void execute(JobExecutionContext context) throws JobExecutionException
     {
         // Every job has its own job detail
@@ -76,7 +81,7 @@
         logger.info(jobName + " fired at " + new Date());
         extractJobConfiguration(jobDetail);
 
-        OracleConvertJobContext jobContext = prepareJobContext();
+        OracleConvertJobContext jobContext = prepareJobContext(_filterPath);
         jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance);
         jobContext.setLogin(_username, _password);
         jobContext.setShapeData(_dataPath);
@@ -100,6 +105,7 @@
                 , null);
 
         logger.info("begin convert job:[" + map.size() + "]:testmode=" + _testMode);
+        jobContext.startTransaction();
         for (OrderedMapIterator it = map.orderedMapIterator(); it.hasNext();)
         {
             it.next();
@@ -132,8 +138,8 @@
         System.gc();
     }
 
-    private OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
-                                          OrderedMap orderedMap) throws SQLException
+    protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
+                                            OrderedMap orderedMap) throws SQLException
     {
         if (orderedMap == null)
             orderedMap = new LinkedMap(99);
@@ -156,7 +162,7 @@
                 values[i] = rs.getObject(i + 1);
             }
 
-            Integer key = new Integer(((BigDecimal) values[0]).intValue());
+            Integer key = ((BigDecimal) values[0]).intValue();
             String name = (String) values[1];
 
             Pair pair = (Pair) orderedMap.get(key);
@@ -172,8 +178,8 @@
         return orderedMap;
     }
 
-    private OrderedMap getRawFormatStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
-                                               OrderedMap orderedMap) throws SQLException
+    protected OrderedMap getRawFormatStorageList(OracleConnection connection, String schemaSrc, String tableSrc,
+                                                 OrderedMap orderedMap) throws SQLException
     {
         if (orderedMap == null)
             orderedMap = new LinkedMap(99);
@@ -196,7 +202,7 @@
                 values[i] = rs.getObject(i + 1);
             }
 
-            Integer key = new Integer(((BigDecimal) values[0]).intValue());
+            Integer key = ((BigDecimal) values[0]).intValue();
             String name = (String) values[1];
 
             Pair pair = (Pair) orderedMap.get(key);
@@ -212,8 +218,8 @@
         return orderedMap;
     }
 
-    private void queryIgsetElement(OracleConvertJobContext jobContext,
-                                   String srcschema, String srctable) throws SQLException
+    protected void queryIgsetElement(OracleConvertJobContext jobContext,
+                                     String srcschema, String srctable) throws SQLException
     {
         OracleConnection connection = jobContext.getOracleConnection();
         String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID";
@@ -244,7 +250,6 @@
             {
                 Element element = fetchBinaryElement(raw);
                 jobContext.putFeatureCollection(element);
-
             } catch (Dgn7fileException e)
             {
                 logger.warn("Dgn7Exception", e);
@@ -252,8 +257,8 @@
         }
     }
 
-    private void queryRawElement(OracleConvertJobContext jobContext,
-                                 String srcschema, String srctable) throws SQLException
+    protected void queryRawElement(OracleConvertJobContext jobContext,
+                                   String srcschema, String srctable) throws SQLException
     {
         OracleConnection connection = jobContext.getOracleConnection();
         String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID";
@@ -288,7 +293,7 @@
             try
             {
                 Element element = fetchBinaryElement(rawDest);
-                // Feature feature = convertElementToFeature(element);
+                jobContext.putFeatureCollection(element);
             } catch (Dgn7fileException e)
             {
                 logger.warn("Dgn7Exception:" + e.getMessage(), e);
@@ -310,7 +315,7 @@
         // track the record location
         int elementLength = (buffer.getShort() * 2) + 4;
         ElementType recordType = ElementType.forID(type);
-        IElementHandler handler = null;
+        IElementHandler handler;
 
         handler = recordType.getElementHandler();
 
@@ -355,23 +360,4 @@
 
         return dgnElement;
     }
-
-    private boolean equalRawData(byte[] rawSrc, byte[] rawDest)
-    {
-        if (rawSrc.length != rawDest.length)
-        {
-            return false;
-        }
-
-        for (int i = 0; i < rawSrc.length; i++)
-        {
-            if (rawSrc[i] != rawDest[i])
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
index 0a78e96..47e48bf 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
@@ -1,8 +1,8 @@
 package com.ximple.eofms.jobs;
 
 import java.io.File;
-import java.io.IOException;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -14,13 +14,13 @@
 import java.util.Iterator;
 import java.util.Properties;
 
+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.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
 import org.geotools.data.FeatureWriter;
 import org.geotools.data.Transaction;
 import org.geotools.data.shapefile.ShapefileDataStore;
@@ -28,218 +28,19 @@
 import org.geotools.feature.FeatureType;
 import org.geotools.feature.IllegalAttributeException;
 import org.geotools.feature.SimpleFeature;
-import org.geotools.TestData;
 import org.xml.sax.SAXException;
 
 import com.vividsolutions.jts.util.Assert;
 
-import oracle.jdbc.OracleConnection;
-
-import com.ximple.eofms.filter.CreateLineStringStrategy;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
 import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
 
-public class OracleConvertJobContext
+public class OracleConvertJobContext extends AbstractOracleJobContext
 {
     static Log logger = LogFactory.getLog(OracleConvertJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-
-    private static final String ORACLE_URL = "jdbc:oracle:thin:@";
-    private static final String PROPUsrKey = "user";
-    private static final String PROPPassKey = "password";
-
-    /**
-     * Table Prefiex
-     */
-    protected static final String TABLE_PREFIX = "GEO$";
-    protected static final String UDT_SCHEMA = "SPATIALDB";
-
-    /**
-     * User Types
-     */
-    protected static final String UDT_RAWS = "CREATE OR REPLACE TYPE \"" + UDT_SCHEMA + "\".\"RAWS\" AS VARRAY (1048576) OF NUMBER(38)";
-    protected static final String UDT_OFMID = "CREATE OR REPLACE TYPE  \"" + UDT_SCHEMA + "\".\"OFMID\" AS OBJECT ("
-            + "\"CLSID\" NUMBER(5), \"OID\" NUMBER(10), \"STATUS\" NUMBER(5), \"COMPID\" NUMBER(3), "
-            + "\"RULEID\" NUMBER(3), \"OCCID\" NUMBER(3))";
-
-    protected static final String UDT_RAWSNAME = "RAWS";
-    protected static final String UDT_OFMIDNAME = "OFMID";
-
-    /**
-     * Utility SQL
-     */
-    protected static final String TAB_DROP = "DROP TABLE %s.%s CASCADE CONSTRAINTS";
-
-    protected static final String TAB_DELETE = "DELETE FROM %s.%s";
-
-    /**
-     * Table Schema
-     */
-    protected static final String TAB_RANGENODEINDEX_1 = "CREATE TABLE \"%s\".\"%s\"\n"
-            + "   (    \"RNID\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"RPID\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"RNG_LOWX\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"RNG_LOWY\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"RNG_HIGHX\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"RNG_HIGHY\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"EXTENTS\" MDSYS.SDO_GEOMETRY,\n"
-            + "    \"RNDESCR\" VARCHAR2(255), \n"
-            + "    PRIMARY KEY ( \"RNID\" ) ENABLE )";
-
-    protected static final String TAB_RANGENODEINDEX = "CREATE TABLE \"%s\".\"%s\"\n"
-            + "   (    \"RNID\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"RPID\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"RNG_LOWX\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"RNG_LOWY\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"RNG_HIGHX\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"RNG_HIGHY\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"RNDESCR\" VARCHAR2(255), \n"
-            + "    PRIMARY KEY ( \"RNID\" ) ENABLE )";
-
-    protected static final String TAB_RANGENODESTORAGE = "CREATE TABLE \"%s\".\"%s\"\n"
-            + "   (    \"RNID\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"LAYERID\" NUMBER(5,0) NOT NULL ENABLE,\n"
-            + "    \"LASTUPDATE\" DATE NOT NULL ENABLE,\n"
-            + "    \"SPACETABLE\" VARCHAR2(255)\n" + "   )";
-
-    protected static final String TAB_ELEMENTINDEX_1 = "CREATE TABLE %s.%s (\n"
-            + "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"ZLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"ZHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n"
-            + "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n"
-            + "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n"
-            + "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n"
-            + "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n"
-            + "     PRIMARY KEY (\"ELMNO\") ENABLE\n"
-            + "   )";
-
-    protected static final String TAB_ELEMENTINDEX = "CREATE TABLE %s.%s (\n"
-            + "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n"
-            + "    \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"XLOW\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"YLOW\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"ZLOW\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"XHIGH\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"YHIGH\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"ZHIGH\" FLOAT NOT NULL ENABLE,\n"
-            + "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n"
-            + "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n"
-            + "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n"
-            + "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n"
-            + "    \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n"
-            + "     PRIMARY KEY (\"ELMNO\") ENABLE\n"
-            + "   )";
-
-    protected static final String TAB_IGDSSEED = "CREATE TABLE  %s.%s (\n"
-            + "   \"ELMNO\" INTEGER NOT NULL ENABLE,\n"
-            + "   \"SEEDELM\" \"" + UDT_SCHEMA
-            + "\".\"RAWS\" NOT NULL ENABLE\n" + "   )";
-
-    protected static final String TAB_STORAGE_1 = "CREATE TABLE %s.%s (\n" +
-            "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n" +
-            "    \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" +
-            "    \"PROPS\" INTEGER NOT NULL ENABLE,\n" +
-            "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" +
-            "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" +
-            "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" +
-            "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE, \n" +
-            "    \"GEOM\" MDSYS.SDO_GEOMETRY \n" +
-            "   )";
-
-    protected static final String TAB_STORAGE = "CREATE TABLE %s.%s (\n" +
-            "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n" +
-            "    \"XLOW\" FLOAT NOT NULL ENABLE,\n" +
-            "    \"YLOW\" FLOAT NOT NULL ENABLE,\n" +
-            "    \"XHIGH\" FLOAT NOT NULL ENABLE,\n" +
-            "    \"YHIGH\" FLOAT NOT NULL ENABLE,\n" +
-            "    \"PROPS\" INTEGER NOT NULL ENABLE,\n" +
-            "    \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" +
-            "    \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" +
-            "    \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" +
-            "    \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" +
-            "   )";
-
-    protected static final String TAB_STORAGE2 = "CREATE TABLE %s.%s (\n" +
-            "    \"ELMNO\" INTEGER NOT NULL ENABLE,\n" +
-            "    \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" +
-            "    \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" +
-            "    \"PROPS\" INTEGER NOT NULL ENABLE,\n" +
-            "    \"ID\" " + UDT_SCHEMA + ".OFMID NOT NULL ENABLE,\n" +
-            "    \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" +
-            "    \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" +
-            "   )";
-    /**
-     * Trigger
-     */
-    protected static final String TRG_SPACENODE = "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n"
-            + "    AFTER DELETE OR INSERT OR UPDATE ON \"%s\".\"%s\"\n" + "    BEGIN\n"
-            + "        UPDATE SPACENODES SET LASTUPDATE = SYSDATE\n" + "        WHERE SNID = \"%d\";\n"
-            + "    END;";
-
-    protected static final String TRG_ELMINDEX =
-            "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n"
-                    + "    AFTER INSERT OR UPDATE OR DELETE ON \"%s\".\"%s\"\n"
-                    + "    REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW\n"
-                    + "    BEGIN\n"
-                    + "        IF INSERTING THEN\n"
-                    + "            INSERT INTO \"%s\".\"%s\" (ELMNO, TYPE, XLOW, YLOW, XHIGH, YHIGH,\n"
-                    + "                UFID, FSC, COMPID, OCCID, SPACENAME)\n"
-                    + "            VALUES (SD$ELEMENTNUMBER_SEQ.NEXTVAL, :new.ELMTYPE, :new.XLOW, :new.YLOW, :new.XHIGH, :new.YHIGH,\n"
-                    + "                :new.UFID, :new.FSC, :new.COMPID, :new.OCCID, '%s');\n"
-                    + "        ELSIF DELETING THEN\n"
-                    + "            DELETE FROM \"%s\".\"%s\"\n"
-                    + "            WHERE \"%s\".UFID = :old.UFID AND\n"
-                    + "                \"%s\".FSC = :old.FSC AND\n"
-                    + "                \"%s\".COMPID = :old.COMPID AND\n"
-                    + "                \"%s\".OCCID = :old.OCCID;\n"
-                    + "        ELSE\n" + "            UPDATE \"%s\"\n"
-                    + "            SET XLOW = :new.XLOW, YLOW = :new.YLOW, XHIGH = :new.XHIGH, YHIGH = :new.YHIGH\n"
-                    + "            WHERE FSC = :new.FSC AND UFID = :new.UFID AND COMPID = :new.COMPID AND OCCID = :new.OCCID;\n"
-                    + "        END IF;\n" + "    END;";
-
-    /**
-     *
-     */
-    protected static final String TAB_ELEMENTSET_PREFIX = "ELMSET_";
-
-    protected static final String STMT_CLEARCYCLEBIN = "PURGE RECYCLEBIN";
-
-    protected static final String SMTM_GRANTOBJECTTYPE = "GRANT EXECUTE ANY TYPE TO \"" + UDT_SCHEMA + "\"";
-
-    protected static final long TIMEOUT = Long.MAX_VALUE;
-
-    /**
-     * Encoding of URL path.
-     */
-    private static final String ENCODING = "UTF-8";
 
     static
     {
@@ -252,28 +53,7 @@
         }
     }
 
-    public static String getCurrentURL(String oracleHost, String oraclePort, String oracleInstance)
-    {
-        StringBuilder builder = new StringBuilder();
-
-        builder.append(ORACLE_URL);
-        builder.append(oracleHost);
-        builder.append(":");
-        builder.append(oraclePort);
-        builder.append(":");
-        builder.append(oracleInstance);
-
-        return builder.toString();
-    }
-
-    private String _oracleHost;
     private String _filterConfig;
-    private String _oracleInstance;
-    private String _oraclePort;
-    private String _dataPath;
-
-    private OracleConnection oracleConnection = null;
-    private Properties properties;
 
     private ElementDispatcher elementDispatcher;
 
@@ -286,28 +66,31 @@
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-
     }
 
     private ElementDispatcher createElementDispatcher()
     {
-        URL rulesURL = getClass().getResource("ElementDispatcherRules.xml");
-
-        File rulesFile = null;
         try
         {
-            rulesFile = new File(URLDecoder.decode(rulesURL.getPath(), ENCODING));
-            if (!rulesFile.exists()) {
-                throw new FileNotFoundException("Could not locate test-data: " + rulesFile);
-            }
-            Digester digester = DigesterLoader.createDigester(rulesFile.toURI().toURL());
-            File config = new File(_filterConfig);
-            if (!config.exists())
+            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
+            assert rulesURL != null;
+            Digester digester = DigesterLoader.createDigester(rulesURL);
+            URL filterURL = null;
+            if (_filterConfig != null)
             {
-                config = new File("conf\\DefaultConvertShpFilter.xml");
+                File config = new File(_filterConfig);
+                if (config.exists())
+                {
+                    filterURL = config.toURI().toURL();
+                }
             }
-            ElementDispatcher dispatcher = (ElementDispatcher) digester.parse(config);
-            return dispatcher;
+            if (filterURL == null)
+            {
+                // config = new File("conf/DefaultConvertShpFilter.xml");
+                filterURL = this.getClass().getResource("/conf/DefaultConvertShpFilter.xml");
+            }
+            assert filterURL != null;
+            return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e)
         {
             logger.info(e.getMessage(), e);
@@ -327,61 +110,6 @@
         }
     }
 
-    public void setLogin(String userName, String password)
-    {
-        properties.put(PROPUsrKey, userName);
-        properties.put(PROPPassKey, password);
-    }
-
-    public void setShapeData(String dataPath)
-    {
-        _dataPath = dataPath;
-    }
-
-    public OracleConnection getOracleConnection()
-    {
-        try
-        {
-            if (oracleConnection == null)
-            {
-                oracleConnection = (OracleConnection) DriverManager.getConnection(
-                        getCurrentURL(_oracleHost, _oraclePort, _oracleInstance),
-                        properties);
-            }
-
-            return oracleConnection;
-        } catch (SQLException e)
-        {
-            logger.warn(e.getMessage(), e);
-        }
-
-        oracleConnection = null;
-
-        return null;
-    }
-
-    public void closeConnection()
-    {
-        try
-        {
-            if (oracleConnection != null)
-            {
-                oracleConnection.close();
-                oracleConnection = null;
-            }
-        } catch (SQLException e)
-        {
-            logger.warn(e.getMessage(), e);
-        }
-    }
-
-    public void setConnectionInfo(String oracleHost, String oraclePort, String oracleInstance)
-    {
-        _oracleHost = oracleHost;
-        _oracleInstance = oracleInstance;
-        _oraclePort = oraclePort;
-    }
-
     public void putFeatureCollection(Element element)
     {
         Feature feature = elementDispatcher.execute(element);
@@ -390,8 +118,8 @@
             FrammeAttributeData linkage =
                     AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
             logger.debug("Unknown Element:" + element.getElementType().toString() +
-                ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" +
-            (linkage == null ? "NULL" : (linkage.getFsc() + "|" +linkage.getComponentID())));
+                    ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" +
+                    (linkage == null ? "NULL" : (linkage.getFsc() + "|" + linkage.getComponentID())));
 
             return;
         }
@@ -417,7 +145,7 @@
             txFeaturesContext.commitTransaction();
         } else
             logger.debug("Transaction is empty.");
-        
+
         if (!featuresContext.isEmpty())
         {
             updateDataStore();
@@ -446,7 +174,7 @@
                 File sfile = new File(_dataPath + "\\" + featureType.getTypeName());
                 logger.debug("Begin Save shapefile:" + sfile.toURI());
 
-                ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURL());
+                ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL());
                 shapefileDataStore.createSchema(featureType);
                 FeatureWriter writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT);
                 ArrayList features = (ArrayList) featuresContext.get(featureType);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
index eb653c0..96a64b4 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
@@ -1,14 +1,13 @@
 package com.ximple.eofms.jobs;
 
-import java.util.Date;
 import java.sql.SQLException;
+import java.util.Date;
 
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.quartz.JobDetail;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.quartz.JobDetail;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
 
 import oracle.jdbc.OracleConnection;
 import oracle.jdbc.OracleDatabaseMetaData;
@@ -30,7 +29,7 @@
         logger.info(jobName + " fired at " + new Date());
         extractJobConfiguration(jobDetail);
 
-        OracleConvertJobContext jobContext = prepareJobContext();
+        AbstractOracleJobContext jobContext = prepareJobContext(_filterPath);
         jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance);
         jobContext.setLogin(_username, _password);
 
@@ -43,11 +42,16 @@
         }
     }
 
-    private void exetcuteConvert(OracleConvertJobContext jobContext,
+    protected AbstractOracleJobContext prepareJobContext(String filterPath)
+    {
+        return new OracleUpgradeJobContext();
+    }
+
+    private void exetcuteConvert(AbstractOracleJobContext jobContext,
                                  String orgSchema, String dataPath) throws SQLException
     {
         OracleConnection connection = jobContext.getOracleConnection();
-        OracleDatabaseMetaData metaData   = (OracleDatabaseMetaData) connection.getMetaData();
-        OracleStatement statement  = (OracleStatement) connection.createStatement();
+        OracleDatabaseMetaData metaData = (OracleDatabaseMetaData) connection.getMetaData();
+        OracleStatement statement = (OracleStatement) connection.createStatement();
     }
 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java
new file mode 100644
index 0000000..54cf900
--- /dev/null
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java
@@ -0,0 +1,16 @@
+package com.ximple.eofms.jobs;
+
+public class OracleUpgradeJobContext extends AbstractOracleJobContext
+{
+    public void startTransaction()
+    {
+    }
+
+    public void commitTransaction()
+    {
+    }
+
+    public void rollbackTransaction()
+    {
+    }
+}

--
Gitblit v0.0.0-SNAPSHOT