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