From aaf4c6c3a1d50b67b9a7dfd1bc011615ba5d9f57 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Fri, 06 Jun 2008 18:44:30 +0800
Subject: [PATCH] update for EOFM-115

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java |   95 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 90 insertions(+), 5 deletions(-)

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 3e68794..532d267 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
@@ -6,23 +6,35 @@
 import java.nio.ByteBuffer;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+import com.vividsolutions.jts.util.Assert;
+import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
 
 import org.apache.commons.logging.Log;
+import org.geotools.data.DataStore;
+import org.geotools.data.jdbc.ConnectionPoolManager;
+import org.geotools.data.oracle.OracleDataStore;
+import org.geotools.data.oracle.OracleDataStoreFactory;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 
-import com.vividsolutions.jts.util.Assert;
-
 import oracle.sql.BLOB;
-
-import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
 
 public abstract class AbstractOracleDatabaseJob implements Job
 {
+    /** The Oracle driver class name */
+    private static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
+    
+    private static final String ORACLE_URL = "jdbc:oracle:thin:@";
+    private static final String PROPUsrKey = "user";
+    private static final String PROPPassKey = "password";
+
     private static final String JOBDATA_DIR = "JOBDATA_DIR";
     private static final String CONFELMSFILTER = "ELMSFILTER_CONF";
     private static final String SPATAILSCHEMA = "ORGSCHEMA";
@@ -39,6 +51,8 @@
     private static final String TESTMODE = "TESTMODE";
     private static final String TESTCOUNT = "TESTCOUNT";
 
+    protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory();
+
     protected String _dataPath;
     protected String _filterPath;
     protected String _oracleHost;
@@ -54,10 +68,22 @@
     protected ArrayList<String> _orgSchema = new ArrayList<String>();
     protected boolean _testMode = false;
     protected int _testCount = -1;
+    protected OracleDataStore sourceDataStore;
+    private boolean driverFound = true;
+
+    protected AbstractOracleDatabaseJob()
+    {
+        try {
+            Class.forName(JDBC_DRIVER);
+        } catch (Throwable t) {
+            // must be running off dummy jar!
+            driverFound = false;
+        }
+    }
 
     public abstract void execute(JobExecutionContext context) throws JobExecutionException;
 
-    public Log getLogger() { return null; }
+    public abstract Log getLogger();
 
     protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException
     {
@@ -77,6 +103,7 @@
         _createDummy = dataMap.getString(CREATEDUMMY);
 
         Log logger = getLogger();
+        /*
         logger.info("JOBDATA_DIR=" + _dataPath);
         logger.info("CONFELMSFILTER=" + _filterPath);
         logger.info("ORAHOST=" + _oracleHost);
@@ -88,6 +115,7 @@
         logger.info("CONVERTFILE=" + _convertFile);
         logger.info("CONVERTELEMIN=" + _convertElementIn);
         logger.info("ELEMLOG=" + _elementLogging);
+        */
 
         String strSchema = dataMap.getString(SPATAILSCHEMA);
         StringTokenizer st = new StringTokenizer(strSchema, ",");
@@ -123,22 +151,27 @@
 
         if (_oracleHost == null)
         {
+            logger.warn("OracleHOST is null");
             throw new JobExecutionException("Unknown Oracle Host.");
         }
         if (_oracleInstance == null)
         {
+            logger.warn("OracleINSTANCE is null");
             throw new JobExecutionException("Unknown Oracle Instance.");
         }
         if (_username == null)
         {
+            logger.warn("OracleUSER is null");
             throw new JobExecutionException("Unknown Oracle Username.");
         }
         if (_password == null)
         {
+            logger.warn("OraclePASS is null");
             throw new JobExecutionException("Unknown Oracle Password.");
         }
         if (_orgSchema == null)
         {
+            logger.warn("OracleSchema is null");
             throw new JobExecutionException("Unknown Spatial Database Schema.");
         }
     }
@@ -183,6 +216,11 @@
         }
 
         return raw;
+    }
+
+    public boolean isDriverFound()
+    {
+        return driverFound;
     }
 
     public String getDataPath()
@@ -304,4 +342,51 @@
         return _createDummy != null && !_createDummy.equalsIgnoreCase("false") &&
                 !_createDummy.equalsIgnoreCase("no") && !_createDummy.equalsIgnoreCase("0");
     }
+
+    public DataStore getSourceDataStore()
+    {
+        return sourceDataStore;
+    }
+
+    protected void createSourceDataStore() throws JobExecutionException
+    {
+        if (sourceDataStore != null)
+        {
+            sourceDataStore.dispose();
+            sourceDataStore = null;
+        }
+
+        if (!isDriverFound())
+        {
+            throw new JobExecutionException("Oracle JDBC Driver not found.-" + JDBC_DRIVER);
+        }
+        Map<String, String> map = new TreeMap<String, String>();
+        map.put("host", _oracleHost);
+        map.put("port", _oraclePort);
+        map.put("instance", _oracleInstance);
+        map.put("user", _username);
+        map.put("passwd", _password);
+        map.put("dbtype", "oracle");
+        map.put("alias", _oracleInstance);
+        map.put("namespace", null);
+        if (!dataStoreFactory.canProcess(map))
+        {
+            getLogger().warn("cannot process properties-");
+            throw new JobExecutionException("cannot process properties-");
+        }
+        try
+        {
+            sourceDataStore = (OracleDataStore) dataStoreFactory.createDataStore(map);
+        } catch (IOException e)
+        {
+            getLogger().warn(e.getMessage(), e);
+            throw new JobExecutionException(e.getMessage(), e);
+        }
+    }
+
+    protected void disconnect()
+    {
+        ConnectionPoolManager manager = ConnectionPoolManager.getInstance();
+        manager.closeAll();
+    }
 }

--
Gitblit v0.0.0-SNAPSHOT