From d274e4c6703c57aa0f48b39d6a2316c1aed9e737 Mon Sep 17 00:00:00 2001
From: Dennis Kao <ulysseskao@gmail.com>
Date: Thu, 05 Dec 2013 12:45:23 +0800
Subject: [PATCH] update for theme job

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java |   32 ++--------
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeoserverIntegrateConfigJob.java                        |  123 ++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 128 insertions(+), 27 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 766511b..8483857 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
@@ -10,7 +10,6 @@
 import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
 import it.geosolutions.geoserver.rest.GeoServerRESTReader;
 import it.geosolutions.geoserver.rest.decoder.*;
-import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
 import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
 import it.geosolutions.geoserver.rest.encoder.GSLayerGroupEncoder;
 import it.geosolutions.geoserver.rest.encoder.GSLayerGroupEncoder23;
@@ -207,6 +206,51 @@
             updateCurrentRepositoryStatus(connection, currentTargetSchema,
                 DataReposVersionManager.VSSTATUS_LINKVIEW);
 
+            String currentTargetThemesName = retrieveCurrentThemeName(connection,
+                DataReposVersionManager.VSSTATUS_READY);
+            if (currentTargetThemesName == null) {
+                logger.info("Cannot found themes that status is VSSTATUS_READY[" +
+                    DataReposVersionManager.VSSTATUS_READY + "]");
+                return;
+            }
+
+            resetThemesBaseView(connection, ownerName, currentTargetThemesName);
+
+            XGeosDataConfigMapping configMapping = getConfigMapping();
+            String[] allView = retrieveTargetStoreAllViewNames(connection);
+            TreeSet<String> allViewNames = new TreeSet<String>();
+            if (allView != null) {
+                allViewNames.addAll(Arrays.asList(allView));
+            }
+            List values = (List) configMapping.getMapping().get("pgOMS");
+            for (Object value : values) {
+                XGeosDataConfig xgeosConfig = (XGeosDataConfig) value;
+                short tid = xgeosConfig.getFSC();
+                short cid = xgeosConfig.getCOMP();
+                StringBuilder sbTable = new StringBuilder("fsc-");
+                sbTable.append(tid).append("-c-");
+                sbTable.append(cid);
+
+                int index = realTableNames.indexOf(sbTable.toString());
+                if (index == -1) {
+                    logger.debug("pgOMS LayerView Cannot found-" + xgeosConfig.toString());
+                    continue;
+                }
+
+                StringBuilder sbView = new StringBuilder("fsc-");
+                sbView.append(tid).append("-c");
+                sbView.append(cid).append("-l");
+                sbView.append(xgeosConfig.getLEV()).append("-w");
+                sbView.append(xgeosConfig.getWEIGHT());
+                String viewName = sbView.toString();
+                if (allViewNames.contains(viewName)) {
+                    resetThemesPostgisDataView(connection, ownerName, null, viewName);
+                }
+            }
+
+            updateCurrentThemeStatus(connection, currentTargetThemesName,
+                DataReposVersionManager.VSSTATUS_LINKVIEW);
+
             // String[] featureNames = dataStore.getTypeNames();
             // logger.info("featureNames[] size = " + featureNames.length);
         } catch (IOException e) {
@@ -334,6 +378,79 @@
             }
         } catch (SQLException e) {
             logger.warn(e.getMessage(), e);
+        }
+    }
+
+    private void resetThemesBaseView(Connection connection, String ownerName, String currentThemesName)
+            throws SQLException {
+        String viewName = "xpwtheme" + FDYNCOLOR_SUFFIX;
+        String tableName = currentThemesName + FDYNCOLOR_SUFFIX;
+        PrintfFormat pf = new PrintfFormat("CREATE OR REPLACE VIEW \"%s\" AS SELECT * FROM \"%s\"");
+        String sql = pf.sprintf(new Object[]{viewName, tableName});
+        Statement stmt = connection.createStatement();
+        try {
+            stmt.execute(sql);
+            pf = new PrintfFormat(ALTER_VIEWSQL + ownerName);
+            sql = pf.sprintf(viewName);
+            stmt.execute(sql);
+
+            viewName = "xpwtheme" + FOWNER_SUFFIX;
+            tableName = currentThemesName + FOWNER_SUFFIX;
+            pf = new PrintfFormat("CREATE OR REPLACE VIEW \"%s\" AS SELECT * FROM \"%s\"");
+            sql = pf.sprintf(new Object[]{viewName, tableName});
+
+            stmt.execute(sql);
+            pf = new PrintfFormat(ALTER_VIEWSQL + ownerName);
+            sql = pf.sprintf(viewName);
+            stmt.execute(sql);
+        } catch (SQLException e) {
+            // logger.warn(e.getMessage(), e);
+            logger.info(sql == null ? "SQL=NULL" : "SQL=" + sql);
+            throw e;
+        } finally {
+            stmt.close();
+        }
+    }
+
+
+    private void resetThemesPostgisDataView(Connection connection, String ownerName,
+                                            String currentSchema, String viewName) throws SQLException {
+        String themeViewName = viewName + "-oms";
+        // PrintfFormat pf = new PrintfFormat(CREATE_VIEWSQL);
+        // String sql = pf.sprintf(new Object[]{viewName, schemaName, tableName});
+        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 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);
         }
     }
 
