From 0bd011e9dda3aabf6bbe3b9fad3f855a1ff2fae6 Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Mon, 26 May 2008 14:06:48 +0800 Subject: [PATCH] update for EOFM-106 --- xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml | 10 + xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java | 20 ++ .gitattributes | 1 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java | 37 +++ xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml | 2 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java | 138 ++++++++++++++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java | 280 +++++++++++++++++++++++++++++++ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java | 17 + xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java | 18 ++ 9 files changed, 510 insertions(+), 13 deletions(-) diff --git a/.gitattributes b/.gitattributes index a9bb174..8b69adf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -64,6 +64,7 @@ xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractDgnFileJobContext.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/FeatureDgnConvertJobContext.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/IndexDgnConvertJobContext.java svneol=native#text/plain xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java svneol=native#text/plain diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml index 0997e76..0604eb4 100644 --- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml +++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml @@ -20,6 +20,12 @@ <key>SHPDATA_DIR</key> <value>g:\temp\data</value> </entry> + <!-- + <entry> + <key>SHPFILTER_CONF</key> + <value></value> + </entry> + --> <entry> <key>ORAHOST</key> <value>192.168.11.200</value> @@ -53,6 +59,10 @@ <value>true</value> </entry> <entry> + <key>CONVERTELEMIN</key> + <value>false</value> + </entry> + <entry> <key>ELEMLOG</key> <value>true</value> </entry> diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java index e20fced..58ff341 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java @@ -22,6 +22,7 @@ import com.ximple.io.dgn7.LineElement; import com.ximple.io.dgn7.LineStringElement; import com.ximple.io.dgn7.UserAttributeData; +import com.ximple.io.dgn7.ArcElement; public class CreateLineStringStrategy implements CreateFeatureTypeStrategy { @@ -121,7 +122,24 @@ lineElement.getLineStyle() }); return feature; + } else if (element instanceof ArcElement) + { + ArcElement lineStringElement = (ArcElement) element; + convertDecorator.setConverter(lineStringElement); + Feature feature = featureType.create(new Object[]{ + convertDecorator.toGeometry(geometryFactory), + (int) fLinkage.getFsc(), + (long) fLinkage.getUfid(), + (int) fLinkage.getComponentID(), + 0, + lineStringElement.getLevelIndex(), + colorTable.getColorCode(lineStringElement.getColorIndex()), + lineStringElement.getWeight(), + lineStringElement.getLineStyle() + }); + return feature; } + return null; } } 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 9593ded..f3f98b9 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 @@ -26,6 +26,7 @@ private static final String SPATAILSCHEMA = "ORGSCHEMA"; private static final String CONVERTDB = "CONVERTDB"; private static final String CONVERTFILE = "CONVERTFILE"; + private static final String CONVERTELEMIN = "CONVERTELEMIN"; private static final String ELEMLOG = "ELEMLOG"; private static final String ORAHOST = "ORAHOST"; private static final String ORAINST = "ORAINST"; @@ -44,6 +45,7 @@ protected String _password; protected String _convertDB; protected String _convertFile; + protected String _convertElementIn; protected String _elementLogging; protected ArrayList<String> _orgSchema = new ArrayList<String>(); protected boolean _testMode = false; @@ -66,6 +68,7 @@ _password = dataMap.getString(ORAPASS); _convertDB = dataMap.getString(CONVERTDB); _convertFile = dataMap.getString(CONVERTFILE); + _convertElementIn = dataMap.getString(CONVERTELEMIN); _elementLogging = dataMap.getString(ELEMLOG); Log logger = getLogger(); @@ -78,6 +81,7 @@ logger.info("ORAPASS=" + _password); logger.info("CONVERTDB=" + _convertDB); logger.info("CONVERTFILE=" + _convertFile); + logger.info("CONVERTELEMIN=" + _convertElementIn); logger.info("ELEMLOG=" + _elementLogging); String strSchema = dataMap.getString(SPATAILSCHEMA); @@ -246,6 +250,16 @@ _convertFile = convertFile; } + public String getConvertElementIn() + { + return _convertElementIn; + } + + public void setConvertElementIn(String convertElementIn) + { + _convertElementIn = convertElementIn; + } + public boolean checkConvertDB() { return _convertDB != null && !_convertDB.equalsIgnoreCase("false") && @@ -258,6 +272,12 @@ !_convertFile.equalsIgnoreCase("no") && !_convertFile.equalsIgnoreCase("0"); } + public boolean checkConvertElementIn() + { + return _convertElementIn != null && !_convertElementIn.equalsIgnoreCase("false") && + !_convertElementIn.equalsIgnoreCase("no") && !_convertElementIn.equalsIgnoreCase("0"); + } + public String getElementLogging() { return _elementLogging; diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java new file mode 100644 index 0000000..1796bb8 --- /dev/null +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/FeatureDgnConvertJobContext.java @@ -0,0 +1,280 @@ +package com.ximple.eofms.jobs; + +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +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.geotools.data.FeatureWriter; +import org.geotools.data.Transaction; +import org.geotools.data.shapefile.ShapefileDataStore; +import org.geotools.data.shapefile.indexed.IndexedShapefileDataStore; +import org.geotools.feature.Feature; +import org.geotools.feature.FeatureType; +import org.geotools.feature.IllegalAttributeException; +import org.geotools.feature.SchemaException; +import org.geotools.feature.SimpleFeature; +import org.xml.sax.SAXException; + +import com.vividsolutions.jts.geom.GeometryFactory; + +import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter; +import com.ximple.eofms.filter.ElementDispatcher; +import com.ximple.io.dgn7.Element; +import com.ximple.io.dgn7.FrammeAttributeData; +import com.ximple.io.dgn7.UserAttributeData; +import com.ximple.io.dgn7.ComplexElement; + +public class FeatureDgnConvertJobContext extends AbstractDgnFileJobContext +{ + static final Log logger = LogFactory.getLog(IndexDgnConvertJobContext.class); + static final LoggerFacade sLogger = new CommonsLoggingLogger(logger); + static final GeometryFactory geometryFactory = new GeometryFactory(); + static final String SHPOUTPATH = "shpout"; + + private String dataOut = null; + + private HashMap<String, ArrayList<Feature>> featuresContext = new HashMap<String, ArrayList<Feature>>(); + private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>(); + + private PessimisticMapWrapper txFeaturesContext; + + private ElementDispatcher elementDispatcher; + private String _filterConfig; + + public FeatureDgnConvertJobContext(String dataPath, String filterConfig) + { + super(dataPath); + txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger); + _filterConfig = filterConfig; + elementDispatcher = createElementDispatcher(); + } + + private ElementDispatcher createElementDispatcher() + { + try + { + URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml"); + assert rulesURL != null; + Digester digester = DigesterLoader.createDigester(rulesURL); + URL filterURL = null; + if (_filterConfig != null) + { + File config = new File(_filterConfig); + if (config.exists()) + { + filterURL = config.toURI().toURL(); + } + } + if (filterURL == null) + { + // config = new File("conf/DefaultConvertShpFilter.xml"); + filterURL = this.getClass().getResource("/conf/DefaultConvertShpFilter.xml"); + // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml"); + } + assert filterURL != null; + return (ElementDispatcher) digester.parse(filterURL); + } catch (UnsupportedEncodingException e) + { + logger.info(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } catch (MalformedURLException e) + { + logger.info(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } catch (IOException e) + { + logger.info(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } catch (SAXException e) + { + logger.info(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } + } + + public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException + { + assert elementDispatcher != null; + + if (element == null) + { + logger.warn("Unknown Element:" + null); + return; + } + + // �P�_�O�_�ũM���� + Feature feature = elementDispatcher.execute(element); + if (feature == null) + { + FrammeAttributeData linkage = + AbstractFLinkageDispatchableFilter.getFeatureLinkage(element); + logger.warn("Unknown Element:" + element.getElementType().toString() + + ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" + + (linkage == null ? "NULL" : (linkage.getFsc() + "|" + linkage.getComponentID()))); + if (element instanceof ComplexElement) + { + ComplexElement complex = (ComplexElement) element; + logger.warn("----Complex Element size=" + complex.size()); + } + + return; + } + + if (!txFeaturesContext.containsKey(feature.getFeatureType())) + { + txFeaturesContext.put(feature.getFeatureType(), new ArrayList()); + } + ArrayList arrayList = (ArrayList) txFeaturesContext.get(feature.getFeatureType()); + arrayList.add(feature); + } + + public void startTransaction() + { + } + + public void commitTransaction() + { + if (!txFeaturesContext.isEmpty()) + { + logger.debug("Transaction size = " + txFeaturesContext.size()); + //txFeaturesContext.commitTransaction(); + } else + { + logger.debug("Transaction is empty."); + } + + if (!featuresContext.isEmpty()) + { + updateDataStore(); + } + } + + public void rollbackTransaction() + { + //txFeaturesContext.rollbackTransaction(); + if (!featuresContext.isEmpty()) + { + updateDataStore(); + } + } + + private void updateDataStore() + { + Iterator it = featuresContext.keySet().iterator(); + + try + { + while (it.hasNext()) + { + FeatureType featureType = (FeatureType) it.next(); + File sfile = new File(getDataOutPath() + File.separator + featureType.getTypeName()); + logger.debug("Begin Save shapefile:" + sfile.toURI()); + + FeatureWriter writer; + if (featuresWriterContext.containsKey(featureType.getTypeName())) + { + writer = featuresWriterContext.get(featureType.getTypeName()); + } else + { + // ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL()); + /* + ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(), + true, Charset.forName("UTF-8")); + */ + if (!sfile.exists()) + { + ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), + null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); + shapefileDataStore.createSchema(featureType); + writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), + Transaction.AUTO_COMMIT); + } else { + ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), + null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); + writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(), + Transaction.AUTO_COMMIT); + } + featuresWriterContext.put(featureType.getTypeName(), writer); + } + + ArrayList<Feature> features = 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 shapefile:" + sfile.toURI()); + } + featuresContext.clear(); + } catch (MalformedURLException e) + { + logger.error(e.getMessage(), e); + } catch (IllegalAttributeException e) + { + logger.error(e.getMessage(), e); + } catch (IOException e) + { + logger.error(e.getMessage(), e); + } + } + + public String getDataOutPath() + { + if (dataOut == null) + { + File outPath = new File(getDataPath(), SHPOUTPATH); + if (!outPath.exists()) + { + outPath.mkdir(); + } else if (!outPath.isDirectory()) + { + outPath.mkdir(); + } + dataOut = outPath.toString(); + } + return dataOut; + } + + public void closeFeatureWriter() throws IOException { + + for (FeatureWriter featureWriter : this.featuresWriterContext.values()) + { + featureWriter.close(); + } + + this.featuresWriterContext.clear(); + } + + protected FrammeAttributeData getFeatureLinkage(Element element) + { + if (!element.hasUserAttributeData()) + return null; + + List<UserAttributeData> usrDatas = element.getUserAttributeData(); + for (UserAttributeData anUsrData : usrDatas) + { + if (anUsrData instanceof FrammeAttributeData) + { + return (FrammeAttributeData) anUsrData; + } + } + return null; + } +} + 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 93e587c..7783243 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 @@ -165,10 +165,19 @@ ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(), true, Charset.forName("UTF-8")); */ - ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), - null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); - shapefileDataStore.createSchema(featureType); - writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT); + if (!sfile.exists()) + { + ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), + null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); + shapefileDataStore.createSchema(featureType); + writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), + Transaction.AUTO_COMMIT); + } else { + ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), + null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); + writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(), + Transaction.AUTO_COMMIT); + } featuresWriterContext.put(featureType.getTypeName(), writer); } 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 2e91dda..bc01df6 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 @@ -110,6 +110,7 @@ jobContext.setShapeData(_dataPath); jobContext.setConvertDB(_convertDB); jobContext.setConvertFile(_convertFile); + jobContext.setConvertElementIn(_convertElementIn); jobContext.setElementLogging(checkElementLogging()); jobContext.setExecutionContext(context); @@ -132,6 +133,12 @@ convertIndexDesignFile(context); logger.info("-- step:convertOtherDesignFile --"); convertOtherDesignFile(context); + } + + if (checkConvertElementIn()) + { + logger.info("-- step:convertFeatureDesignFile --"); + convertFeatureDesignFile(context); } } catch (SQLException e) { @@ -462,6 +469,7 @@ * �����ഫ�����ɪ��u�@ * * @param context �u�@�������� + * @throws org.quartz.JobExecutionException exception */ private void convertIndexDesignFile(JobExecutionContext context) throws JobExecutionException { @@ -589,20 +597,21 @@ /** * �����ഫ��L�]�p���ɪ��u�@ * - * @param context + * @param context jobContext + * @throws org.quartz.JobExecutionException exception */ private void convertOtherDesignFile(JobExecutionContext context) throws JobExecutionException { File otherDir = new File(getDataPath(), "other"); if (!otherDir.exists()) { - logger.info("index dir=" + otherDir + " not exist."); + logger.info("other dir=" + otherDir + " not exist."); return; } if (!otherDir.isDirectory()) { - logger.info("index dir=" + otherDir + " is not a directory."); + logger.info("other dir=" + otherDir + " is not a directory."); } File[] dgnFiles = otherDir.listFiles(new FilenameFilter() @@ -705,7 +714,8 @@ logger.debug("ElementRecord Count=" + count); } - private void processOtherElement(Element element, GeneralDgnConvertJobContext convertContext) throws IllegalAttributeException, SchemaException + private void processOtherElement(Element element, GeneralDgnConvertJobContext convertContext) + throws IllegalAttributeException, SchemaException { convertContext.putFeatureCollection(element); } @@ -762,4 +772,124 @@ } } } + + private void convertFeatureDesignFile(JobExecutionContext context) throws JobExecutionException + { + File elminDir = new File(getDataPath(), "elmin"); + if (!elminDir.exists()) + { + logger.info("elmin dir=" + elminDir + " not exist."); + return; + } + + if (!elminDir.isDirectory()) + { + logger.info("elmin dir=" + elminDir + " is not a directory."); + } + + File[] dgnFiles = elminDir.listFiles(new FilenameFilter() + { + public boolean accept(File dir, String name) + { + return name.toLowerCase().endsWith(".dgn"); + } + }); + + for (File dgnFile : dgnFiles) + { + FeatureDgnConvertJobContext convertContext = new FeatureDgnConvertJobContext(getDataPath(), _filterPath); + logger.info("--- start dgnfile-" + dgnFile.toString() + " ---"); + try + { + convertContext.setExecutionContext(context); + String dgnPaths[] = StringUtils.splitToArray(dgnFile.toString(), File.separator); + convertContext.setFilename(dgnPaths[dgnPaths.length - 1]); + + FileInputStream fs = new FileInputStream(dgnFile); + FileChannel fc = fs.getChannel(); + Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock()); + convertContext.setReader(reader); + + scanFeatureDgnElement(convertContext); + + convertContext.commitTransaction(); + convertContext.closeFeatureWriter(); + System.gc(); + } catch (FileNotFoundException e) + { + convertContext.rollbackTransaction(); + logger.warn(e.getMessage(), e); + throw new JobExecutionException(e.getMessage(), e); + } catch (Dgn7fileException e) + { + convertContext.rollbackTransaction(); + logger.warn(e.getMessage(), e); + throw new JobExecutionException(e.getMessage(), e); + } catch (IOException e) + { + convertContext.rollbackTransaction(); + logger.warn(e.getMessage(), e); + throw new JobExecutionException(e.getMessage(), e); + } catch (IllegalAttributeException e) + { + convertContext.rollbackTransaction(); + logger.warn(e.getMessage(), e); + throw new JobExecutionException(e.getMessage(), e); + } catch (SchemaException e) + { + convertContext.rollbackTransaction(); + logger.warn(e.getMessage(), e); + throw new JobExecutionException(e.getMessage(), e); + } + } + } + + public void scanFeatureDgnElement(FeatureDgnConvertJobContext convertContext) + throws Dgn7fileException, IOException, IllegalAttributeException, SchemaException + { + Dgn7fileReader reader = convertContext.getReader(); + int count = 0; + Element lastComplex = null; + while (reader.hasNext()) + { + Dgn7fileReader.Record record = reader.nextElement(); + if (record.element() != null) + { + Element element = (Element) record.element(); + ElementType type = element.getElementType(); + + if ((!type.isComplexElement()) && (!element.isComponentElement())) + { + lastComplex = null; + + processFeatureElement(element, convertContext); + } else if (element.isComponentElement()) + { + if (lastComplex != null) + { + ((ComplexElement) lastComplex).add(element); + } + } else if (type.isComplexElement()) + { + if (lastComplex == null) + { + lastComplex = element; + } else + { + processFeatureElement(element, convertContext); + lastComplex = element; + } + } + } + count++; + } + + logger.debug("ElementRecord Count=" + count); + } + + private void processFeatureElement(Element element, FeatureDgnConvertJobContext convertContext) + throws IllegalAttributeException, SchemaException + { + convertContext.putFeatureCollection(element); + } } 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 1be632b..0ede50b 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 @@ -37,6 +37,7 @@ import com.ximple.eofms.filter.ElementDispatcher; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; +import com.ximple.io.dgn7.ComplexElement; public class OracleConvertJobContext extends AbstractOracleJobContext @@ -74,6 +75,7 @@ private String _convertFile = null; private String currentSchema = null; private boolean schemaChanged = false; + private String _convertElementIn = null; public OracleConvertJobContext(String filterConfig) { @@ -133,14 +135,25 @@ Feature feature = elementDispatcher.execute(element); if (feature == null) { + boolean isEmptySize = false; FrammeAttributeData linkage = AbstractFLinkageDispatchableFilter.getFeatureLinkage(element); logger.warn("Unknown Element:" + element.getElementType().toString() + ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" + (linkage == null ? "NULL" : (linkage.getFsc() + "|" + linkage.getComponentID()))); - if (getElementLogging()) + if (element instanceof ComplexElement) + { + ComplexElement complex = (ComplexElement) element; + logger.warn("----Complex Element size=" + complex.size() + ":" + + (linkage == null ? "NULL" : (linkage.getUfid()))); + isEmptySize = true; + } + + if (getElementLogging() && (!isEmptySize)) + { getElementLogger().logElement(element, getCurrentSchema()); + } return; } @@ -208,10 +221,19 @@ ShapefileDataStore shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL(), true, Charset.forName("UTF-8")); */ - ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), - null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); - shapefileDataStore.createSchema(featureType); - writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT); + if (!sfile.exists()) + { + ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), + null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); + shapefileDataStore.createSchema(featureType); + writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), + Transaction.AUTO_COMMIT); + } else { + ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), + null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); + writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(), + Transaction.AUTO_COMMIT); + } featuresWriterContext.put(featureType.getTypeName(), writer); } @@ -317,4 +339,9 @@ this.currentSchema = querySchema; this.schemaChanged = true; } + + public void setConvertElementIn(String convertElementIn) + { + _convertElementIn = convertElementIn; + } } diff --git a/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml b/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml index 9b584fa..7e23b2c 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml +++ b/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml @@ -283,6 +283,7 @@ <description>�q�������u</description> <elementCriterion> <elementType>4</elementType> + <elementType>17</elementType> </elementCriterion> <LineTextCreateStrategy/> </TypeCompFilter> @@ -1196,6 +1197,7 @@ <description>��</description> <elementCriterion> <elementType>12</elementType> + <elementType>16</elementType> </elementCriterion> <LineCreateStrategy/> </TypeCompFilter> -- Gitblit v0.0.0-SNAPSHOT