From 6217eaaf64d69992c0d92acde640e44a2ac5d910 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Mon, 25 Aug 2008 16:37:32 +0800
Subject: [PATCH] update for EOFM-152

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java |   67 +++++++++++++++++++++++++++------
 1 files changed, 54 insertions(+), 13 deletions(-)

diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
index c62f7c3..270af88 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
@@ -64,7 +64,7 @@
 {
     final static Log logger = LogFactory.getLog(OracleConvertDgn2PostGISJob.class);
 
-    private static final String XGVERSION_NAME = "xgversion";
+    private static final String XGVERSION_NAME = "xgeos_vsversion";
     private static final String PGHOST = "PGHOST";
     private static final String PGDDATBASE = "PGDDATBASE";
     private static final String PGPORT = "PGPORT";
@@ -1175,19 +1175,19 @@
             rs = null;
 
             StringBuilder sbSQL = new StringBuilder("SELECT ");
-            sbSQL.append("'vsschema', 'vsstatus' FROM ");
+            sbSQL.append("vsschema, vsstatus FROM ");
             sbSQL.append(encodeSchemaTableName(_pgSchema, XGVERSION_NAME)).append(' ');
             sbSQL.append("ORDER BY vsid");
             stmt = connection.createStatement();
             rs = stmt.executeQuery(sbSQL.toString());
             ArrayList<Object[]> tmpSchemas = new ArrayList<Object[]>();
             int i = 0;
-            int current = 0;
+            int current = -1;
             while (rs.next())
             {
                 Object[] values = new Object[2];
-                values[0] = rs.getObject(1);
-                values[1] = rs.getObject(2);
+                values[0] = rs.getString("vsschema");
+                values[1] = rs.getShort("vsstatus");
                 tmpSchemas.add(values);
                 if ((((Short)values[1]) & DataRepositoryStatus.VSSTATUS_USING) != 0)
                 {
@@ -1196,7 +1196,11 @@
                 i++;
             }
 
-            if (current < (tmpSchemas.size() - 1))
+            if (current == -1)
+            {
+                Object[] values = tmpSchemas.get(0);
+                targetSchema = (String) values[0];
+            } else if (current < (tmpSchemas.size() - 1))
             {
                 Object[] values = tmpSchemas.get(current + 1);
                 targetSchema = (String) values[0];
@@ -1207,10 +1211,10 @@
 
             sbSQL = new StringBuilder("UPDATE ");
             sbSQL.append(encodeSchemaTableName(_pgSchema, XGVERSION_NAME)).append(' ');
-            sbSQL.append(" SET 'vsstatus' = ");
+            sbSQL.append(" SET vsstatus = ");
             sbSQL.append(DataRepositoryStatus.VSSTATUS_COVERT);
-            sbSQL.append(" WHERE 'vsschema' = ");
-            sbSQL.append(targetSchema);
+            sbSQL.append(" WHERE vsschema = '");
+            sbSQL.append(targetSchema).append("'");
             int count = stmt.executeUpdate(sbSQL.toString());
             if (count != 1)
             {
@@ -1258,17 +1262,21 @@
 
             sql = new StringBuilder("INSERT INTO ");
             sql.append(encodeSchemaTableName(pgSchema, XGVERSION_NAME));
-            sql.append(" ('vsschema', 'vsstatus' ) VALUES (");
+            sql.append(" (vsschema, vsstatus) VALUES (");
             sql.append("'gisrepo1', ");
             sql.append(DataRepositoryStatus.VSSTATUS_UNKNOWN).append(" )");
             stmt.executeUpdate(sql.toString());
 
             sql = new StringBuilder("INSERT INTO ");
             sql.append(encodeSchemaTableName(pgSchema, XGVERSION_NAME));
-            sql.append(" ('vsschema', 'vsstatus' ) VALUES (");
+            sql.append(" (vsschema, vsstatus) VALUES (");
             sql.append("'gisrepo2', ");
             sql.append(DataRepositoryStatus.VSSTATUS_UNKNOWN).append(" )");
             stmt.executeUpdate(sql.toString());
+
+            createIfNotExistNewSchema(connection, "gisrepo1");
+            createIfNotExistNewSchema(connection, "gisrepo2");
+
         } finally {
             if (stmt != null) stmt.close();
         }
@@ -1285,9 +1293,9 @@
         {
             StringBuilder sbSQL = new StringBuilder("UPDATE ");
             sbSQL.append(encodeSchemaTableName(_pgSchema, XGVERSION_NAME)).append(' ');
-            sbSQL.append(" SET 'vsstatus' = ");
+            sbSQL.append(" SET vsstatus = ");
             sbSQL.append(DataRepositoryStatus.VSSTATUS_READY);
-            sbSQL.append(" WHERE 'vsschema' = ");
+            sbSQL.append(" WHERE vsschema = ");
             sbSQL.append(targetSchema);
 
             connection = targetDataStore.getConnection(Transaction.AUTO_COMMIT);
@@ -1309,4 +1317,37 @@
             if (connection != null) try { connection.close(); } catch (SQLException e) {};
         }
     }
+
+    private void createIfNotExistNewSchema(Connection connection, String s) throws SQLException
+    {
+        Statement stmt = null;
+        ResultSet rs = null;
+        try
+        {
+            /*
+            rs = connection.getMetaData().getSchemas(null, s);
+            if (rs.next()) return;
+            rs.close();
+            rs = null;
+            */
+
+            StringBuilder sbSQL = new StringBuilder("CREATE SCHEMA ");
+            sbSQL.append(s).append(' ');
+            sbSQL.append("AUTHORIZATION spatialdb");
+            stmt = connection.createStatement();
+            stmt.executeUpdate(sbSQL.toString());
+
+            sbSQL = new StringBuilder("GRANT ALL ON SCHEMA ");
+            sbSQL.append(s).append(' ');
+            sbSQL.append("TO public");
+            stmt.executeUpdate(sbSQL.toString());
+        } catch (SQLException e)
+        {
+            logger.info("create schema:" + s + " has exception.");
+            logger.info(e.getMessage(), e);
+        } finally {
+            if (rs != null) rs.close();
+            if (stmt != null) stmt.close();
+        }
+    }
 }

--
Gitblit v0.0.0-SNAPSHOT