From bc926822dddd05d55678696999e3b8b0fd415570 Mon Sep 17 00:00:00 2001
From: Dennis Kao <ulysseskao@gmail.com>
Date: Mon, 10 Mar 2014 12:28:24 +0800
Subject: [PATCH] update for increment and theme jobs

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java |   45 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java
index a0b117a..cc2a050 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java
@@ -605,7 +605,7 @@
 
     private String retrieveCurrentSchemaName(Connection connection, short status) throws SQLException {
         StringBuilder sbSQL = new StringBuilder("SELECT vsschema, vstimestamp, vsstatus FROM ");
-        sbSQL.append(DataReposVersionManager.XGVERSIONTABLE_NAME);
+        sbSQL.append(encodeSchemaTableName(_pgSchema, DataReposVersionManager.XGVERSIONTABLE_NAME));
         sbSQL.append(" WHERE vsstatus = ");
         sbSQL.append(status);
         sbSQL.append(" ORDER BY vsid");
@@ -628,14 +628,14 @@
         }
     }
 
-    private void updateCurrentThemeStatus(Connection connection, String schemaName, short newStatus)
+    private void updateCurrentThemeStatus(Connection connection, String themeTableName, short newStatus)
             throws SQLException {
         StringBuilder sbSQL = new StringBuilder("UPDATE ");
         sbSQL.append(DataReposVersionManager.XPTVERSIONTABLE_NAME).append(' ');
         sbSQL.append(" SET vptstatus = ");
         sbSQL.append(newStatus);
         sbSQL.append(", vpttimestamp = CURRENT_TIMESTAMP WHERE vptname = '");
-        sbSQL.append(schemaName).append("'");
+        sbSQL.append(themeTableName).append("'");
 
         Statement stmt = null;
         try {
@@ -659,8 +659,10 @@
 
     private String retrieveCurrentThemeName(Connection connection, short status) throws SQLException {
         StringBuilder sbSQL = new StringBuilder("SELECT ");
-        sbSQL.append("vptname, vptstatus, vpttimestamp FROM ");
-        sbSQL.append(encodeSchemaTableName(_pgSchema, DataReposVersionManager.XPTVERSIONTABLE_NAME)).append(' ');
+        sbSQL.append("vptname, vpttimestamp, vptstatus FROM ");
+        sbSQL.append(encodeSchemaTableName(_pgSchema, DataReposVersionManager.XPTVERSIONTABLE_NAME));
+        sbSQL.append(" WHERE vptstatus = ");
+        sbSQL.append(status);
         sbSQL.append("ORDER BY vptid");
 
         String result = null;
@@ -703,6 +705,32 @@
         } catch (SQLException e) {
             logger.warn(e.getMessage(), e);
             throw new JobExecutionException("Update " + DataReposVersionManager.XGVERSIONTABLE_NAME +
+                " has error-", e);
+        }
+    }
+
+    protected void transferThemesVersionStatus(Connection connection,
+                                       short vsstatusBefore, short vsstatusAfter, boolean exclusive) throws JobExecutionException {
+
+        try {
+            String currentTargetTheme = retrieveCurrentThemeName(connection, vsstatusBefore);
+            if (currentTargetTheme == null) {
+                logger.info("Cannot found target schema in dataStore. status=" + vsstatusBefore);
+                return;
+            }
+            String existTargetSchema = null;
+            if (exclusive)
+                existTargetSchema = retrieveCurrentThemeName(connection, vsstatusAfter);
+
+
+            updateCurrentThemeStatus(connection, currentTargetTheme, vsstatusAfter);
+            if ((exclusive) && (existTargetSchema != null)) {
+                updateCurrentThemeStatus(connection, existTargetSchema,
+                    DataReposVersionManager.VSSTATUS_AVAILABLE);
+            }
+        } catch (SQLException e) {
+            logger.warn(e.getMessage(), e);
+            throw new JobExecutionException("Update " + DataReposVersionManager.XPTVERSIONTABLE_NAME +
                 " has error-", e);
         }
     }
@@ -869,6 +897,9 @@
             connection = targetDataStore.getConnection(Transaction.AUTO_COMMIT);
             transferXGeosVersionStatus(connection, DataReposVersionManager.VSSTATUS_LINKVIEW,
                                        DataReposVersionManager.VSSTATUS_CONFIG, false);
+            transferThemesVersionStatus(connection, DataReposVersionManager.VSSTATUS_LINKVIEW,
+                DataReposVersionManager.VSSTATUS_CONFIG, false);
+
             URL geoServerURL = new URL(_geoServerURL);
             GeoServerRESTManager manager = new GeoServerRESTManager(geoServerURL, _geoServerUser, _geoServerPass);
             GeoServerRESTReader reader = manager.getReader();
@@ -906,7 +937,9 @@
             resetWMSVirtualLayerMapping(jobExecutionContext, connection, manager, true);
 
             transferXGeosVersionStatus(connection, DataReposVersionManager.VSSTATUS_CONFIG,
-                                       DataReposVersionManager.VSSTATUS_USING, true);
+                DataReposVersionManager.VSSTATUS_USING, true);
+            transferThemesVersionStatus(connection, DataReposVersionManager.VSSTATUS_CONFIG,
+                DataReposVersionManager.VSSTATUS_USING, true);
             Date lastUpdate = Calendar.getInstance().getTime();
         } catch (IOException e) {
             logger.warn(e.getMessage(), e);

--
Gitblit v0.0.0-SNAPSHOT