From 90e7660cac64a949ac7d4e71302ac3509e8ce5a5 Mon Sep 17 00:00:00 2001
From: Dennis Kao <ulysseskao@gmail.com>
Date: Tue, 08 Apr 2014 15:32:49 +0800
Subject: [PATCH] Merge branch 'origin/2.1.x'

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java |   87 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 81 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 3a7b3d8..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
@@ -245,6 +245,9 @@
                 String viewName = sbView.toString();
                 if (allViewNames.contains(viewName)) {
                     resetThemesPostgisDataView(connection, ownerName, null, viewName);
+                    if (tid == 106) {
+                        resetFlowThemesPostgisDataView(connection, ownerName, null, viewName);
+                    }
                 }
             }
 
@@ -454,6 +457,45 @@
         }
     }
 
+    private void resetFlowThemesPostgisDataView(Connection connection, String ownerName,
+                                            String currentSchema, String viewName) throws SQLException {
+        String themeViewName = viewName + "-flow-oms";
+        ResultSet rs = null;
+        Statement stmt = connection.createStatement();
+
+        try {
+            StringBuilder sbSQL = new StringBuilder("CREATE OR REPLACE VIEW \"");
+            sbSQL.append(themeViewName).append("\" AS SELECT ");
+
+            rs = connection.getMetaData().getColumns(null, currentSchema, viewName, "%");
+            while (rs.next()) {
+                String fieldName = rs.getString("COLUMN_NAME");
+                sbSQL.append("t." + fieldName).append(", ");
+            }
+            sbSQL.append("fc.dyncolor, fo.fowner, fo.flow FROM ");
+            if (currentSchema != null)
+                sbSQL.append("\"").append(currentSchema).append("\".\"").append(viewName).append("\" AS t,");
+            else
+                sbSQL.append("\"").append(viewName).append("\" AS t,");
+            sbSQL.append("xpwtheme").append(FDYNCOLOR_SUFFIX).append(" AS fc,");
+            sbSQL.append("xpwtheme").append(FOWNER_SUFFIX).append(" AS fo WHERE ");
+            sbSQL.append("t.tid = fc.tid AND t.oid = fc.oid AND ");
+            sbSQL.append("t.tid = fo.tid AND t.oid = fo.oid");
+
+            // sbSQL.delete(sbSQL.length() - 2, sbSQL.length());
+            String sql = sbSQL.toString();
+            stmt.execute(sql);
+            sbSQL.delete(0, sbSQL.length());
+
+            PrintfFormat pf = new PrintfFormat(ALTER_VIEWSQL + ownerName);
+            sql = pf.sprintf(themeViewName);
+            stmt.execute(sql);
+        } finally {
+            JDBCUtils.close(rs);
+            JDBCUtils.close(stmt);
+        }
+    }
+
     private HashMap<String, String> retrieveViewDef(Connection connection, String schemaName, String tablePattern) throws SQLException {
         PreparedStatement stmt = connection.prepareStatement(QUERY_VIEWDEFSQL + "'" + tablePattern + "'");
         stmt.setString(1, schemaName);
@@ -563,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");
@@ -586,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 {
@@ -617,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;
@@ -661,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);
         }
     }
@@ -827,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();
@@ -864,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