From 94ae08701bbd7585a0b7e5a92d1975965a503c03 Mon Sep 17 00:00:00 2001 From: Dennis Kao <ulysseskao@gmail.com> Date: Wed, 15 Jan 2014 11:28:52 +0800 Subject: [PATCH] Merge branch 'origin/2.1.x' --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java | 231 +++++++++++++++++++++++---------------------------------- 1 files changed, 94 insertions(+), 137 deletions(-) diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java index 10f3c5e..394509b 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java @@ -10,26 +10,7 @@ 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 java.util.TimeZone; import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter; import com.ximple.eofms.filter.ElementDispatchableFilter; @@ -38,21 +19,34 @@ import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter; import com.ximple.eofms.filter.TypeIdDispatchableFilter; import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext; +import com.ximple.eofms.util.ElementDigesterUtils; import com.ximple.io.dgn7.ComplexElement; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; import com.ximple.io.dgn7.UserAttributeData; +import org.apache.commons.digester3.Digester; +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.feature.SchemaException; +import org.opengis.feature.IllegalAttributeException; +import org.opengis.feature.simple.SimpleFeature; +import org.opengis.feature.simple.SimpleFeatureType; +import org.xml.sax.SAXException; -public class DummyFeatureConvertJobContext extends AbstractDgnFileJobContext -{ +public class DummyFeatureConvertJobContext extends AbstractDgnFileJobContext { static final Log logger = LogFactory.getLog(DummyFeatureConvertJobContext.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, ArrayList<SimpleFeature>> featuresContext = new HashMap<String, ArrayList<SimpleFeature>>(); private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>(); private PessimisticMapWrapper txFeaturesContext; @@ -60,78 +54,62 @@ private ElementDispatcher elementDispatcher; private String _filterConfig; - public DummyFeatureConvertJobContext(String dataPath, String filterConfig) - { - super(dataPath); + public DummyFeatureConvertJobContext(String dataPath, String filterConfig, boolean profileMode, + boolean useTransform) { + super(dataPath, profileMode, useTransform); 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); + private ElementDispatcher createElementDispatcher() { + try { URL filterURL = null; - if (_filterConfig != null) - { + if (_filterConfig != null) { File config = new File(_filterConfig); - if (config.exists()) - { + if (config.exists()) { filterURL = config.toURI().toURL(); } } - if (filterURL == null) - { + 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; + Digester digester = ElementDigesterUtils.getElementDigester(); return (ElementDispatcher) digester.parse(filterURL); - } catch (UnsupportedEncodingException e) - { + } catch (UnsupportedEncodingException e) { logger.info(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); - } catch (MalformedURLException e) - { + } catch (MalformedURLException e) { logger.info(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); - } catch (IOException e) - { + } catch (IOException e) { logger.info(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); - } catch (SAXException e) - { + } catch (SAXException e) { logger.info(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } } - public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException - { + public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException { assert elementDispatcher != null; - if (element == null) - { + if (element == null) { logger.warn("Unknown Element:" + null); return; } - // �P�_�O�_�ũM���� - Feature feature = elementDispatcher.execute(element, true); - if (feature == null) - { + SimpleFeature feature = elementDispatcher.execute(element, getDistId(), isTransformed()); + if (feature == null) { FrammeAttributeData linkage = - AbstractFLinkageDispatchableFilter.getFeatureLinkage(element); + 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) - { + ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" + + (linkage == null ? "NULL" : "FSC=" + (linkage.getFsc() + "|COMPID=" + linkage.getComponentID()))); + if (element instanceof ComplexElement) { ComplexElement complex = (ComplexElement) element; logger.warn("----Complex Element size=" + complex.size()); } @@ -139,131 +117,116 @@ return; } - if (!txFeaturesContext.containsKey(feature.getFeatureType())) - { + 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 startTransaction() { assert elementDispatcher != null; - for (ElementDispatchableFilter filter : elementDispatcher.getRules()) - { - if (filter instanceof TypeCompIdDispatchableFilter) - { + for (ElementDispatchableFilter filter : elementDispatcher.getRules()) { + if (filter instanceof TypeCompIdDispatchableFilter) { ((TypeCompIdDispatchableFilter) filter).getCreateStrategy(); - } else if (filter instanceof TypeCompLevelIdDispatchableFilter) - { + } else if (filter instanceof TypeCompLevelIdDispatchableFilter) { ((TypeCompIdDispatchableFilter) filter).getCreateStrategy(); - } else if (filter instanceof TypeIdDispatchableFilter) - { + } else if (filter instanceof TypeIdDispatchableFilter) { ((TypeCompIdDispatchableFilter) filter).getCreateStrategy(); } } } - public void commitTransaction() - { - if (!txFeaturesContext.isEmpty()) - { + public void commitTransaction() { + if (!txFeaturesContext.isEmpty()) { logger.debug("Transaction size = " + txFeaturesContext.size()); //txFeaturesContext.commitTransaction(); - } else - { + } else { logger.debug("Transaction is empty."); } - if (!featuresContext.isEmpty()) - { + if (!featuresContext.isEmpty()) { updateDataStore(); } } - public void rollbackTransaction() - { + public void rollbackTransaction() { //txFeaturesContext.rollbackTransaction(); - if (!featuresContext.isEmpty()) - { + if (!featuresContext.isEmpty()) { updateDataStore(); } } - private void updateDataStore() - { + private void updateDataStore() { + if (isProfileMode()) markUpdateTime(); Iterator it = featuresContext.keySet().iterator(); - try - { - while (it.hasNext()) - { - FeatureType featureType = (FeatureType) it.next(); + try { + while (it.hasNext()) { + SimpleFeatureType featureType = (SimpleFeatureType) 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())) - { + if (featuresWriterContext.containsKey(featureType.getTypeName())) { writer = featuresWriterContext.get(featureType.getTypeName()); - } else - { + } 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 shapefileDataStore = new ShapefileDataStore(sfile.toURI().toURL()); + /* + if(namespace != null) { + shapefileDataStore.setNamespaceURI(namespace.toString()); + } + */ + shapefileDataStore.setMemoryMapped(true); + // shapefileDataStore.setBufferCachingEnabled(cacheMemoryMaps); + shapefileDataStore.setCharset(Charset.forName("UTF-8")); + shapefileDataStore.setTimeZone(TimeZone.getDefault()); + shapefileDataStore.setIndexed(true); + shapefileDataStore.setIndexCreationEnabled(true); + + if (!sfile.exists()) { 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")); + Transaction.AUTO_COMMIT); + } else { writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(), - Transaction.AUTO_COMMIT); + Transaction.AUTO_COMMIT); } featuresWriterContext.put(featureType.getTypeName(), writer); } - ArrayList<Feature> features = featuresContext.get(featureType); + ArrayList<SimpleFeature> features = featuresContext.get(featureType); Iterator itFeature = features.iterator(); - while (itFeature.hasNext()) - { - Feature feature = (Feature) itFeature.next(); - ((SimpleFeature) writer.next()).setAttributes(feature.getAttributes(null)); + while (itFeature.hasNext()) { + SimpleFeature feature = (SimpleFeature) itFeature.next(); + ((SimpleFeature) writer.next()).setAttributes(feature.getAttributes()); } //writer.close(); logger.debug("End Save shapefile:" + sfile.toURI()); } featuresContext.clear(); - } catch (MalformedURLException e) - { + } catch (MalformedURLException e) { logger.error(e.getMessage(), e); - } catch (IllegalAttributeException e) - { + } catch (IllegalAttributeException e) { logger.error(e.getMessage(), e); - } catch (IOException e) - { + } catch (IOException e) { logger.error(e.getMessage(), e); + } finally { + if (isProfileMode()) accumulateUpdateTime(); } } - public String getDataOutPath() - { - if (dataOut == null) - { + public String getDataOutPath() { + if (dataOut == null) { File outPath = new File(getDataPath(), SHPOUTPATH); - if (!outPath.exists()) - { + if (!outPath.exists()) { outPath.mkdir(); - } else if (!outPath.isDirectory()) - { + } else if (!outPath.isDirectory()) { outPath.mkdir(); } dataOut = outPath.toString(); @@ -271,35 +234,29 @@ return dataOut; } - public void closeFeatureWriter() throws IOException - { + public void closeFeatureWriter() throws IOException { - for (FeatureWriter featureWriter : this.featuresWriterContext.values()) - { + for (FeatureWriter featureWriter : this.featuresWriterContext.values()) { featureWriter.close(); } this.featuresWriterContext.clear(); } - protected FrammeAttributeData getFeatureLinkage(Element element) - { + protected FrammeAttributeData getFeatureLinkage(Element element) { if (!element.hasUserAttributeData()) return null; List<UserAttributeData> usrDatas = element.getUserAttributeData(); - for (UserAttributeData anUsrData : usrDatas) - { - if (anUsrData instanceof FrammeAttributeData) - { + for (UserAttributeData anUsrData : usrDatas) { + if (anUsrData instanceof FrammeAttributeData) { return (FrammeAttributeData) anUsrData; } } return null; } - public Log getLogger() - { + public Log getLogger() { return logger; } } -- Gitblit v0.0.0-SNAPSHOT