From 10445847ed1bfa5755127e828b603a3cdd49c5e3 Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Wed, 07 May 2008 12:58:22 +0800 Subject: [PATCH] update for EOFM-75 --- xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml | 2 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ShapeElement.java | 18 ++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java | 32 +++++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java | 4 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java | 4 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java | 145 +++++++++++++++++------ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java | 131 ++++++++++++++++++--- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java | 1 8 files changed, 266 insertions(+), 71 deletions(-) diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ShapeElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ShapeElement.java index 146f94f..16b930c 100644 --- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ShapeElement.java +++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ShapeElement.java @@ -2,6 +2,9 @@ //~--- non-JDK imports -------------------------------------------------------- +import org.apache.log4j.Logger; + +import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LinearRing; @@ -15,6 +18,8 @@ */ public class ShapeElement extends LineStringElement implements GeometryConverter { + static final Logger logger = Logger.getLogger(ShapeElement.class); + public ShapeElement(short[] raw) { super(raw); @@ -22,10 +27,15 @@ public Geometry toGeometry(GeometryFactory factory) { - LinearRing ring = factory.createLinearRing(this.getVertices()); - return factory.createPolygon(ring, null); - - // return factory.createPolygon(ring, null); + try + { + LinearRing ring = factory.createLinearRing(this.getVertices()); + return factory.createPolygon(ring, null); + } catch (IllegalArgumentException e) + { + logger.warn(e.getMessage(), e); + return null; + } } public static class ElementHandler extends Element.ElementHandler diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml index 53991c5..4a2345d 100644 --- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml +++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml @@ -46,7 +46,7 @@ </entry> <entry> <key>CONVERTDB</key> - <value>true</value> + <value>false</value> </entry> <entry> <key>CONVERTFILE</key> 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 67c898b..b8b0a28 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 @@ -211,4 +211,36 @@ { return _testCount; } + + public String getConvertDB() + { + return _convertDB; + } + + public void setConvertDB(String convertDB) + { + _convertDB = convertDB; + } + + public String getConvertFile() + { + return _convertFile; + } + + public void setConvertFile(String convertFile) + { + _convertFile = convertFile; + } + + public boolean checkConvertDB() + { + return _convertDB != null && !_convertDB.equalsIgnoreCase("false") && + !_convertDB.equalsIgnoreCase("no") && !_convertDB.equalsIgnoreCase("0"); + } + + public boolean checkConvertFile() + { + return _convertFile != null && !_convertFile.equalsIgnoreCase("false") && + !_convertFile.equalsIgnoreCase("no") && !_convertFile.equalsIgnoreCase("0"); + } } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java index 715b4f2..0e1fc7a 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java @@ -29,10 +29,12 @@ import com.vividsolutions.jts.geom.GeometryFactory; import com.ximple.eofms.util.DefaultColorTable; +import com.ximple.io.dgn7.ArcElement; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; import com.ximple.io.dgn7.LineElement; import com.ximple.io.dgn7.LineStringElement; +import com.ximple.io.dgn7.ShapeElement; import com.ximple.io.dgn7.TextElement; import com.ximple.io.dgn7.UserAttributeData; @@ -65,13 +67,22 @@ public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException { FeatureType ft = lookupFeatureType(element); - if (ft == null) + if (ft != null) { Feature feature = createFeature(ft, element); if (feature == null) { - logger.info("cannot craete feature." + element.toString() + "'" + - ((TextElement) element).getText() + "'"); + if (element instanceof TextElement) + logger.info("cannot craete feature." + element.toString() + "'" + + ((TextElement) element).getText() + "'"); + else if (element instanceof ShapeElement) + logger.info("cannot craete feature." + element.toString() + "'" + + ((ShapeElement) element).getVerticeSize() + "'" + + ((ShapeElement) element).getStartPoint()); + else if (element instanceof LineStringElement) + logger.info("cannot craete feature." + element.toString() + "'" + + ((LineStringElement) element).getVerticeSize() + "'" + + ((LineStringElement) element).getStartPoint()); return; } @@ -126,7 +137,7 @@ while (it.hasNext()) { FeatureType featureType = (FeatureType) it.next(); - File sfile = new File(getDataOutPath() + "\\" + featureType.getTypeName()); + File sfile = new File(getDataOutPath() + File.separator + featureType.getTypeName()); logger.debug("Begin Save shapefile:" + sfile.toURI()); FeatureWriter writer; @@ -180,7 +191,7 @@ { outPath.mkdir(); } - dataOut = getDataPath() + SHPOUTPATH; + dataOut = outPath.toString(); } return dataOut; } @@ -215,6 +226,19 @@ return typeBuilder.getFeatureType(); } + public FeatureType createArcFeatureElement(String featureName) throws SchemaException + { + if (typeBuilder == null) + { + typeBuilder = FeatureTypeBuilder.newInstance(featureName); + typeBuilder.addType(AttributeTypeFactory.newAttributeType("GEOM", Geometry.class)); + typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMCOLOR", String.class)); + typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMWEIGHT", Integer.class)); + typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMSTYLE", Integer.class)); + } + return typeBuilder.getFeatureType(); + } + public Feature createFeature(FeatureType featureType, Element element) throws IllegalAttributeException { DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance(); @@ -222,17 +246,42 @@ { TextElement textElement = (TextElement) element; convertDecorator.setConverter(textElement); - Feature feature = featureType.create(new Object[]{ - convertDecorator.toGeometry(geometryFactory), - colorTable.getColorCode(textElement.getColorIndex()), - textElement.getFontIndex(), - textElement.getJustification(), - textElement.getTextHeight(), - textElement.getTextWidth(), - textElement.getRotationAngle(), - textElement.getText() - }); - return feature; + Geometry geom = convertDecorator.toGeometry(geometryFactory); + if (geom != null) + { + return featureType.create(new Object[]{ + geom, + colorTable.getColorCode(textElement.getColorIndex()), + textElement.getFontIndex(), + textElement.getJustification(), + textElement.getTextHeight(), + textElement.getTextWidth(), + textElement.getRotationAngle(), + textElement.getText() + }); + } else + { + logger.info("geometry is null." + element.toString()); + } + return null; + } else if (element instanceof ShapeElement) + { + ShapeElement shapeElement = (ShapeElement) element; + convertDecorator.setConverter(shapeElement); + Geometry geom = convertDecorator.toGeometry(geometryFactory); + if (geom != null) + { + return featureType.create(new Object[]{ + geom, + colorTable.getColorCode(shapeElement.getColorIndex()), + shapeElement.getWeight(), + shapeElement.getLineStyle() + }); + } else + { + logger.info("geometry is null." + element.toString()); + } + return null; } else if (element instanceof LineStringElement) { LineStringElement linestring = (LineStringElement) element; @@ -248,13 +297,30 @@ { LineElement line = (LineElement) element; convertDecorator.setConverter(line); - Feature feature = featureType.create(new Object[]{ - convertDecorator.toGeometry(geometryFactory), - colorTable.getColorCode(line.getColorIndex()), - line.getWeight(), - line.getLineStyle() - }); - return feature; + Geometry geom = convertDecorator.toGeometry(geometryFactory); + if (geom != null) + return featureType.create(new Object[]{ + geom, + colorTable.getColorCode(line.getColorIndex()), + line.getWeight(), + line.getLineStyle() + }); + return null; + /* + } else if (element instanceof ArcElement) + { + ArcElement arcElement = (ArcElement) element; + convertDecorator.setConverter(arcElement); + Geometry geom = convertDecorator.toGeometry(geometryFactory); + if (geom != null) + return featureType.create(new Object[]{ + geom, + colorTable.getColorCode(arcElement.getColorIndex()), + arcElement.getWeight(), + arcElement.getLineStyle() + }); + return null; + */ } return null; } @@ -273,6 +339,7 @@ } return featureBaseName; } + private FeatureType lookupFeatureType(Element element) throws SchemaException, IllegalAttributeException { String typeName; @@ -282,6 +349,14 @@ if (!featureTypes.containsKey(typeName)) { featureTypes.put(typeName, createPointFeatureElement(typeName)); + } + return featureTypes.get(typeName); + } else if (element instanceof ShapeElement) + { + typeName = getFeatureBaseName() + "R"; + if (!featureTypes.containsKey(typeName)) + { + featureTypes.put(typeName, createLineFeatureElement(typeName)); } return featureTypes.get(typeName); } else if (element instanceof LineStringElement) @@ -300,6 +375,16 @@ featureTypes.put(typeName, createLineFeatureElement(typeName)); } return featureTypes.get(typeName); + /* + } else if (element instanceof ArcElement) + { + typeName = getFeatureBaseName() + "A"; + if (!featureTypes.containsKey(typeName)) + { + featureTypes.put(typeName, createArcFeatureElement(typeName)); + } + return featureTypes.get(typeName); + */ } return null; diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java index 27b1a9d..77e3c23 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java @@ -121,7 +121,7 @@ while (it.hasNext()) { FeatureType featureType = (FeatureType) it.next(); - File sfile = new File(getDataOutPath() + "\\" + featureType.getTypeName()); + File sfile = new File(getDataOutPath() + File.separator + featureType.getTypeName()); logger.debug("Begin Save shapefile:" + sfile.toURI()); FeatureWriter writer; @@ -176,7 +176,7 @@ { outPath.mkdir(); } - dataOut = getDataPath() + SHPOUTPATH; + dataOut = outPath.toString(); } return dataOut; } 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 bfeefe4..9a33e99 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 @@ -95,31 +95,42 @@ try { + logger.info("-- step:clearOutputDirectory --"); + clearOutputDirectory(); boolean bFirst = true; - for (String orgSchema : _orgSchema) + if (checkConvertDB()) { - OracleConvertJobContext jobContext = (OracleConvertJobContext) prepareJobContext(_filterPath); - jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance); - jobContext.setLogin(_username, _password); - jobContext.setShapeData(_dataPath); - jobContext.setConvertDB(_convertDB); - jobContext.setConvertFile(_convertFile); - jobContext.setExecutionContext(context); + logger.info("-- step:convertOracleDB --"); + for (String orgSchema : _orgSchema) + { + OracleConvertJobContext jobContext = (OracleConvertJobContext) prepareJobContext(_filterPath); + jobContext.setConnectionInfo(_oracleHost, _oraclePort, _oracleInstance); + jobContext.setLogin(_username, _password); + jobContext.setShapeData(_dataPath); + jobContext.setConvertDB(_convertDB); + jobContext.setConvertFile(_convertFile); + jobContext.setExecutionContext(context); - if (bFirst) - copyConnectivity(jobContext); - else - bFirst = false; + if (bFirst) + copyConnectivity(jobContext); + else + bFirst = false; - logger.info("----- start schema:" + orgSchema + " -----"); - exetcuteConvert(jobContext, orgSchema, _dataPath); + logger.info("----- start schema:" + orgSchema + " -----"); + exetcuteConvert(jobContext, orgSchema, _dataPath); - //close all open filewriter instance - jobContext.closeFeatureWrite(); + //close all open filewriter instance + jobContext.closeFeatureWrite(); + } } - convertIndexDesignFile(context); - convertOtherDesignFile(context); + if (checkConvertFile()) + { + logger.info("-- step:convertIndexDesignFile --"); + convertIndexDesignFile(context); + logger.info("-- step:convertOtherDesignFile --"); + convertOtherDesignFile(context); + } } catch (SQLException e) { logger.warn(e.getMessage(), e); @@ -129,10 +140,12 @@ logger.warn(ex.getMessage(), ex); throw new JobExecutionException("IO error. " + ex.getMessage(), ex); } + logger.info(jobName + " end at " + new Date()); } /** * Connectivity�ƻs�@�Ӫ����A�b�d�߹q�y��V�ɥΨӤ��OMS��Ʈw���q���s����(Connectivity) + * * @param jobContext * @throws SQLException */ @@ -219,25 +232,25 @@ { rs = stmt.executeQuery(fetchStmt); - while (rs.next()) - { - int size = rs.getMetaData().getColumnCount(); - Object[] values = new Object[size]; - - for (int i = 0; i < size; i++) + while (rs.next()) { - values[i] = rs.getObject(i + 1); + int size = rs.getMetaData().getColumnCount(); + Object[] values = new Object[size]; + + for (int i = 0; i < size; i++) + { + values[i] = rs.getObject(i + 1); + } + + Integer key = ((BigDecimal) values[0]).intValue(); + String name = (String) values[1]; + + Pair pair = (Pair) orderedMap.get(key); + if (pair == null) + orderedMap.put(key, new Pair(name, null)); + else + pair.first = name; } - - Integer key = ((BigDecimal) values[0]).intValue(); - String name = (String) values[1]; - - Pair pair = (Pair) orderedMap.get(key); - if (pair == null) - orderedMap.put(key, new Pair(name, null)); - else - pair.first = name; - } } catch (SQLException e) { logger.error(e.toString(), e); @@ -444,6 +457,7 @@ /** * �����ഫ�����ɪ��u�@ + * * @param context �u�@�������� */ private void convertIndexDesignFile(JobExecutionContext context) throws JobExecutionException @@ -471,10 +485,11 @@ for (File dgnFile : dgnFiles) { IndexDgnConvertJobContext convertContext = new IndexDgnConvertJobContext(getDataPath()); + logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---"); try { convertContext.setExecutionContext(context); - String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.pathSeparator); + String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator); convertContext.setFilename(dgnPaths[dgnPaths.length - 1]); FileInputStream fs = new FileInputStream(dgnFile); @@ -485,6 +500,7 @@ scanIndexDgnElement(convertContext); convertContext.commitTransaction(); + System.gc(); } catch (FileNotFoundException e) { convertContext.rollbackTransaction(); @@ -568,6 +584,7 @@ /** * �����ഫ��L�]�p���ɪ��u�@ + * * @param context */ private void convertOtherDesignFile(JobExecutionContext context) throws JobExecutionException @@ -595,10 +612,11 @@ for (File dgnFile : dgnFiles) { GeneralDgnConvertJobContext convertContext = new GeneralDgnConvertJobContext(getDataPath()); + logger.info("--- start dgnfile-" + dgnFile.toString() + " ---"); try { convertContext.setExecutionContext(context); - String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.pathSeparator); + String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator); convertContext.setFilename(dgnPaths[dgnPaths.length - 1]); FileInputStream fs = new FileInputStream(dgnFile); @@ -683,9 +701,58 @@ private void processOtherElement(Element element, GeneralDgnConvertJobContext convertContext) throws IllegalAttributeException, SchemaException { - if (element instanceof TextElement) + convertContext.putFeatureCollection(element); + } + + private void clearOutputDirectory() + { + File outDataPath = new File(getDataPath(), OracleConvertJobContext.SHPOUTPATH); + if (outDataPath.exists() && outDataPath.isDirectory()) { - convertContext.putFeatureCollection(element); + deleteFilesInPath(outDataPath); + } + outDataPath = new File(getDataPath(), IndexDgnConvertJobContext.SHPOUTPATH); + if (outDataPath.exists() && outDataPath.isDirectory()) + { + deleteFilesInPath(outDataPath); + } + outDataPath = new File(getDataPath(), GeneralDgnConvertJobContext.SHPOUTPATH); + if (outDataPath.exists() && outDataPath.isDirectory()) + { + deleteFilesInPath(outDataPath); + } + } + + private void deleteFilesInPath(File outDataPath) + { + deleteFilesInPath(outDataPath, true); + } + private void deleteFilesInPath(File outDataPath, boolean removeSubDir) + { + if (!outDataPath.isDirectory()) + { + return; + } + File[] files = outDataPath.listFiles(); + for (File file : files) + { + if (file.isFile()) + { + if (!file.delete()) + { + logger.info("Cannot delete file-" + file.toString()); + } + } else if (file.isDirectory()) + { + deleteFilesInPath(file, removeSubDir); + if (removeSubDir) + { + if (file.delete()) + { + logger.info("Cannot delete dir-" + file.toString()); + } + } + } } } } diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java index e03f510..8c0b679 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java @@ -42,7 +42,7 @@ static Log logger = LogFactory.getLog(OracleConvertJobContext.class); static final LoggerFacade sLogger = new CommonsLoggingLogger(logger); - private static final String SHPOUTPATH = "shpout"; + static final String SHPOUTPATH = "shpout"; static { @@ -183,7 +183,7 @@ while (it.hasNext()) { FeatureType featureType = (FeatureType) it.next(); - File sfile = new File(getDataOutPath() + "\\" + featureType.getTypeName()); + File sfile = new File(getDataOutPath() + File.separator + featureType.getTypeName()); logger.debug("Begin Save shapefile:" + sfile.toURI()); FeatureWriter writer = null; diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java index e45d248..cca5810 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TWD97GeometryConverterDecorator.java @@ -36,6 +36,7 @@ coordinatesFilter.reset(); Geometry geom = converter.toGeometry(factory); + if (geom == null) return null; geom.apply(coordinatesFilter); return geom; } -- Gitblit v0.0.0-SNAPSHOT