From d2986858ad69383e3b06188b4cebe9c2f714f2dd Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Thu, 12 Jun 2008 15:44:42 +0800 Subject: [PATCH] update for EOFM-117 --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java | 10 + xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java | 3 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java | 35 ++++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java | 5 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java | 11 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java | 15 + xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java | 20 ++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java | 20 ++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java | 193 +++++++++++++++++------ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java | 1 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java | 55 ++---- xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml | 8 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java | 3 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java | 27 +++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java | 27 +++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java | 2 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java | 4 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java | 11 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java | 20 ++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java | 3 20 files changed, 349 insertions(+), 124 deletions(-) diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml index 79528a2..1bd55fc 100644 --- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml +++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml @@ -76,7 +76,7 @@ </entry> <entry> <key>CONVERTDB</key> - <value>false</value> + <value>true</value> </entry> <entry> <key>CONVERTFILE</key> @@ -100,12 +100,16 @@ </entry> <entry> <key>TESTMODE</key> - <value>true</value> + <value>false</value> </entry> <entry> <key>TESTCOUNT</key> <value>2</value> </entry> + <entry> + <key>COPYCONNECTIVITYMODE</key> + <value>true</value> + </entry> </job-data-map> </job-detail> diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java index 2be6c13..5d0f184 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.TreeMap; +import javax.swing.event.EventListenerList; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.geotools.feature.Feature; @@ -27,6 +29,9 @@ GeometryFactory geometryFactory = new GeometryFactory(); TreeMap<String, FeatureTypeBuilder> typeBuilders = new TreeMap<String, FeatureTypeBuilder>(); TWD97GeometryConverterDecorator convertDecorator = new TWD97GeometryConverterDecorator(); + + // Create the listener list + protected EventListenerList listenerList = new EventListenerList(); public CreateArcLineStringStrategy() { @@ -82,5 +87,27 @@ } return feature; } + + public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) + { + listenerList.add(CreateFeatureTypeEventListener.class, listener); + } + + public void removeCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) + { + listenerList.remove(CreateFeatureTypeEventListener.class, listener); + } + + protected void fireFeatureTypeEvent(FeatureTypeEvent evt) + { + Object[] listeners = listenerList.getListenerList(); + for (int i = 0; i < listeners.length; i += 2) + { + if (listeners[i] == CreateFeatureTypeEventListener.class) + { + ((CreateFeatureTypeEventListener) listeners[i + 1]).createFeatureTypeOccurred(evt); + } + } + } } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java index 9fd0ed6..058674f 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.TreeMap; +import javax.swing.event.EventListenerList; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.geotools.feature.Feature; @@ -27,6 +29,9 @@ GeometryFactory geometryFactory = new GeometryFactory(); TreeMap<String, FeatureTypeBuilder> typeBuilders = new TreeMap<String, FeatureTypeBuilder>(); TWD97GeometryConverterDecorator convertDecorator = new TWD97GeometryConverterDecorator(); + + // Create the listener list + protected EventListenerList listenerList = new EventListenerList(); public CreateEllipseShapeStrategy() { @@ -82,6 +87,28 @@ } return feature; } + + public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) + { + listenerList.add(CreateFeatureTypeEventListener.class, listener); + } + + public void removeCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) + { + listenerList.remove(CreateFeatureTypeEventListener.class, listener); + } + + protected void fireFeatureTypeEvent(FeatureTypeEvent evt) + { + Object[] listeners = listenerList.getListenerList(); + for (int i = 0; i < listeners.length; i += 2) + { + if (listeners[i] == CreateFeatureTypeEventListener.class) + { + ((CreateFeatureTypeEventListener) listeners[i + 1]).createFeatureTypeOccurred(evt); + } + } + } } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java index 8c134c3..ae666a3 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java @@ -139,7 +139,6 @@ return feature; } - public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) { listenerList.add(CreateFeatureTypeEventListener.class, listener); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java index ed3f5ba..2eb54be 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java @@ -11,4 +11,8 @@ public Feature execute(Element element); void setUseLongName(boolean useLongName); + + public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener); + + public void removeCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener); } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java index 38e3e9e..a64d23e 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java @@ -2,14 +2,19 @@ import java.util.LinkedList; +import javax.swing.event.EventListenerList; + import org.geotools.feature.Feature; import com.ximple.io.dgn7.Element; -public class ElementDispatcher +public class ElementDispatcher implements CreateFeatureTypeEventListener { private LinkedList<ElementDispatchableFilter> rules; private boolean useLongName = false; + + // Create the listener list + protected EventListenerList listenerList = new EventListenerList(); public ElementDispatcher() { @@ -24,6 +29,7 @@ public void addRule(ElementDispatchableFilter rule) { rule.setUseLongName(useLongName); + rule.addCreateFeatureTypeEventListener(this); rules.add(rule); } @@ -55,4 +61,31 @@ } return null; } + + public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) + { + listenerList.add(CreateFeatureTypeEventListener.class, listener); + } + + public void removeCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener) + { + listenerList.remove(CreateFeatureTypeEventListener.class, listener); + } + + protected void fireFeatureTypeEvent(FeatureTypeEvent evt) + { + Object[] listeners = listenerList.getListenerList(); + for (int i = 0; i < listeners.length; i += 2) + { + if (listeners[i] == CreateFeatureTypeEventListener.class) + { + ((CreateFeatureTypeEventListener) listeners[i + 1]).createFeatureTypeOccurred(evt); + } + } + } + + public void createFeatureTypeOccurred(FeatureTypeEvent evt) + { + fireFeatureTypeEvent(evt); + } } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java index 83c9651..4810b12 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java @@ -7,6 +7,7 @@ import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; +import com.ximple.eofms.util.StringUtils; public class TypeCompIdDispatchableFilter extends AbstractFLinkageDispatchableFilter implements CreateFeatureTypeEventListener @@ -58,7 +59,16 @@ public void setCreateStrategy(CreateFeatureTypeStrategy createStrategy) { + if (this.createStrategy != null) + { + this.createStrategy.removeCreateFeatureTypeEventListener(this); + } this.createStrategy = createStrategy; + + if (this.createStrategy != null) + { + this.createStrategy.addCreateFeatureTypeEventListener(this); + } } public boolean isUseLongName() @@ -103,7 +113,15 @@ public String getFeatureTypeName(Element element) { StringBuilder sb = new StringBuilder(); - sb.append(getName()); + String name = getName().toLowerCase(); + String[] pices = StringUtils.splitToArray(name, "."); + boolean bfirst = true; + for (String temp : pices) + { + if (bfirst) bfirst = false; + else sb.append('-'); + sb.append(temp); + } if (useLongName) { sb.append("_"); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java index 2956b46..ab302e4 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java @@ -7,6 +7,7 @@ import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; +import com.ximple.eofms.util.StringUtils; public class TypeCompLevelIdDispatchableFilter extends AbstractFLinkageDispatchableFilter implements CreateFeatureTypeEventListener @@ -70,7 +71,16 @@ public void setCreateStrategy(CreateFeatureTypeStrategy createStrategy) { + if (this.createStrategy != null) + { + this.createStrategy.removeCreateFeatureTypeEventListener(this); + } this.createStrategy = createStrategy; + + if (this.createStrategy != null) + { + this.createStrategy.addCreateFeatureTypeEventListener(this); + } } @@ -112,7 +122,15 @@ public String getFeatureTypeName(Element element) { StringBuilder sb = new StringBuilder(); - sb.append(getName()); + String name = getName().toLowerCase(); + String[] pices = StringUtils.splitToArray(name, "."); + boolean bfirst = true; + for (String temp : pices) + { + if (bfirst) bfirst = false; + else sb.append('-'); + sb.append(temp); + } if (useLongName) { sb.append("_"); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java index fd25d05..b683361 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java @@ -7,6 +7,7 @@ import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; +import com.ximple.eofms.util.StringUtils; public class TypeIdDispatchableFilter extends AbstractFLinkageDispatchableFilter implements CreateFeatureTypeEventListener { @@ -44,7 +45,16 @@ public void setCreateStrategy(CreateFeatureTypeStrategy createStrategy) { + if (this.createStrategy != null) + { + this.createStrategy.removeCreateFeatureTypeEventListener(this); + } this.createStrategy = createStrategy; + + if (this.createStrategy != null) + { + this.createStrategy.addCreateFeatureTypeEventListener(this); + } } public boolean isDispatchable(Element element) @@ -84,7 +94,15 @@ public String getFeatureTypeName(Element element) { StringBuilder sb = new StringBuilder(); - sb.append(getName()); + String name = getName().toLowerCase(); + String[] pices = StringUtils.splitToArray(name, "."); + boolean bfirst = true; + for (String temp : pices) + { + if (bfirst) bfirst = false; + else sb.append('-'); + sb.append(temp); + } if (useLongName) { sb.append("_"); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java index 163b63c..3ff0034 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java @@ -53,6 +53,7 @@ private static final String ORAPASS = "ORAPASS"; private static final String TESTMODE = "TESTMODE"; private static final String TESTCOUNT = "TESTCOUNT"; + private static final String COPYCONNECTIVITYMODE = "COPYCONNECTIVITYMODE"; protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory(); @@ -70,6 +71,7 @@ protected String _createDummy; protected ArrayList<String> _orgSchema = new ArrayList<String>(); protected boolean _testMode = false; + protected boolean _copyConnectivityMode = false; protected int _testCount = -1; protected OracleDataStore sourceDataStore; private boolean driverFound = true; @@ -131,6 +133,7 @@ } _testMode = dataMap.getBooleanFromString(TESTMODE); _testCount = dataMap.getIntFromString(TESTCOUNT); + _copyConnectivityMode = dataMap.getBooleanFromString(COPYCONNECTIVITYMODE); // Validate the required input if (_dataPath == null) @@ -348,6 +351,11 @@ !_createDummy.equalsIgnoreCase("no") && !_createDummy.equalsIgnoreCase("0"); } + public boolean isCopyConnectivityMode() + { + return _copyConnectivityMode; + } + public DataStore getSourceDataStore() { return sourceDataStore; @@ -376,7 +384,7 @@ map.put("namespace", null); if (!map.containsKey(OracleDataStoreFactory.MAXCONN.key)) { - map.put(OracleDataStoreFactory.MAXCONN.key, "2"); + map.put(OracleDataStoreFactory.MAXCONN.key, "10"); } if (!map.containsKey(OracleDataStoreFactory.MINCONN.key)) { diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java index 1cd3c29..c8cb87c 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java @@ -13,6 +13,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.sql.Connection; import java.util.Calendar; import java.util.Date; import java.util.Map; @@ -206,7 +207,7 @@ { logger.info("-- step:clearOutputDatabase --"); clearOutputDatabase(); - boolean bFirst = true; + boolean bFirst = isCopyConnectivityMode(); if (checkConvertDB()) { logger.info("-- step:convertOracleDB --"); @@ -278,7 +279,7 @@ */ private void copyConnectivity(OracleConvertMySQLJobContext jobContext) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); Statement stmt = connection.createStatement(); stmt.execute(AbstractOracleJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); stmt.execute(AbstractOracleJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); @@ -343,7 +344,7 @@ System.gc(); } - protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc, + protected OrderedMap getBlobStorageList(Connection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException { if (orderedMap == null) @@ -436,7 +437,7 @@ protected void queryIgsetElement(OracleConvertMySQLJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchSrcStmtFmt); String fetchSrcStmt = spf.sprintf(new Object[]{srcschema, srctable}); @@ -478,7 +479,7 @@ protected void queryRawElement(OracleConvertMySQLJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchDestStmtFmt); String fetchDestStmt = spf.sprintf(new Object[]{srcschema, srctable}); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java index e22cdb6..ac5c49d 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java @@ -13,6 +13,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.sql.Connection; import java.util.Calendar; import java.util.Date; import java.util.Map; @@ -206,7 +207,7 @@ { logger.info("-- step:clearOutputDatabase --"); clearOutputDatabase(); - boolean bFirst = true; + boolean bFirst = isCopyConnectivityMode(); if (checkConvertDB()) { logger.info("-- step:convertOracleDB --"); @@ -278,7 +279,7 @@ */ private void copyConnectivity(OracleConvertOraSDOJobContext jobContext) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); Statement stmt = connection.createStatement(); stmt.execute(AbstractOracleJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); stmt.execute(AbstractOracleJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); @@ -343,7 +344,7 @@ System.gc(); } - protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc, + protected OrderedMap getBlobStorageList(Connection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException { if (orderedMap == null) @@ -436,7 +437,7 @@ protected void queryIgsetElement(OracleConvertOraSDOJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchSrcStmtFmt); String fetchSrcStmt = spf.sprintf(new Object[]{srcschema, srctable}); @@ -478,7 +479,7 @@ protected void queryRawElement(OracleConvertOraSDOJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchDestStmtFmt); String fetchDestStmt = spf.sprintf(new Object[]{srcschema, srctable}); 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 99bfa96..8b679f9 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 @@ -13,6 +13,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.sql.Connection; import java.util.Calendar; import java.util.Date; import java.util.Map; @@ -98,36 +99,7 @@ protected Map<String, String> pgProperties; protected PostgisDataStore targetDataStore; - - /* - PostgisDataStore pg = new PostgisDataStore(pool, f.schema, getName(), - PostgisDataStore.OPTIMIZE_SQL); - pg.setWKBEnabled(WKB_ENABLED); - pg.setEstimatedExtent(true); - pg.setFIDMapper("road", new TypedFIDMapper(new BasicFIDMapper("fid", 255, false), "road")); - pg.setFIDMapper("river", new TypedFIDMapper(new BasicFIDMapper("fid", 255, false), "river")); - pg.setFIDMapper("testset", - new TypedFIDMapper(new BasicFIDMapper("gid", 255, true), "testset")); - - */ - /* - Transaction transaction = new DefaultTransaction("attemptWriteFW"); - FeatureWriter writer = ds.getFeatureWriter(table, transaction); - Feature feature; - - while (writer.hasNext()) { - feature = (Feature) writer.next(); - } - - feature = (Feature) writer.next(); - feature.setAttribute(0, "test"); - writer.write(); - - String id = feature.getID(); - transaction.commit(); - transaction.close(); - - */ + // protected OracleConvertPostGISJobContext oracleJobContext; public Log getLogger() { @@ -136,6 +108,13 @@ protected AbstractOracleJobContext prepareJobContext(String filterPath) { + /* + if (oracleJobContext == null) + { + oracleJobContext = new OracleConvertPostGISJobContext(getDataPath(), getTargetDataStore(), filterPath); + } + return oracleJobContext; + */ return new OracleConvertPostGISJobContext(getDataPath(), getTargetDataStore(), filterPath); } @@ -235,7 +214,7 @@ { logger.info("-- step:clearOutputDatabase --"); clearOutputDatabase(); - boolean bFirst = true; + boolean bFirst = isCopyConnectivityMode(); if (checkConvertDB()) { logger.info("-- step:convertOracleDB --"); @@ -308,7 +287,7 @@ */ private void copyConnectivity(OracleConvertPostGISJobContext jobContext) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); Statement stmt = connection.createStatement(); stmt.execute(AbstractOracleJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); stmt.execute(AbstractOracleJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); @@ -318,8 +297,8 @@ String querySchema, String dataPath) throws SQLException { int order = 0; - OrderedMap map = getBlobStorageList(jobContext.getOracleConnection(), querySchema, "SD$SPACENODES" - , null); + OrderedMap map = getBlobStorageList(jobContext.getOracleConnection(), + querySchema, "SD$SPACENODES" , null); logger.info("begin convert job:[" + map.size() + "]:testmode=" + _testMode); @@ -368,12 +347,12 @@ jobContext.getExecutionContext().put("ConvertDgn2PostGISJobProgress", 100); jobContext.commitTransaction(); - + jobContext.resetFeatureContext(); logger.info("end convert job:[" + order + "]"); System.gc(); } - protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc, + protected OrderedMap getBlobStorageList(Connection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException { if (orderedMap == null) @@ -466,7 +445,7 @@ protected void queryIgsetElement(OracleConvertPostGISJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchSrcStmtFmt); String fetchSrcStmt = spf.sprintf(new Object[]{srcschema, srctable}); @@ -508,7 +487,7 @@ protected void queryRawElement(OracleConvertPostGISJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchDestStmtFmt); String fetchDestStmt = spf.sprintf(new Object[]{srcschema, srctable}); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java index ee488c5..22c9784 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java @@ -13,6 +13,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.sql.Connection; import java.util.Date; import org.apache.commons.collections.OrderedMap; @@ -59,7 +60,6 @@ final static Log logger = LogFactory.getLog(OracleConvertDgn2ShpJob.class); private static final int FETCHSIZE = 30; - private static final int BATCHSIZE = 25; private static final int COMMITSIZE = 20; class Pair @@ -112,7 +112,7 @@ { logger.info("-- step:clearOutputDirectory --"); clearOutputDirectory(); - boolean bFirst = true; + boolean bFirst = isCopyConnectivityMode(); if (checkConvertDB()) { logger.info("-- step:convertOracleDB --"); @@ -127,9 +127,10 @@ jobContext.setExecutionContext(context); if (bFirst) + { copyConnectivity(jobContext); - else bFirst = false; + } logger.info("----- start schema:" + orgSchema + " -----"); exetcuteConvert(jobContext, orgSchema, _dataPath); @@ -180,7 +181,7 @@ */ private void copyConnectivity(OracleConvertShapefilesJobContext jobContext) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); Statement stmt = connection.createStatement(); stmt.execute(OracleConvertShapefilesJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); stmt.execute(OracleConvertShapefilesJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); @@ -245,7 +246,7 @@ System.gc(); } - protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc, + protected OrderedMap getBlobStorageList(Connection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException { if (orderedMap == null) @@ -338,7 +339,7 @@ protected void queryIgsetElement(OracleConvertShapefilesJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchSrcStmtFmt); String fetchSrcStmt = spf.sprintf(new Object[]{srcschema, srctable}); @@ -380,7 +381,7 @@ protected void queryRawElement(OracleConvertShapefilesJobContext jobContext, String srcschema, String srctable) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID"; PrintfFormat spf = new PrintfFormat(fetchDestStmtFmt); String fetchDestStmt = spf.sprintf(new Object[]{srcschema, srctable}); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java index cbeb488..76865af 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java @@ -1,6 +1,7 @@ package com.ximple.eofms.jobs; import java.sql.SQLException; +import java.sql.Connection; import java.util.Date; import org.apache.commons.logging.Log; @@ -65,7 +66,7 @@ private void exetcuteConvert(AbstractOracleJobContext jobContext, String orgSchema, String dataPath) throws SQLException { - OracleConnection connection = jobContext.getOracleConnection(); + Connection connection = jobContext.getOracleConnection(); OracleDatabaseMetaData metaData = (OracleDatabaseMetaData) connection.getMetaData(); OracleStatement statement = (OracleStatement) connection.createStatement(); } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java index 0b112ae..6cd8c99 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.Properties; +import java.sql.Connection; import org.apache.commons.logging.Log; import org.geotools.data.DataStore; @@ -236,13 +237,13 @@ } } - public OracleConnection getOracleConnection() + public Connection getOracleConnection() { try { if (sourceDataStore != null) { - return (OracleConnection) sourceDataStore.getConnection(Transaction.AUTO_COMMIT); + return sourceDataStore.getConnection(Transaction.AUTO_COMMIT); } } catch (IOException e) diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java index ed63d2b..983a897 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java @@ -432,9 +432,10 @@ getLogger().warn("Error: " + geomAttribute.getLocalName() + " unknown type!!!"); } + String indexName = tableName.replace('-', '_'); //also build a spatial index on each geometry column. sql = new StringBuffer("CREATE INDEX spatial_"); - sql.append(tableName); + sql.append(indexName); sql.append("_"); sql.append(anAttributeType.getLocalName().toLowerCase()); sql.append(" ON "); diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java index 74dcd4d..deaa440 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java @@ -438,9 +438,10 @@ getLogger().warn("Error: " + geomAttribute.getLocalName() + " unknown type!!!"); } + String indexName = tableName.replace('-', '_'); //also build a spatial index on each geometry column. sql = new StringBuffer("CREATE INDEX spatial_"); - sql.append(tableName); + sql.append(indexName); sql.append("_"); sql.append(anAttributeType.getLocalName().toLowerCase()); sql.append(" ON "); 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 e04d2e4..12fca64 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 @@ -188,7 +188,7 @@ i++; */ } - + stmtTexts.clear(); conn.setAutoCommit(autoCommit); logger.debug("End Save into PostGIS:" + featureType.getTypeName()); } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java index 86bf599..964f19e 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java @@ -7,6 +7,8 @@ import java.net.URL; import java.sql.DriverManager; import java.sql.SQLException; +import java.sql.Connection; +import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -26,19 +28,25 @@ import org.geotools.feature.FeatureType; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.SimpleFeature; +import org.geotools.feature.FeatureTypeBuilder; +import org.geotools.feature.SchemaException; import org.quartz.JobExecutionContext; import org.xml.sax.SAXException; +import org.postgresql.util.PSQLException; import com.vividsolutions.jts.util.Assert; import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter; import com.ximple.eofms.filter.ElementDispatcher; +import com.ximple.eofms.filter.CreateFeatureTypeEventListener; +import com.ximple.eofms.filter.FeatureTypeEvent; import com.ximple.eofms.jobs.OracleElementLogger; import com.ximple.io.dgn7.ComplexElement; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; public class OracleConvertPostGISJobContext extends AbstractOracleToPostGISJobContext + implements CreateFeatureTypeEventListener { static Log logger = LogFactory.getLog(OracleConvertPostGISJobContext.class); static final LoggerFacade sLogger = new CommonsLoggingLogger(logger); @@ -62,22 +70,25 @@ private ElementDispatcher elementDispatcher; - private HashMap featuresContext = new HashMap(); - private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>(); - private PessimisticMapWrapper txFeaturesContext; + // private HashMap featuresContext = new HashMap(); + // private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>(); + // private PessimisticMapWrapper txFeaturesContext; + private HashMap<FeatureType, ArrayList<String>> txFeaturesContext = new HashMap<FeatureType, ArrayList<String>>(); private JobExecutionContext executionContext; private String currentSchema = null; private String pgCurrentSchema = null; private boolean schemaChanged = false; + private boolean dropTableMode = true; public OracleConvertPostGISJobContext(String dataPath, DataStore pgDS, String filterConfig) { super(dataPath, pgDS); _filterConfig = filterConfig; elementDispatcher = createElementDispatcher(); - txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger); + elementDispatcher.addCreateFeatureTypeEventListener(this); + // txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger); } private ElementDispatcher createElementDispatcher() @@ -154,15 +165,14 @@ if (!txFeaturesContext.containsKey(feature.getFeatureType())) { - txFeaturesContext.put(feature.getFeatureType(), new ArrayList()); + txFeaturesContext.put(feature.getFeatureType(), new ArrayList<String>()); } - ArrayList arrayList = (ArrayList) txFeaturesContext.get(feature.getFeatureType()); - arrayList.add(feature); + ArrayList<String> arrayList = txFeaturesContext.get(feature.getFeatureType()); + arrayList.add(makeInsertSql(feature, -1)); } public void startTransaction() { - //txFeaturesContext.startTransaction(); } public void commitTransaction() @@ -176,7 +186,7 @@ logger.debug("Transaction is empty."); } - if (!featuresContext.isEmpty()) + if (!txFeaturesContext.isEmpty()) { updateDataStore(); } @@ -187,64 +197,68 @@ public void rollbackTransaction() { - //txFeaturesContext.rollbackTransaction(); - if (!featuresContext.isEmpty()) + if (!txFeaturesContext.isEmpty()) { updateDataStore(); } } + public void resetFeatureContext() + { + txFeaturesContext.clear(); + } + private void updateDataStore() { - Iterator it = featuresContext.keySet().iterator(); - + Iterator<FeatureType> it = txFeaturesContext.keySet().iterator(); + String currentStmt = null; try { while (it.hasNext()) { - FeatureType featureType = (FeatureType) it.next(); - FeatureWriter writer = null; - if (featuresWriterContext.containsKey(featureType.getTypeName())) - { - writer = featuresWriterContext.get(featureType.getTypeName()); - } else - { - DataStore postGisDataStore = null; - postGisDataStore = dataStoreFactory.createDataStore(properties); + FeatureType featureType = it.next(); + logger.debug("Begin Save into PostGIS:" + featureType.getTypeName()); - boolean existTable = isExistFeature(featureType); + ArrayList<String> stmtTexts = txFeaturesContext.get(featureType); + Connection conn = getConnection(); + boolean autoCommit = conn.getAutoCommit(); + conn.setAutoCommit(true); - if (!existTable) + for (String stmtText : stmtTexts) + { + currentStmt = stmtText; + Statement stmt = conn.createStatement(); + try { - postGisDataStore.createSchema(featureType); - writer = postGisDataStore.getFeatureWriter(featureType.getTypeName(), - Transaction.AUTO_COMMIT); - } else + stmt.execute(stmtText); + } catch (PSQLException e) { - writer = postGisDataStore.getFeatureWriterAppend(featureType.getTypeName(), - Transaction.AUTO_COMMIT); + if (currentStmt != null) + { + logger.error("Execute:" + currentStmt); + } + logger.error(e.getServerErrorMessage()); + logger.error(e.getMessage(), e); + } finally { + stmt.close(); } - featuresWriterContext.put(featureType.getTypeName(), writer); + /* + if ((i % BATCHSIZE) != 0) + { + stmt.addBatch(stmtText); + } else { + stmt.addBatch(stmtText); + stmt.executeBatch(); + } + i++; + */ } - ArrayList features = (ArrayList) featuresContext.get(featureType); - Iterator itFeature = features.iterator(); - while (itFeature.hasNext()) - { - Feature feature = (Feature) itFeature.next(); - ((SimpleFeature) writer.next()).setAttributes(feature.getAttributes(null)); - } - //writer.close(); - logger.debug("End Save PostGIS:" + featureType.getTypeName()); + stmtTexts.clear(); + conn.setAutoCommit(autoCommit); + logger.debug("End Save into PostGIS:" + featureType.getTypeName()); } - featuresContext.clear(); - } catch (MalformedURLException e) - { - logger.error(e.getMessage(), e); - } catch (IllegalAttributeException e) - { - logger.error(e.getMessage(), e); - } catch (IOException e) + } catch (SQLException e) { logger.error(e.getMessage(), e); } @@ -268,13 +282,6 @@ */ public void closeFeatureWriter() throws IOException { - - for (FeatureWriter featureWriter : this.featuresWriterContext.values()) - { - featureWriter.close(); - } - - this.featuresWriterContext.clear(); } protected OracleElementLogger getElementLogger() @@ -302,4 +309,80 @@ { return logger; } + + public boolean isDropTableMode() + { + return dropTableMode; + } + + public void setDropTableMode(boolean dropTableMode) + { + this.dropTableMode = dropTableMode; + } + + public void createFeatureTypeOccurred(FeatureTypeEvent evt) + { + try + { + clearFeatureData(evt.getFeatureType()); + } catch (SchemaException e) + { + logger.warn(e.getMessage(), e); + } + } + + protected void clearFeatureData(FeatureType featureType) throws SchemaException + { + String featureName = featureType.getTypeName(); + if (isExistFeature(featureType)) + { + try + { + Connection conn = targetDataStore.getConnection(Transaction.AUTO_COMMIT); + if (dropTableMode) + { + dropGeometryColumn(conn, featureName, + featureType.getDefaultGeometry().getLocalName()); + dropTable(conn, featureName); + + ArrayList<String> schemaTexts = createSchemaTexts(featureType); + for (String stmtText : schemaTexts) + { + Statement stmt = conn.createStatement(); + stmt.execute(stmtText); + stmt.close(); + } + } else { + deleteTable(conn, featureName); + } + conn.close(); + } catch (IOException e) + { + logger.warn(e.getMessage(), e); + } catch (SQLException e) + { + logger.warn(e.getMessage(), e); + } + } else + { + try + { + Connection conn = targetDataStore.getConnection(Transaction.AUTO_COMMIT); + ArrayList<String> schemaTexts = createSchemaTexts(featureType); + for (String stmtText : schemaTexts) + { + Statement stmt = conn.createStatement(); + stmt.execute(stmtText); + stmt.close(); + } + conn.close(); + } catch (IOException e) + { + logger.warn(e.getMessage(), e); + } catch (SQLException e) + { + logger.warn(e.getMessage(), e); + } + } + } } -- Gitblit v0.0.0-SNAPSHOT