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> 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); } } } } 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); } } } } 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); 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); } 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); } } 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("_"); 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("_"); 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("_"); 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)) { 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}); 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}); 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}); 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}); 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(); } 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) 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 "); 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 "); 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()); } 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); } } } }