From c25905d7c4d0547e798e19454815a6ec7a736fcb Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Thu, 15 May 2008 11:40:02 +0800
Subject: [PATCH] update for EOFM-85

---
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java            |   27 +++++--------
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java              |    9 ++--
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java |    6 +++
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexShapeElement.java            |   19 ++++++---
 4 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java
index f7150d6..001f83a 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java
@@ -1,7 +1,5 @@
 package com.ximple.io.dgn7;
 
-//~--- JDK imports ------------------------------------------------------------
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -10,8 +8,8 @@
 
 import org.apache.log4j.Logger;
 
+import com.vividsolutions.jts.geom.CoordinateList;
 import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryCollection;
 import com.vividsolutions.jts.geom.GeometryFactory;
 
 /**
@@ -25,7 +23,7 @@
 {
     private static final Logger logger = Logger.getLogger(ComplexChainElement.class);
 
-    protected ArrayList list = new ArrayList();
+    protected ArrayList<Element> list = new ArrayList<Element>();
 
     public ComplexChainElement(byte[] raw)
     {
@@ -60,7 +58,7 @@
 
     public boolean add(Object o)
     {
-        return list.add(o);
+        return list.add((Element) o);
     }
 
     public boolean remove(Object o)
@@ -90,12 +88,12 @@
 
     public Object set(int index, Object element)
     {
-        return list.set(index, element);
+        return list.set(index, (Element) element);
     }
 
     public void add(int index, Object element)
     {
-        list.add(index, element);
+        list.add(index, (Element) element);
     }
 
     public Object remove(int index)
@@ -150,8 +148,6 @@
 
     public Geometry toGeometry(GeometryFactory factory)
     {
-        ArrayList<Geometry> list = new ArrayList<Geometry>();
-
         if (size() == 1)
         {
             Element element = (Element) get(0);
@@ -181,6 +177,7 @@
             }
         }
 
+        CoordinateList pts = new CoordinateList();
         for (ListIterator it = listIterator(); it.hasNext();)
         {
             Element element = (Element) it.next();
@@ -189,7 +186,7 @@
             {
                 if (((LineStringElement) element).getVerticeSize() == 0 || ((LineStringElement) element).getVerticeSize() > 1)
                 {
-                    list.add(((LineStringElement) element).toGeometry(factory));
+                    pts.add(((LineStringElement) element).toGeometry(factory).getCoordinates(), true);
                 }
 
             } else if (element instanceof LineElement)
@@ -197,19 +194,15 @@
 
                 if (((LineElement) element).getVertices().length == 0 || ((LineElement) element).getVertices().length > 1)
                 {
-                    list.add(((LineElement) element).toGeometry(factory));
+                    pts.add(((LineElement) element).toGeometry(factory).getCoordinates(), true);
                 }
-            /*
             } else if (element instanceof ArcElement)
             {
-                list.add(((ArcElement) element).toGeometry(factory));
-            */
+                pts.add(((ArcElement) element).toGeometry(factory).getCoordinates(), true);
             }
         }
 
-        Geometry[] ga = list.toArray(new Geometry[list.size()]);
-
-        return new GeometryCollection(ga, factory);
+        return factory.createLineString(pts.toCoordinateArray());
     }
 
     public double getElementSize()
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexShapeElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexShapeElement.java
index a5491c9..d1df571 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexShapeElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexShapeElement.java
@@ -13,6 +13,7 @@
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.geom.GeometryCollection;
 import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.CoordinateList;
 
 /**
  * ComplexShapeElement
@@ -25,7 +26,7 @@
 {
     private static final Logger logger = Logger.getLogger(ComplexShapeElement.class);
 
-    ArrayList list = new ArrayList();
+    ArrayList<Element> list = new ArrayList<Element>();
 
     public ComplexShapeElement(byte[] raw)
     {
@@ -59,7 +60,7 @@
 
     public boolean add(Object o)
     {
-        return list.add(o);
+        return list.add((Element) o);
     }
 
     public boolean remove(Object o)
@@ -89,12 +90,12 @@
 
     public Object set(int index, Object element)
     {
-        return list.set(index, element);
+        return list.set(index, (Element) element);
     }
 
     public void add(int index, Object element)
     {
-        list.add(index, element);
+        list.add(index, (Element) element);
     }
 
     public Object remove(int index)
@@ -177,10 +178,14 @@
             }
         }
 
-        Geometry[]         ga   = list.toArray(new Geometry[list.size()]);
-        GeometryCollection geos = new GeometryCollection(ga, factory);
 
-        return geos;
+        CoordinateList pts = new CoordinateList();
+        for (Geometry geom : list)
+        {
+            pts.add(geom.getCoordinates(), true);
+        }
+
+        return factory.createLinearRing(pts.toCoordinateArray());
     }
 
     public static class ElementHandler extends Element.ElementHandler
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java
index 1a40f95..29fad45 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java
@@ -108,9 +108,9 @@
             return -1;
         }
 
-        int x = (int) ((raw[19 + (4 * index)] << 16) & 0xffff0000);
+        int x = ((raw[19 + (4 * index)] << 16) & 0xffff0000);
 
-        x += (int) (raw[20 + (4 * index)] & 0x0000ffff);
+        x += (raw[20 + (4 * index)] & 0x0000ffff);
 
         return DgnUtility.converUnitToCoord(x);
     }
@@ -130,9 +130,8 @@
             return -1;
         }
 
-        int y = (int) ((raw[21 + (4 * index)] << 16) & 0xffff0000);
-
-        y = y + (int) (raw[22 + (4 * index)] & 0x0000ffff);
+        int y = ((raw[21 + (4 * index)] << 16) & 0xffff0000);
+        y = y + (raw[22 + (4 * index)] & 0x0000ffff);
 
         return DgnUtility.converUnitToCoord(y);
     }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
index 7be4e07..0dff6a6 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
@@ -85,6 +85,12 @@
             angle = ((angle < 0.0) ? (angle + 360.0) : angle);
             angle = ((angle > 360.0) ? (angle - 360.0) : (angle));
 
+            if (txtElement.getText().length() == 0)
+            {
+                logger.info("CreateSymbolStrategy cannot conver " + element.toString() +
+                        "to Feature - getText() is empty.");
+                return null;
+            }
             StringBuilder sb = new StringBuilder();
             sb.append("OCT");
             char id = txtElement.getText().toCharArray()[0];

--
Gitblit v0.0.0-SNAPSHOT