@@ -608,7 +725,7 @@
         return sbLayers.toString();
     }
 
-    protected String[] getTargetStoreTypeNames(Connection connection) {
+    protected String[] retrieveTargetStoreAllViewNames(Connection connection) {
         try {
             final int TABLE_NAME_COL = 3;
             List list = new ArrayList();
@@ -652,7 +769,7 @@
             HashMap<String, String> defaultStyles = buildDefaultStylesMapping(mapping);
 
             try {
-                String[] dsFTypeNames =  getTargetStoreTypeNames(connection);
+                String[] dsFTypeNames =  retrieveTargetStoreAllViewNames(connection);
 
                 for (String featureTypeName : dsFTypeNames) {
                     FeatureType featureType = null;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
index 8ee8088..84993eb 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
@@ -287,14 +287,12 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textElement.getColorIndex()),
-                    colorTable.getColorCode(textElement.getColorIndex()),
                     textElement.getFontIndex(),
                     textElement.getJustification(),
                     textElement.getTextHeight(),
                     textElement.getTextWidth(),
                     angle,
-                    content,
-                    -1
+                    content
                 }, null);
             } else {
                 logger.info("geometry is null." + element.toString());
@@ -320,14 +318,12 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textNodeElement.getColorIndex()),
-                    colorTable.getColorCode(textNodeElement.getColorIndex()),
                     textNodeElement.getFontIndex(),
                     textNodeElement.getJustification(),
                     textNodeElement.getTextNodeHeight(),
                     textNodeElement.getTextNodeLength(),
                     angle,
-                    sb.toString(),
-                    -1
+                    sb.toString()
                 }, null);
             } else {
                 logger.info("geometry is null." + element.toString());
@@ -341,10 +337,8 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(shapeElement.getColorIndex()),
-                    colorTable.getColorCode(shapeElement.getColorIndex()),
                     shapeElement.getWeight(),
-                    shapeElement.getLineStyle(),
-                    -1
+                    shapeElement.getLineStyle()
                 }, null);
             } else {
                 logger.info("geometry is null." + element.toString());
@@ -358,10 +352,8 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(linestring.getColorIndex()),
-                    colorTable.getColorCode(linestring.getColorIndex()),
                     linestring.getWeight(),
-                    linestring.getLineStyle(),
-                    -1
+                    linestring.getLineStyle()
                 }, null);
             }
             return null;
@@ -373,10 +365,8 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(line.getColorIndex()),
-                    colorTable.getColorCode(line.getColorIndex()),
                     line.getWeight(),
-                    line.getLineStyle(),
-                    -1
+                    line.getLineStyle()
                 }, null);
             }
             return null;
@@ -393,10 +383,8 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
-                    colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
-                    arcElement.getLineStyle(),
-                    -1
+                    arcElement.getLineStyle()
                 }, null);
             }
             return null;
@@ -408,10 +396,8 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
-                    colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
-                    arcElement.getLineStyle(),
-                    -1
+                    arcElement.getLineStyle()
                 }, null);
             }
             return null;
@@ -423,10 +409,8 @@
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(complexChainElement.getColorIndex()),
-                    colorTable.getColorCode(complexChainElement.getColorIndex()),
                     complexChainElement.getWeight(),
-                    complexChainElement.getLineStyle(),
-                    -1
+                    complexChainElement.getLineStyle()
                 }, null);
             }
             return null;

--
Gitblit v0.0.0-SNAPSHOT