From bd210ee7438fd203c19d3e8080ea12b79fe56159 Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Mon, 09 Jun 2008 17:19:15 +0800 Subject: [PATCH] update for EOFM-117 --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java | 284 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 195 insertions(+), 89 deletions(-) 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 9a3f93d..fba160a 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,15 +13,22 @@ import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.util.Calendar; import java.util.Date; +import java.util.Map; +import java.util.TreeMap; import org.apache.commons.collections.OrderedMap; import org.apache.commons.collections.OrderedMapIterator; import org.apache.commons.collections.map.LinkedMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.geotools.data.DataStore; +import org.geotools.data.oracle.OracleDataStore; +import org.geotools.data.oracle.OracleDataStoreFactory; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.SchemaException; +import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; @@ -34,10 +41,10 @@ import oracle.sql.BLOB; import com.ximple.eofms.jobs.context.AbstractOracleJobContext; -import com.ximple.eofms.jobs.context.shapefile.FeatureDgnConvertShpJobContext; -import com.ximple.eofms.jobs.context.shapefile.GeneralDgnConvertShpJobContext; -import com.ximple.eofms.jobs.context.shapefile.IndexDgnConvertShpJobContext; -import com.ximple.eofms.jobs.context.shapefile.OracleConvertShapefilesJobContext; +import com.ximple.eofms.jobs.context.orasdo.FeatureDgnConvertOraSDOJobContext; +import com.ximple.eofms.jobs.context.orasdo.GeneralDgnConvertOraSDOJobContext; +import com.ximple.eofms.jobs.context.orasdo.IndexDgnConvertOraSDOJobContext; +import com.ximple.eofms.jobs.context.orasdo.OracleConvertOraSDOJobContext; import com.ximple.eofms.util.BinConverter; import com.ximple.eofms.util.ByteArrayCompressor; import com.ximple.eofms.util.StringUtils; @@ -55,10 +62,13 @@ { final static Log logger = LogFactory.getLog(OracleConvertDgn2OraSDOJob.class); - /** - * The Oracle driver class name - */ - private static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver"; + private static final String SDOHOST = "SDOHOST"; + private static final String SDODDATBASE = "SDODDATBASE"; + private static final String SDOPORT = "SDOPORT"; + private static final String SDOSCHEMA = "SDOSCHEMA"; + private static final String SDOUSER = "SDOUSER"; + private static final String SDOPASS = "SDOPASS"; + private static final String USEWKB = "USEWKB"; private static final int FETCHSIZE = 30; private static final int BATCHSIZE = 25; @@ -76,72 +86,94 @@ } } + protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory(); + GeometryFactory _geomFactory = new GeometryFactory(); + protected String _sdoHost; + protected String _sdoDatabase; + protected String _sdoPort; + protected String _sdoSchema; + protected String _sdoUsername; + protected String _sdoPassword; + protected String _sdoUseWKB; + + protected Map<String, String> sdoProperties; + protected OracleDataStore targetDataStore; public Log getLogger() { return logger; } - // OracleDataStoreFactory factory = new OracleDataStoreFactory(); - /* - Map map = new HashMap(); - map.put("host", fixture.getProperty("host")); - map.put("port", fixture.getProperty("port")); - map.put("instance", fixture.getProperty("instance")); - map.put("user", fixture.getProperty("user")); - map.put("passwd", fixture.getProperty("passwd")); - map.put("dbtype", "oracle"); - map.put("alias", fixture.getProperty("instance")); - map.put("namespace", null); - - assertTrue(factory.canProcess(map)); - - OracleDataStore store = (OracleDataStore) factory.createDataStore(map); - assertNull(store.getNameSpace()); - - map.put("schema", fixture.getProperty("user").toUpperCase()); - store = (OracleDataStore) factory.createDataStore(map); - assertNull(store.getNameSpace()); - - map.put("namespace", "topp"); - store = (OracleDataStore) factory.createDataStore(map); - assertEquals(new URI("topp"), store.getNameSpace()); - */ - - /* - FeatureWriter writer = dstore.getFeatureWriter("ORA_TEST_POINTS", Filter.INCLUDE, - Transaction.AUTO_COMMIT); - assertNotNull(writer); - - Feature feature = writer.next(); - System.out.println(feature); - feature.setAttribute(0, "Changed Feature"); - System.out.println(feature); - writer.write(); - writer.close(); - */ - - /* - Map fidGen = new HashMap(); - fidGen.put("ORA_TEST_POINTS", JDBCDataStoreConfig.FID_GEN_MANUAL_INC); - - JDBCDataStoreConfig config = JDBCDataStoreConfig.createWithSchemaNameAndFIDGenMap(schemaName, - fidGen); - - String name = "add_name"; - BigDecimal intval = new BigDecimal(70); - Point point = jtsFactory.createPoint(new Coordinate(-15.0, -25)); - Feature feature = dstore.getSchema("ORA_TEST_POINTS") - .create(new Object[] { name, intval, point }); - - FeatureStore fs = (FeatureStore) dstore.getFeatureSource("ORA_TEST_POINTS"); - fs.addFeatures(DataUtilities.collection(feature)); - */ - protected AbstractOracleJobContext prepareJobContext(String filterPath) { - return new OracleConvertShapefilesJobContext(filterPath); + return new OracleConvertOraSDOJobContext(getDataPath(), getTargetDataStore(), filterPath); + } + + protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException + { + super.extractJobConfiguration(jobDetail); + JobDataMap dataMap = jobDetail.getJobDataMap(); + _sdoHost = dataMap.getString(SDOHOST); + _sdoDatabase = dataMap.getString(SDODDATBASE); + _sdoPort = dataMap.getString(SDOPORT); + _sdoSchema = dataMap.getString(SDOSCHEMA); + _sdoUsername = dataMap.getString(SDOUSER); + _sdoPassword = dataMap.getString(SDOPASS); + _sdoUseWKB = dataMap.getString(USEWKB); + + Log logger = getLogger(); + /* + logger.info("SDOHOST=" + _myHost); + logger.info("SDODDATBASE=" + _myDatabase); + logger.info("SDOPORT=" + _myPort); + logger.info("SDOSCHEMA=" + _mySchema); + logger.info("SDOUSER=" + _myUsername); + logger.info("SDOPASS=" + _myPassword); + logger.info("USEWKB=" + _myUseWKB); + */ + + if (_sdoHost == null) + { + logger.warn("SDOHOST is null"); + throw new JobExecutionException("Unknown OraSDO host."); + } + if (_sdoDatabase == null) + { + logger.warn("PGDATABASE is null"); + throw new JobExecutionException("Unknown OraSDO database."); + } + if (_sdoPort == null) + { + logger.warn("SDOPORT is null"); + throw new JobExecutionException("Unknown OraSDO port."); + } + if (_sdoSchema == null) + { + logger.warn("SDOSCHEMA is null"); + throw new JobExecutionException("Unknown OraSDO schema."); + } + if (_sdoUsername == null) + { + logger.warn("PGUSERNAME is null"); + throw new JobExecutionException("Unknown OraSDO username."); + } + if (_sdoPassword == null) + { + logger.warn("PGPASSWORD is null"); + throw new JobExecutionException("Unknown OraSDO password."); + } + + Map<String, String> remote = new TreeMap<String, String>(); + remote.put("dbtype", "OraSDO"); + remote.put("charset", "UTF-8"); + remote.put("host", _sdoHost); + remote.put("port", _sdoPort); + remote.put("database", _sdoDatabase); + remote.put("user", _sdoUsername); + remote.put("passwd", _sdoPassword); + remote.put("namespace", null); + sdoProperties = remote; } public void execute(JobExecutionContext context) throws JobExecutionException @@ -156,15 +188,25 @@ logger.info(jobName + " fired at " + new Date()); extractJobConfiguration(jobDetail); createSourceDataStore(); + createTargetDataStore(); if (getSourceDataStore() == null) { + logger.warn("Cannot connect source oracle database."); throw new JobExecutionException("Cannot connect source oracle database."); } + if (getTargetDataStore() == null) + { + logger.warn("Cannot connect source postgreSQL database."); + throw new JobExecutionException("Cannot connect source postgreSQL database."); + } + + Calendar cal = Calendar.getInstance(); + Date startTime = cal.getTime(); try { - logger.info("-- step:clearOutputDirectory --"); - clearOutputDirectory(); + logger.info("-- step:clearOutputDatabase --"); + clearOutputDatabase(); boolean bFirst = true; if (checkConvertDB()) { @@ -172,9 +214,10 @@ for (String orgSchema : _orgSchema) { - OracleConvertShapefilesJobContext jobContext = (OracleConvertShapefilesJobContext) prepareJobContext(_filterPath); + OracleConvertOraSDOJobContext jobContext = + (OracleConvertOraSDOJobContext) prepareJobContext(_filterPath); jobContext.setSourceDataStore(getSourceDataStore()); - jobContext.setConvertElementIn(_convertElementIn); + // jobContext.setConvertElementIn(_convertElementIn); jobContext.setElementLogging(checkElementLogging()); jobContext.setExecutionContext(context); @@ -212,6 +255,11 @@ } disconnect(); + Date endTime = cal.getTime(); + Date time = new Date(endTime.getTime() - startTime.getTime()); + // public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss"; + // SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); + logger.warn("use time = " + time); } catch (SQLException e) { logger.warn(e.getMessage(), e); @@ -230,15 +278,15 @@ * @param jobContext job context * @throws SQLException sql exception */ - private void copyConnectivity(OracleConvertShapefilesJobContext jobContext) throws SQLException + private void copyConnectivity(OracleConvertOraSDOJobContext jobContext) throws SQLException { OracleConnection connection = jobContext.getOracleConnection(); Statement stmt = connection.createStatement(); - stmt.execute(OracleConvertShapefilesJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); - stmt.execute(OracleConvertShapefilesJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); + stmt.execute(AbstractOracleJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); + stmt.execute(AbstractOracleJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); } - private void exetcuteConvert(OracleConvertShapefilesJobContext jobContext, + private void exetcuteConvert(OracleConvertOraSDOJobContext jobContext, String querySchema, String dataPath) throws SQLException { int order = 0; @@ -253,7 +301,7 @@ //jobContext.startTransaction(); jobContext.setCurrentSchema(querySchema); - jobContext.getExecutionContext().put("ConvertDgn2ShpJobProgress", 0); + jobContext.getExecutionContext().put("ConvertDgn2OraSDOJobProgress", 0); for (OrderedMapIterator it = map.orderedMapIterator(); it.hasNext();) { it.next(); @@ -285,11 +333,11 @@ if (now != current) { current = now; - jobContext.getExecutionContext().put("ConvertDgn2ShpJobProgress", current); + jobContext.getExecutionContext().put("ConvertDgn2OraSDOJobProgress", current); } } - jobContext.getExecutionContext().put("ConvertDgn2ShpJobProgress", 100); + jobContext.getExecutionContext().put("ConvertDgn2OraSDOJobProgress", 100); jobContext.commitTransaction(); @@ -387,7 +435,7 @@ return orderedMap; } - protected void queryIgsetElement(OracleConvertShapefilesJobContext jobContext, + protected void queryIgsetElement(OracleConvertOraSDOJobContext jobContext, String srcschema, String srctable) throws SQLException { OracleConnection connection = jobContext.getOracleConnection(); @@ -429,7 +477,7 @@ stmtSrc.close(); } - protected void queryRawElement(OracleConvertShapefilesJobContext jobContext, + protected void queryRawElement(OracleConvertOraSDOJobContext jobContext, String srcschema, String srctable) throws SQLException { OracleConnection connection = jobContext.getOracleConnection(); @@ -568,7 +616,8 @@ for (File dgnFile : dgnFiles) { - IndexDgnConvertShpJobContext convertContext = new IndexDgnConvertShpJobContext(getDataPath()); + IndexDgnConvertOraSDOJobContext convertContext = + new IndexDgnConvertOraSDOJobContext(getDataPath(), getTargetDataStore()); logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---"); try { @@ -615,7 +664,7 @@ } } - protected void scanIndexDgnElement(IndexDgnConvertShpJobContext convertContext) + protected void scanIndexDgnElement(IndexDgnConvertOraSDOJobContext convertContext) throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException { Dgn7fileReader reader = convertContext.getReader(); @@ -658,7 +707,8 @@ logger.debug("ElementRecord Count=" + count); } - private void processIndexElement(Element element, IndexDgnConvertShpJobContext convertContext) throws IllegalAttributeException, SchemaException + private void processIndexElement(Element element, IndexDgnConvertOraSDOJobContext convertContext) + throws IllegalAttributeException, SchemaException { if (element instanceof TextElement) { @@ -698,7 +748,8 @@ for (File dgnFile : dgnFiles) { - GeneralDgnConvertShpJobContext convertContext = new GeneralDgnConvertShpJobContext(getDataPath()); + GeneralDgnConvertOraSDOJobContext convertContext = + new GeneralDgnConvertOraSDOJobContext(getDataPath(), getTargetDataStore()); logger.info("--- start dgnfile-" + dgnFile.toString() + " ---"); try { @@ -745,7 +796,7 @@ } } - public void scanOtherDgnElement(GeneralDgnConvertShpJobContext convertContext) + public void scanOtherDgnElement(GeneralDgnConvertOraSDOJobContext convertContext) throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException { Dgn7fileReader reader = convertContext.getReader(); @@ -788,15 +839,16 @@ logger.debug("ElementRecord Count=" + count); } - private void processOtherElement(Element element, GeneralDgnConvertShpJobContext convertContext) + private void processOtherElement(Element element, GeneralDgnConvertOraSDOJobContext convertContext) throws IllegalAttributeException, SchemaException { convertContext.putFeatureCollection(element); } - private void clearOutputDirectory() + private void clearOutputDatabase() { - File outDataPath = new File(getDataPath(), OracleConvertShapefilesJobContext.SHPOUTPATH); + /* + File outDataPath = new File(getDataPath(), OracleConvertOraSDOJobContext.SHPOUTPATH); if (outDataPath.exists() && outDataPath.isDirectory()) { deleteFilesInPath(outDataPath); @@ -811,6 +863,7 @@ { deleteFilesInPath(outDataPath); } + */ } private void deleteFilesInPath(File outDataPath) @@ -871,7 +924,8 @@ for (File dgnFile : dgnFiles) { - FeatureDgnConvertShpJobContext convertContext = new FeatureDgnConvertShpJobContext(getDataPath(), _filterPath); + FeatureDgnConvertOraSDOJobContext convertContext = + new FeatureDgnConvertOraSDOJobContext(getDataPath(), getTargetDataStore(), _filterPath); logger.info("--- start dgnfile-" + dgnFile.toString() + " ---"); try { @@ -918,7 +972,7 @@ } } - public void scanFeatureDgnElement(FeatureDgnConvertShpJobContext convertContext) + public void scanFeatureDgnElement(FeatureDgnConvertOraSDOJobContext convertContext) throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException { Dgn7fileReader reader = convertContext.getReader(); @@ -961,7 +1015,7 @@ logger.debug("ElementRecord Count=" + count); } - private void processFeatureElement(Element element, FeatureDgnConvertShpJobContext convertContext) + private void processFeatureElement(Element element, FeatureDgnConvertOraSDOJobContext convertContext) throws IllegalAttributeException, SchemaException { convertContext.putFeatureCollection(element); @@ -982,4 +1036,56 @@ } */ } + + public DataStore getTargetDataStore() + { + return targetDataStore; + } + + protected void createTargetDataStore() throws JobExecutionException + { + if (targetDataStore != null) + { + targetDataStore.dispose(); + targetDataStore = null; + } + + /* + if (!isDriverFound()) + { + throw new JobExecutionException("Oracle JDBC Driver not found.-" + JDBC_DRIVER); + } + */ + + if (!sdoProperties.containsKey(OracleDataStoreFactory.MAXCONN.key)) + { + sdoProperties.put(OracleDataStoreFactory.MAXCONN.key, "2"); + } + + if (!sdoProperties.containsKey(OracleDataStoreFactory.MINCONN.key)) + { + sdoProperties.put(OracleDataStoreFactory.MINCONN.key, "1"); + } + + /* + if (!sdoProperties.containsKey(OracleDataStoreFactory.WKBENABLED.key)) + { + sdoProperties.put(OracleDataStoreFactory.WKBENABLED.key, "true"); + } + */ + + if (!dataStoreFactory.canProcess(sdoProperties)) + { + getLogger().warn("cannot process properties-"); + throw new JobExecutionException("cannot process properties-"); + } + try + { + targetDataStore = (OracleDataStore) dataStoreFactory.createDataStore(sdoProperties); + } catch (IOException e) + { + getLogger().warn(e.getMessage(), e); + throw new JobExecutionException(e.getMessage(), e); + } + } } -- Gitblit v0.0.0-SNAPSHOT