.gitattributes
@@ -53,10 +53,12 @@ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeometryCoordinateDecorator.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/BinConverter.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/Bits.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/ByteArrayCompressor.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java
@@ -7,7 +7,7 @@ { private String name; private String description; private int elmtype; private int elmtype; protected Log logger = LogFactory.getLog(AbstractFLinkageDispatchableFilter.class); xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
@@ -8,14 +8,15 @@ import org.geotools.feature.FeatureTypeBuilder; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.SchemaException; import org.opengis.geometry.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Geometry; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; import com.ximple.io.dgn7.LineStringElement; import com.ximple.io.dgn7.UserAttributeData; import com.ximple.io.dgn7.ComplexChainElement; public class CreateLineStringStrategy implements CreateFeatureTypeStrategy { @@ -36,8 +37,7 @@ { if (anUsrData instanceof FrammeAttributeData) { FrammeAttributeData featureLinkage = (FrammeAttributeData) anUsrData; return featureLinkage; return (FrammeAttributeData) anUsrData; } } return null; @@ -69,7 +69,7 @@ { LineStringElement lineStringElement = (LineStringElement) element; Feature feature = featureType.create(new Object[]{ geometryFactory.createLineString(lineStringElement.getVertices()), lineStringElement.toGeometry(geometryFactory), (int) fLinkage.getFsc(), (long) fLinkage.getUfid(), (int) fLinkage.getComponentID(), @@ -80,6 +80,21 @@ lineStringElement.getLineStyle(), }); return feature; } else if (element instanceof ComplexChainElement) { ComplexChainElement complexChain = (ComplexChainElement) element; Feature feature = featureType.create(new Object[]{ complexChain.toGeometry(geometryFactory), (int) fLinkage.getFsc(), (long) fLinkage.getUfid(), (int) fLinkage.getComponentID(), 0, complexChain.getLevelIndex(), complexChain.getColorIndex(), complexChain.getWeight(), complexChain.getLineStyle(), }); return feature; } return null; } xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
@@ -8,14 +8,15 @@ import org.geotools.feature.FeatureTypeBuilder; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.SchemaException; import org.opengis.geometry.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Geometry; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; import com.ximple.io.dgn7.TextElement; import com.ximple.io.dgn7.UserAttributeData; import com.ximple.io.dgn7.TextNodeElement; public class CreateTextStrategy implements CreateFeatureTypeStrategy { @@ -36,8 +37,7 @@ { if (anUsrData instanceof FrammeAttributeData) { FrammeAttributeData featureLinkage = (FrammeAttributeData) anUsrData; return featureLinkage; return (FrammeAttributeData) anUsrData; } } return null; @@ -75,7 +75,7 @@ { TextElement txtElement = (TextElement) element; Feature feature = featureType.create(new Object[]{ geometryFactory.createPoint(txtElement.getUserOrigin()), txtElement.toGeometry(geometryFactory), (int) fLinkage.getFsc(), (long) fLinkage.getUfid(), (int) fLinkage.getComponentID(), @@ -92,6 +92,36 @@ txtElement.getText() }); return feature; } else if (element instanceof TextNodeElement) { TextNodeElement nodeElement = (TextNodeElement) element; String[] texts = nodeElement.getTextArray(); StringBuffer sb = new StringBuffer(); for (String text : texts) { if (sb.length() != 0) sb.append("\n"); sb.append(text); } Feature feature = featureType.create(new Object[]{ nodeElement.toGeometry(geometryFactory), (int) fLinkage.getFsc(), (long) fLinkage.getUfid(), (int) fLinkage.getComponentID(), 0, nodeElement.getLevelIndex(), nodeElement.getColorIndex(), nodeElement.getWeight(), nodeElement.getLineStyle(), nodeElement.getFontIndex(), nodeElement.getJustification(), nodeElement.getTextNodeHeight(), nodeElement.getTextNodeLength(), nodeElement.getRotationAngle(), sb.toString() }); return feature; } return null; } xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
@@ -39,7 +39,7 @@ protected String _password; protected String _orgSchema; protected boolean _testMode = false; protected int _testCount = -1; protected int _testCount = -1; public abstract void execute(JobExecutionContext context) throws JobExecutionException; @@ -105,10 +105,7 @@ } } protected OracleConvertJobContext prepareJobContext() { return new OracleConvertJobContext(); } protected abstract AbstractOracleJobContext prepareJobContext(String filterPath); protected static byte[] getBytesFromBLOB(BLOB blob) throws SQLException { @@ -119,7 +116,7 @@ byte[] chunk = new byte[optimalSize]; InputStream is = blob.getBinaryStream(0); ByteBuffer buffer = null; // ByteBuffer.allocate(optimalSize); int len = 0; int len; try { @@ -137,6 +134,8 @@ } is.close(); assert buffer != null; buffer.position(0); raw = buffer.array(); } catch (IOException e) xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleJobContext.java
New file @@ -0,0 +1,265 @@ package com.ximple.eofms.jobs; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import oracle.jdbc.OracleConnection; public abstract class AbstractOracleJobContext { private static final String ORACLE_URL = "jdbc:oracle:thin:@"; private static final String PROPUsrKey = "user"; private static final String PROPPassKey = "password"; /** * Table Prefiex */ protected static final String TABLE_PREFIX = "GEO$"; protected static final String UDT_SCHEMA = "SPATIALDB"; /** * User Types */ protected static final String UDT_RAWS = "CREATE OR REPLACE TYPE \"" + UDT_SCHEMA + "\".\"RAWS\" AS VARRAY (1048576) OF NUMBER(38)"; protected static final String UDT_OFMID = "CREATE OR REPLACE TYPE \"" + UDT_SCHEMA + "\".\"OFMID\" AS OBJECT (" + "\"CLSID\" NUMBER(5), \"OID\" NUMBER(10), \"STATUS\" NUMBER(5), \"COMPID\" NUMBER(3), " + "\"RULEID\" NUMBER(3), \"OCCID\" NUMBER(3))"; protected static final String UDT_RAWSNAME = "RAWS"; protected static final String UDT_OFMIDNAME = "OFMID"; /** * Utility SQL */ protected static final String TAB_DROP = "DROP TABLE %s.%s CASCADE CONSTRAINTS"; protected static final String TAB_DELETE = "DELETE FROM %s.%s"; /** * Table Schema */ protected static final String TAB_RANGENODEINDEX_1 = "CREATE TABLE \"%s\".\"%s\"\n" + " ( \"RNID\" INTEGER NOT NULL ENABLE,\n" + " \"RPID\" INTEGER NOT NULL ENABLE,\n" + " \"RNG_LOWX\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"RNG_LOWY\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"RNG_HIGHX\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"RNG_HIGHY\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"EXTENTS\" MDSYS.SDO_GEOMETRY,\n" + " \"RNDESCR\" VARCHAR2(255), \n" + " PRIMARY KEY ( \"RNID\" ) ENABLE )"; protected static final String TAB_RANGENODEINDEX = "CREATE TABLE \"%s\".\"%s\"\n" + " ( \"RNID\" INTEGER NOT NULL ENABLE,\n" + " \"RPID\" INTEGER NOT NULL ENABLE,\n" + " \"RNG_LOWX\" FLOAT NOT NULL ENABLE,\n" + " \"RNG_LOWY\" FLOAT NOT NULL ENABLE,\n" + " \"RNG_HIGHX\" FLOAT NOT NULL ENABLE,\n" + " \"RNG_HIGHY\" FLOAT NOT NULL ENABLE,\n" + " \"RNDESCR\" VARCHAR2(255), \n" + " PRIMARY KEY ( \"RNID\" ) ENABLE )"; protected static final String TAB_RANGENODESTORAGE = "CREATE TABLE \"%s\".\"%s\"\n" + " ( \"RNID\" INTEGER NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5,0) NOT NULL ENABLE,\n" + " \"LASTUPDATE\" DATE NOT NULL ENABLE,\n" + " \"SPACETABLE\" VARCHAR2(255)\n" + " )"; protected static final String TAB_ELEMENTINDEX_1 = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n" + " \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"ZLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"ZHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n" + " PRIMARY KEY (\"ELMNO\") ENABLE\n" + " )"; protected static final String TAB_ELEMENTINDEX = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n" + " \"XLOW\" FLOAT NOT NULL ENABLE,\n" + " \"YLOW\" FLOAT NOT NULL ENABLE,\n" + " \"ZLOW\" FLOAT NOT NULL ENABLE,\n" + " \"XHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"YHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"ZHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n" + " PRIMARY KEY (\"ELMNO\") ENABLE\n" + " )"; protected static final String TAB_IGDSSEED = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"SEEDELM\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE\n" + " )"; protected static final String TAB_STORAGE_1 = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" + " \"PROPS\" INTEGER NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE, \n" + " \"GEOM\" MDSYS.SDO_GEOMETRY \n" + " )"; protected static final String TAB_STORAGE = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"XLOW\" FLOAT NOT NULL ENABLE,\n" + " \"YLOW\" FLOAT NOT NULL ENABLE,\n" + " \"XHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"YHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"PROPS\" INTEGER NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" + " )"; protected static final String TAB_STORAGE2 = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" + " \"PROPS\" INTEGER NOT NULL ENABLE,\n" + " \"ID\" " + UDT_SCHEMA + ".OFMID NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" + " )"; /** * Trigger */ protected static final String TRG_SPACENODE = "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n" + " AFTER DELETE OR INSERT OR UPDATE ON \"%s\".\"%s\"\n" + " BEGIN\n" + " UPDATE SPACENODES SET LASTUPDATE = SYSDATE\n" + " WHERE SNID = \"%d\";\n" + " END;"; protected static final String TRG_ELMINDEX = "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n" + " AFTER INSERT OR UPDATE OR DELETE ON \"%s\".\"%s\"\n" + " REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW\n" + " BEGIN\n" + " IF INSERTING THEN\n" + " INSERT INTO \"%s\".\"%s\" (ELMNO, TYPE, XLOW, YLOW, XHIGH, YHIGH,\n" + " UFID, FSC, COMPID, OCCID, SPACENAME)\n" + " VALUES (SD$ELEMENTNUMBER_SEQ.NEXTVAL, :new.ELMTYPE, :new.XLOW, :new.YLOW, :new.XHIGH, :new.YHIGH,\n" + " :new.UFID, :new.FSC, :new.COMPID, :new.OCCID, '%s');\n" + " ELSIF DELETING THEN\n" + " DELETE FROM \"%s\".\"%s\"\n" + " WHERE \"%s\".UFID = :old.UFID AND\n" + " \"%s\".FSC = :old.FSC AND\n" + " \"%s\".COMPID = :old.COMPID AND\n" + " \"%s\".OCCID = :old.OCCID;\n" + " ELSE\n" + " UPDATE \"%s\"\n" + " SET XLOW = :new.XLOW, YLOW = :new.YLOW, XHIGH = :new.XHIGH, YHIGH = :new.YHIGH\n" + " WHERE FSC = :new.FSC AND UFID = :new.UFID AND COMPID = :new.COMPID AND OCCID = :new.OCCID;\n" + " END IF;\n" + " END;"; /** * */ protected static final String TAB_ELEMENTSET_PREFIX = "ELMSET_"; protected static final String STMT_CLEARCYCLEBIN = "PURGE RECYCLEBIN"; protected static final String SMTM_GRANTOBJECTTYPE = "GRANT EXECUTE ANY TYPE TO \"" + UDT_SCHEMA + "\""; protected static final long TIMEOUT = Long.MAX_VALUE; /** * Encoding of URL path. */ protected static final String ENCODING = "UTF-8"; private String _oracleHost; private String _oracleInstance; private String _oraclePort; protected String _dataPath; private OracleConnection oracleConnection = null; protected Properties properties; public static String getCurrentURL(String oracleHost, String oraclePort, String oracleInstance) { StringBuilder builder = new StringBuilder(); builder.append(ORACLE_URL); builder.append(oracleHost); builder.append(":"); builder.append(oraclePort); builder.append(":"); builder.append(oracleInstance); return builder.toString(); } public void setLogin(String userName, String password) { properties.put(PROPUsrKey, userName); properties.put(PROPPassKey, password); } public void setShapeData(String dataPath) { _dataPath = dataPath; } public OracleConnection getOracleConnection() { try { if (oracleConnection == null) { oracleConnection = (OracleConnection) DriverManager.getConnection( getCurrentURL(_oracleHost, _oraclePort, _oracleInstance), properties); } return oracleConnection; } catch (SQLException e) { OracleConvertJobContext.logger.warn(e.getMessage(), e); } oracleConnection = null; return null; } public void closeConnection() { try { if (oracleConnection != null) { oracleConnection.close(); oracleConnection = null; } } catch (SQLException e) { OracleConvertJobContext.logger.warn(e.getMessage(), e); } } public void setConnectionInfo(String oracleHost, String oraclePort, String oracleInstance) { _oracleHost = oracleHost; _oracleInstance = oracleInstance; _oraclePort = oraclePort; } public abstract void startTransaction(); public abstract void commitTransaction(); public abstract void rollbackTransaction(); } xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
@@ -64,6 +64,11 @@ return logger; } protected OracleConvertJobContext prepareJobContext(String filterPath) { return new OracleConvertJobContext(filterPath); } public void execute(JobExecutionContext context) throws JobExecutionException { // Every job has its own job detail @@ -76,7 +81,7 @@ logger.info(jobName + " fired at " + new Date()); extractJobConfiguration(jobDetail); OracleConvertJobContext jobContext = prepareJobContext(); OracleConvertJobContext jobContext = prepareJobContext(_filterPath); jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance); jobContext.setLogin(_username, _password); jobContext.setShapeData(_dataPath); @@ -100,6 +105,7 @@ , null); logger.info("begin convert job:[" + map.size() + "]:testmode=" + _testMode); jobContext.startTransaction(); for (OrderedMapIterator it = map.orderedMapIterator(); it.hasNext();) { it.next(); @@ -132,8 +138,8 @@ System.gc(); } private OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException protected OrderedMap getBlobStorageList(OracleConnection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException { if (orderedMap == null) orderedMap = new LinkedMap(99); @@ -156,7 +162,7 @@ values[i] = rs.getObject(i + 1); } Integer key = new Integer(((BigDecimal) values[0]).intValue()); Integer key = ((BigDecimal) values[0]).intValue(); String name = (String) values[1]; Pair pair = (Pair) orderedMap.get(key); @@ -172,8 +178,8 @@ return orderedMap; } private OrderedMap getRawFormatStorageList(OracleConnection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException protected OrderedMap getRawFormatStorageList(OracleConnection connection, String schemaSrc, String tableSrc, OrderedMap orderedMap) throws SQLException { if (orderedMap == null) orderedMap = new LinkedMap(99); @@ -196,7 +202,7 @@ values[i] = rs.getObject(i + 1); } Integer key = new Integer(((BigDecimal) values[0]).intValue()); Integer key = ((BigDecimal) values[0]).intValue(); String name = (String) values[1]; Pair pair = (Pair) orderedMap.get(key); @@ -212,8 +218,8 @@ return orderedMap; } private void queryIgsetElement(OracleConvertJobContext jobContext, String srcschema, String srctable) throws SQLException protected void queryIgsetElement(OracleConvertJobContext jobContext, String srcschema, String srctable) throws SQLException { OracleConnection connection = jobContext.getOracleConnection(); String fetchSrcStmtFmt = "SELECT IGDSELM FROM \"%s\".\"%s\" ORDER BY ROWID"; @@ -244,7 +250,6 @@ { Element element = fetchBinaryElement(raw); jobContext.putFeatureCollection(element); } catch (Dgn7fileException e) { logger.warn("Dgn7Exception", e); @@ -252,8 +257,8 @@ } } private void queryRawElement(OracleConvertJobContext jobContext, String srcschema, String srctable) throws SQLException protected void queryRawElement(OracleConvertJobContext jobContext, String srcschema, String srctable) throws SQLException { OracleConnection connection = jobContext.getOracleConnection(); String fetchDestStmtFmt = "SELECT ELEMENT FROM \"%s\".\"%s\" ORDER BY ROWID"; @@ -288,7 +293,7 @@ try { Element element = fetchBinaryElement(rawDest); // Feature feature = convertElementToFeature(element); jobContext.putFeatureCollection(element); } catch (Dgn7fileException e) { logger.warn("Dgn7Exception:" + e.getMessage(), e); @@ -310,7 +315,7 @@ // track the record location int elementLength = (buffer.getShort() * 2) + 4; ElementType recordType = ElementType.forID(type); IElementHandler handler = null; IElementHandler handler; handler = recordType.getElementHandler(); @@ -355,23 +360,4 @@ return dgnElement; } private boolean equalRawData(byte[] rawSrc, byte[] rawDest) { if (rawSrc.length != rawDest.length) { return false; } for (int i = 0; i < rawSrc.length; i++) { if (rawSrc[i] != rawDest[i]) { return false; } } return true; } } xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
@@ -1,8 +1,8 @@ package com.ximple.eofms.jobs; import java.io.File; import java.io.IOException; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; @@ -14,13 +14,13 @@ import java.util.Iterator; import java.util.Properties; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.transaction.memory.PessimisticMapWrapper; import org.apache.commons.transaction.util.CommonsLoggingLogger; import org.apache.commons.transaction.util.LoggerFacade; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.geotools.data.FeatureWriter; import org.geotools.data.Transaction; import org.geotools.data.shapefile.ShapefileDataStore; @@ -28,218 +28,19 @@ import org.geotools.feature.FeatureType; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.SimpleFeature; import org.geotools.TestData; import org.xml.sax.SAXException; import com.vividsolutions.jts.util.Assert; import oracle.jdbc.OracleConnection; import com.ximple.eofms.filter.CreateLineStringStrategy; import com.ximple.eofms.filter.ElementDispatcher; import com.ximple.eofms.filter.TypeCompIdDispatchableFilter; import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter; import com.ximple.eofms.filter.ElementDispatcher; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; public class OracleConvertJobContext public class OracleConvertJobContext extends AbstractOracleJobContext { static Log logger = LogFactory.getLog(OracleConvertJobContext.class); static final LoggerFacade sLogger = new CommonsLoggingLogger(logger); private static final String ORACLE_URL = "jdbc:oracle:thin:@"; private static final String PROPUsrKey = "user"; private static final String PROPPassKey = "password"; /** * Table Prefiex */ protected static final String TABLE_PREFIX = "GEO$"; protected static final String UDT_SCHEMA = "SPATIALDB"; /** * User Types */ protected static final String UDT_RAWS = "CREATE OR REPLACE TYPE \"" + UDT_SCHEMA + "\".\"RAWS\" AS VARRAY (1048576) OF NUMBER(38)"; protected static final String UDT_OFMID = "CREATE OR REPLACE TYPE \"" + UDT_SCHEMA + "\".\"OFMID\" AS OBJECT (" + "\"CLSID\" NUMBER(5), \"OID\" NUMBER(10), \"STATUS\" NUMBER(5), \"COMPID\" NUMBER(3), " + "\"RULEID\" NUMBER(3), \"OCCID\" NUMBER(3))"; protected static final String UDT_RAWSNAME = "RAWS"; protected static final String UDT_OFMIDNAME = "OFMID"; /** * Utility SQL */ protected static final String TAB_DROP = "DROP TABLE %s.%s CASCADE CONSTRAINTS"; protected static final String TAB_DELETE = "DELETE FROM %s.%s"; /** * Table Schema */ protected static final String TAB_RANGENODEINDEX_1 = "CREATE TABLE \"%s\".\"%s\"\n" + " ( \"RNID\" INTEGER NOT NULL ENABLE,\n" + " \"RPID\" INTEGER NOT NULL ENABLE,\n" + " \"RNG_LOWX\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"RNG_LOWY\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"RNG_HIGHX\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"RNG_HIGHY\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"EXTENTS\" MDSYS.SDO_GEOMETRY,\n" + " \"RNDESCR\" VARCHAR2(255), \n" + " PRIMARY KEY ( \"RNID\" ) ENABLE )"; protected static final String TAB_RANGENODEINDEX = "CREATE TABLE \"%s\".\"%s\"\n" + " ( \"RNID\" INTEGER NOT NULL ENABLE,\n" + " \"RPID\" INTEGER NOT NULL ENABLE,\n" + " \"RNG_LOWX\" FLOAT NOT NULL ENABLE,\n" + " \"RNG_LOWY\" FLOAT NOT NULL ENABLE,\n" + " \"RNG_HIGHX\" FLOAT NOT NULL ENABLE,\n" + " \"RNG_HIGHY\" FLOAT NOT NULL ENABLE,\n" + " \"RNDESCR\" VARCHAR2(255), \n" + " PRIMARY KEY ( \"RNID\" ) ENABLE )"; protected static final String TAB_RANGENODESTORAGE = "CREATE TABLE \"%s\".\"%s\"\n" + " ( \"RNID\" INTEGER NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5,0) NOT NULL ENABLE,\n" + " \"LASTUPDATE\" DATE NOT NULL ENABLE,\n" + " \"SPACETABLE\" VARCHAR2(255)\n" + " )"; protected static final String TAB_ELEMENTINDEX_1 = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n" + " \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"ZLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"ZHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n" + " PRIMARY KEY (\"ELMNO\") ENABLE\n" + " )"; protected static final String TAB_ELEMENTINDEX = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"TYPE\" NUMBER(5) NOT NULL ENABLE,\n" + " \"XLOW\" FLOAT NOT NULL ENABLE,\n" + " \"YLOW\" FLOAT NOT NULL ENABLE,\n" + " \"ZLOW\" FLOAT NOT NULL ENABLE,\n" + " \"XHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"YHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"ZHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"SPACENAME\" VARCHAR2(255) NOT NULL ENABLE,\n" + " PRIMARY KEY (\"ELMNO\") ENABLE\n" + " )"; protected static final String TAB_IGDSSEED = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"SEEDELM\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE\n" + " )"; protected static final String TAB_STORAGE_1 = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" + " \"PROPS\" INTEGER NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE, \n" + " \"GEOM\" MDSYS.SDO_GEOMETRY \n" + " )"; protected static final String TAB_STORAGE = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"XLOW\" FLOAT NOT NULL ENABLE,\n" + " \"YLOW\" FLOAT NOT NULL ENABLE,\n" + " \"XHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"YHIGH\" FLOAT NOT NULL ENABLE,\n" + " \"PROPS\" INTEGER NOT NULL ENABLE,\n" + " \"TAG_LUFID\" NUMBER(10) NOT NULL ENABLE,\n" + " \"TAG_SFSC\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_SSTAT\" NUMBER(5) NOT NULL ENABLE,\n" + " \"TAG_BCOMPID\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_BRULENO\" NUMBER(3) NOT NULL ENABLE,\n" + " \"TAG_SOCCID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" + " )"; protected static final String TAB_STORAGE2 = "CREATE TABLE %s.%s (\n" + " \"ELMNO\" INTEGER NOT NULL ENABLE,\n" + " \"XLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YLOW\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"XHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"YHIGH\" BINARY_DOUBLE NOT NULL ENABLE,\n" + " \"EXTENTS\" MDSYS.SDO_GEOMETRY, \n" + " \"PROPS\" INTEGER NOT NULL ENABLE,\n" + " \"ID\" " + UDT_SCHEMA + ".OFMID NOT NULL ENABLE,\n" + " \"LAYERID\" NUMBER(5) NOT NULL ENABLE,\n" + " \"ELEMENT\" \"" + UDT_SCHEMA + "\".\"RAWS\" NOT NULL ENABLE \n" + " )"; /** * Trigger */ protected static final String TRG_SPACENODE = "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n" + " AFTER DELETE OR INSERT OR UPDATE ON \"%s\".\"%s\"\n" + " BEGIN\n" + " UPDATE SPACENODES SET LASTUPDATE = SYSDATE\n" + " WHERE SNID = \"%d\";\n" + " END;"; protected static final String TRG_ELMINDEX = "CREATE OR REPLACE TRIGGER \"%s\".\"%s\"\n" + " AFTER INSERT OR UPDATE OR DELETE ON \"%s\".\"%s\"\n" + " REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW\n" + " BEGIN\n" + " IF INSERTING THEN\n" + " INSERT INTO \"%s\".\"%s\" (ELMNO, TYPE, XLOW, YLOW, XHIGH, YHIGH,\n" + " UFID, FSC, COMPID, OCCID, SPACENAME)\n" + " VALUES (SD$ELEMENTNUMBER_SEQ.NEXTVAL, :new.ELMTYPE, :new.XLOW, :new.YLOW, :new.XHIGH, :new.YHIGH,\n" + " :new.UFID, :new.FSC, :new.COMPID, :new.OCCID, '%s');\n" + " ELSIF DELETING THEN\n" + " DELETE FROM \"%s\".\"%s\"\n" + " WHERE \"%s\".UFID = :old.UFID AND\n" + " \"%s\".FSC = :old.FSC AND\n" + " \"%s\".COMPID = :old.COMPID AND\n" + " \"%s\".OCCID = :old.OCCID;\n" + " ELSE\n" + " UPDATE \"%s\"\n" + " SET XLOW = :new.XLOW, YLOW = :new.YLOW, XHIGH = :new.XHIGH, YHIGH = :new.YHIGH\n" + " WHERE FSC = :new.FSC AND UFID = :new.UFID AND COMPID = :new.COMPID AND OCCID = :new.OCCID;\n" + " END IF;\n" + " END;"; /** * */ protected static final String TAB_ELEMENTSET_PREFIX = "ELMSET_"; protected static final String STMT_CLEARCYCLEBIN = "PURGE RECYCLEBIN"; protected static final String SMTM_GRANTOBJECTTYPE = "GRANT EXECUTE ANY TYPE TO \"" + UDT_SCHEMA + "\""; protected static final long TIMEOUT = Long.MAX_VALUE; /** * Encoding of URL path. */ private static final String ENCODING = "UTF-8"; static { @@ -252,28 +53,7 @@ } } public static String getCurrentURL(String oracleHost, String oraclePort, String oracleInstance) { StringBuilder builder = new StringBuilder(); builder.append(ORACLE_URL); builder.append(oracleHost); builder.append(":"); builder.append(oraclePort); builder.append(":"); builder.append(oracleInstance); return builder.toString(); } private String _oracleHost; private String _filterConfig; private String _oracleInstance; private String _oraclePort; private String _dataPath; private OracleConnection oracleConnection = null; private Properties properties; private ElementDispatcher elementDispatcher; @@ -286,28 +66,31 @@ _filterConfig = filterConfig; elementDispatcher = createElementDispatcher(); txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger); } private ElementDispatcher createElementDispatcher() { URL rulesURL = getClass().getResource("ElementDispatcherRules.xml"); File rulesFile = null; try { rulesFile = new File(URLDecoder.decode(rulesURL.getPath(), ENCODING)); if (!rulesFile.exists()) { throw new FileNotFoundException("Could not locate test-data: " + rulesFile); } Digester digester = DigesterLoader.createDigester(rulesFile.toURI().toURL()); File config = new File(_filterConfig); if (!config.exists()) URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml"); assert rulesURL != null; Digester digester = DigesterLoader.createDigester(rulesURL); URL filterURL = null; if (_filterConfig != null) { config = new File("conf\\DefaultConvertShpFilter.xml"); File config = new File(_filterConfig); if (config.exists()) { filterURL = config.toURI().toURL(); } } ElementDispatcher dispatcher = (ElementDispatcher) digester.parse(config); return dispatcher; if (filterURL == null) { // config = new File("conf/DefaultConvertShpFilter.xml"); filterURL = this.getClass().getResource("/conf/DefaultConvertShpFilter.xml"); } assert filterURL != null; return (ElementDispatcher) digester.parse(filterURL); } catch (UnsupportedEncodingException e) { logger.info(e.getMessage(), e); @@ -327,61 +110,6 @@ } } public void setLogin(String userName, String password) { properties.put(PROPUsrKey, userName); properties.put(PROPPassKey, password); } public void setShapeData(String dataPath) { _dataPath = dataPath; } public OracleConnection getOracleConnection() { try { if (oracleConnection == null) { oracleConnection = (OracleConnection) DriverManager.getConnection( getCurrentURL(_oracleHost, _oraclePort, _oracleInstance), properties); } return oracleConnection; } catch (SQLException e) { logger.warn(e.getMessage(), e); } oracleConnection = null; return null; } public void closeConnection() { try { if (oracleConnection != null) { oracleConnection.close(); oracleConnection = null; } } catch (SQLException e) { logger.warn(e.getMessage(), e); } } public void setConnectionInfo(String oracleHost, String oraclePort, String oracleInstance) { _oracleHost = oracleHost; _oracleInstance = oracleInstance; _oraclePort = oraclePort; } public void putFeatureCollection(Element element) { Feature feature = elementDispatcher.execute(element); @@ -390,8 +118,8 @@ FrammeAttributeData linkage = AbstractFLinkageDispatchableFilter.getFeatureLinkage(element); logger.debug("Unknown Element:" + element.getElementType().toString() + ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" + (linkage == null ? "NULL" : (linkage.getFsc() + "|" +linkage.getComponentID()))); ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" + (linkage == null ? "NULL" : (linkage.getFsc() + "|" + linkage.getComponentID()))); return; } @@ -417,7 +145,7 @@ txFeaturesContext.commitTransaction(); } else logger.debug("Transaction is empty."); if (!featuresContext.isEmpty()) { updateDataStore(); @@ -446,7 +174,7 @@ File sfile = new File(_dataPath + "\\" + featureType.getTypeName()); logger.debug("Begin Save shapefile:" + sfile.toURI()); ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURL()); ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL()); shapefileDataStore.createSchema(featureType); FeatureWriter writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT); ArrayList features = (ArrayList) featuresContext.get(featureType); xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
@@ -1,14 +1,13 @@ package com.ximple.eofms.jobs; import java.util.Date; import java.sql.SQLException; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobDetail; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import oracle.jdbc.OracleConnection; import oracle.jdbc.OracleDatabaseMetaData; @@ -30,7 +29,7 @@ logger.info(jobName + " fired at " + new Date()); extractJobConfiguration(jobDetail); OracleConvertJobContext jobContext = prepareJobContext(); AbstractOracleJobContext jobContext = prepareJobContext(_filterPath); jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance); jobContext.setLogin(_username, _password); @@ -43,11 +42,16 @@ } } private void exetcuteConvert(OracleConvertJobContext jobContext, protected AbstractOracleJobContext prepareJobContext(String filterPath) { return new OracleUpgradeJobContext(); } private void exetcuteConvert(AbstractOracleJobContext jobContext, String orgSchema, String dataPath) throws SQLException { OracleConnection connection = jobContext.getOracleConnection(); OracleDatabaseMetaData metaData = (OracleDatabaseMetaData) connection.getMetaData(); OracleStatement statement = (OracleStatement) connection.createStatement(); OracleDatabaseMetaData metaData = (OracleDatabaseMetaData) connection.getMetaData(); OracleStatement statement = (OracleStatement) connection.createStatement(); } } xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeJobContext.java
New file @@ -0,0 +1,16 @@ package com.ximple.eofms.jobs; public class OracleUpgradeJobContext extends AbstractOracleJobContext { public void startTransaction() { } public void commitTransaction() { } public void rollbackTransaction() { } }