From d4491e9698bf703a3b111488a9cccc5ea5112557 Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Mon, 26 May 2008 14:46:53 +0800 Subject: [PATCH] update for EOFM-107 --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java | 79 +++++++++++++++++++++++++-------------- 1 files changed, 51 insertions(+), 28 deletions(-) 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 7783243..ab36104 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 @@ -2,15 +2,15 @@ import java.io.File; import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.net.MalformedURLException; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.TreeMap; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.nio.charset.Charset; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -31,21 +31,19 @@ import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Coordinate; import com.ximple.eofms.util.DefaultColorTable; +import com.ximple.io.dgn7.ArcElement; +import com.ximple.io.dgn7.ComplexChainElement; import com.ximple.io.dgn7.Element; +import com.ximple.io.dgn7.EllipseElement; 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; -import com.ximple.io.dgn7.ArcElement; -import com.ximple.io.dgn7.EllipseElement; -import com.ximple.io.dgn7.ComplexChainElement; import com.ximple.io.dgn7.TextNodeElement; +import com.ximple.io.dgn7.UserAttributeData; public class GeneralDgnConvertJobContext extends AbstractDgnFileJobContext { @@ -60,7 +58,7 @@ private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>(); private PessimisticMapWrapper txFeaturesContext; - private FeatureTypeBuilder typeBuilder = null; + private TreeMap<String, FeatureTypeBuilder> typeBuilders = new TreeMap<String, FeatureTypeBuilder>(); private TreeMap<String, FeatureType> featureTypes = new TreeMap<String, FeatureType>(); private TWD97GeometryConverterDecorator convertDecorator = null; @@ -172,7 +170,8 @@ shapefileDataStore.createSchema(featureType); writer = shapefileDataStore.getFeatureWriter(featureType.getTypeName(), Transaction.AUTO_COMMIT); - } else { + } else + { ShapefileDataStore shapefileDataStore = new IndexedShapefileDataStore(sfile.toURI().toURL(), null, true, true, IndexedShapefileDataStore.TREE_QIX, Charset.forName("UTF-8")); writer = shapefileDataStore.getFeatureWriterAppend(featureType.getTypeName(), @@ -221,7 +220,8 @@ return dataOut; } - public void closeFeatureWriter() throws IOException { + public void closeFeatureWriter() throws IOException + { for (FeatureWriter featureWriter : this.featuresWriterContext.values()) { @@ -233,9 +233,9 @@ public FeatureType createPointFeatureElement(String featureName) throws SchemaException { - if (typeBuilder == null) + if (!typeBuilders.containsKey(featureName)) { - typeBuilder = FeatureTypeBuilder.newInstance(featureName); + FeatureTypeBuilder typeBuilder = FeatureTypeBuilder.newInstance(featureName); typeBuilder.addType(AttributeTypeFactory.newAttributeType("GEOM", Geometry.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMCOLOR", String.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("FONT", Integer.class)); @@ -244,47 +244,51 @@ typeBuilder.addType(AttributeTypeFactory.newAttributeType("WIDTH", Double.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("ANGLE", Double.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("CONTEXT", String.class)); + typeBuilders.put(featureName, typeBuilder); } - return typeBuilder.getFeatureType(); + return typeBuilders.get(featureName).getFeatureType(); } public FeatureType createLineFeatureElement(String featureName) throws SchemaException { - if (typeBuilder == null) + if (!typeBuilders.containsKey(featureName)) { - typeBuilder = FeatureTypeBuilder.newInstance(featureName); + FeatureTypeBuilder 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)); + typeBuilders.put(featureName, typeBuilder); } - return typeBuilder.getFeatureType(); + return typeBuilders.get(featureName).getFeatureType(); } public FeatureType createArcFeatureElement(String featureName) throws SchemaException { - if (typeBuilder == null) + if (!typeBuilders.containsKey(featureName)) { - typeBuilder = FeatureTypeBuilder.newInstance(featureName); + FeatureTypeBuilder 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)); + typeBuilders.put(featureName, typeBuilder); } - return typeBuilder.getFeatureType(); + return typeBuilders.get(featureName).getFeatureType(); } public FeatureType createEllipseFeatureElement(String featureName) throws SchemaException { - if (typeBuilder == null) + if (!typeBuilders.containsKey(featureName)) { - typeBuilder = FeatureTypeBuilder.newInstance(featureName); + FeatureTypeBuilder 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)); + typeBuilders.put(featureName, typeBuilder); } - return typeBuilder.getFeatureType(); + return typeBuilders.get(featureName).getFeatureType(); } public Feature createFeature(FeatureType featureType, Element element) throws IllegalAttributeException @@ -468,15 +472,34 @@ featureTypes.put(typeName, createPointFeatureElement(typeName)); } return featureTypes.get(typeName); - } else if (element instanceof ShapeElement) + } else if (element instanceof TextNodeElement) { - typeName = getFeatureBaseName() + "R"; + typeName = getFeatureBaseName() + "P"; if (!featureTypes.containsKey(typeName)) { - featureTypes.put(typeName, createLineFeatureElement(typeName)); + featureTypes.put(typeName, createPointFeatureElement(typeName)); } return featureTypes.get(typeName); } else if (element instanceof LineStringElement) + { + if (element instanceof ShapeElement) + { + typeName = getFeatureBaseName() + "R"; + if (!featureTypes.containsKey(typeName)) + { + featureTypes.put(typeName, createLineFeatureElement(typeName)); + } + return featureTypes.get(typeName); + } else + { + typeName = getFeatureBaseName() + "L"; + if (!featureTypes.containsKey(typeName)) + { + featureTypes.put(typeName, createLineFeatureElement(typeName)); + } + return featureTypes.get(typeName); + } + } else if (element instanceof LineElement) { typeName = getFeatureBaseName() + "L"; if (!featureTypes.containsKey(typeName)) @@ -484,7 +507,7 @@ featureTypes.put(typeName, createLineFeatureElement(typeName)); } return featureTypes.get(typeName); - } else if (element instanceof LineElement) + } else if (element instanceof ComplexChainElement) { typeName = getFeatureBaseName() + "L"; if (!featureTypes.containsKey(typeName)) -- Gitblit v0.0.0-SNAPSHOT