From fe4bda7d456c106e1061afaa29d452e5553e9d96 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Wed, 14 May 2008 19:40:53 +0800
Subject: [PATCH] update for EOFM-83

---
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/EllipseElement.java                      |   43 +-
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextNodeElement.java                     |    4 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TcbElement.java                          |    4 
 xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml                  |  675 +++++++++++++++++++++++++++++++++++++
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java                 |    6 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java                         |  102 ++---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java |    3 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Element.java                             |   32 +
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Utility.java                             |   75 +++
 xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml                                   |    2 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ShapeElement.java                        |    7 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java                   |    4 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ArcElement.java                          |   75 ++-
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexShapeElement.java                 |    4 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineElement.java                         |   19 
 15 files changed, 898 insertions(+), 157 deletions(-)

diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ArcElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ArcElement.java
index 654688b..e54f755 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ArcElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ArcElement.java
@@ -1,6 +1,8 @@
 package com.ximple.io.dgn7;
 
-//~--- non-JDK imports --------------------------------------------------------
+import java.nio.ByteOrder;
+
+import org.apache.log4j.Logger;
 
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.Geometry;
@@ -15,17 +17,16 @@
  */
 public class ArcElement extends Element implements GeometryConverter
 {
-    public ArcElement(short[] raw)
+    private static final Logger logger = Logger.getLogger(ArcElement.class);
+
+    public ArcElement(byte[] raw)
     {
         super(raw);
     }
 
     public double getStartAngle()
     {
-        int angle = (raw[18] << 16 & 0xffff0000);
-
-        angle |= raw[19] & 0x0000ffff;
-
+        int angle = (raw[18] & 0x0000ffff) << 16 | (raw[19] & 0x0000ffff);
         return Utility.converIntToRotation(angle);
     }
 
@@ -39,9 +40,9 @@
 
     public double getSweepAngle()
     {
-        int angle = (raw[20] << 16 & 0xffff0000);
-
-        angle |= raw[21] & 0x0000ffff;
+        int angle = (raw[20] & 0x0000ffff) << 16 | (raw[21] & 0x0000ffff);
+        if (angle < 0)
+            angle = -1 * (angle & 0x7fffffff);
 
         return Utility.converIntToRotation(angle);
     }
@@ -49,6 +50,11 @@
     public void setSweepAngle(double value)
     {
         int angle = Utility.converRotatioToInt(value);
+        if (angle < 0)
+        {
+            angle &= 0x7fffffff;
+            angle |= 0x80000000;
+        }
 
         raw[20] = (short) (angle >> 16 & 0x0000ffff);
         raw[21] = (short) (angle & 0x0000ffff);
@@ -56,16 +62,18 @@
 
     public double getPrimary()
     {
-        short[] primary = new short[4];
-
-        System.arraycopy(raw, 22, primary, 0, 4);
-
+        rawBuffer.position(22 * 2);
+        ByteOrder bo = rawBuffer.order();
+        rawBuffer.order(ByteOrder.BIG_ENDIAN);
+        byte[] primary = new byte[8];
+        rawBuffer.get(primary);
+        rawBuffer.order(bo);
         return Utility.convertDGNToIEEEDouble(primary) / 1000.0;
     }
 
     public void setPrimary(double value)
     {
-        double  temp    = value * 1000.0;
+        double temp = value * 1000.0;
         short[] primary = Utility.convertIEEEDoubleToDGN(temp);
 
         System.arraycopy(primary, 0, raw, 22, 4);
@@ -73,16 +81,18 @@
 
     public double getSecondary()
     {
-        short[] secondary = new short[4];
-
-        System.arraycopy(raw, 26, secondary, 0, 4);
-
+        rawBuffer.position(26 * 2);
+        ByteOrder bo = rawBuffer.order();
+        rawBuffer.order(ByteOrder.BIG_ENDIAN);
+        byte[] secondary = new byte[8];
+        rawBuffer.get(secondary);
+        rawBuffer.order(bo);
         return Utility.convertDGNToIEEEDouble(secondary) / 1000.0;
     }
 
     public void setSecondary(double value)
     {
-        double  temp      = value * 1000.0;
+        double temp = value * 1000.0;
         short[] secondary = Utility.convertIEEEDoubleToDGN(temp);
 
         System.arraycopy(secondary, 0, raw, 26, 4);
@@ -91,7 +101,6 @@
     public double getRotationAngle()
     {
         int rotation = (raw[30] << 16 & 0xffff0000);
-
         rotation |= raw[31] & 0x0000ffff;
 
         return Utility.converIntToRotation(rotation);
@@ -107,24 +116,26 @@
 
     public Coordinate getOrigin()
     {
-        short[] x = new short[4];
+        rawBuffer.position(32 * 2);
+        ByteOrder bo = rawBuffer.order();
+        rawBuffer.order(ByteOrder.BIG_ENDIAN);
+        byte[] rawValue = new byte[8];
 
-        System.arraycopy(raw, 32, x, 0, 4);
+        rawBuffer.get(rawValue); // x
+        double dx = Utility.converUnitToCoord(Utility.convertDGNToIEEEDouble(rawValue));
 
-        double  dx = Utility.converUnitToCoord((int) Utility.convertDGNToIEEEDouble(x));
-        short[] y  = new short[4];
+        rawBuffer.get(rawValue); // y
+        double dy = Utility.converUnitToCoord(Utility.convertDGNToIEEEDouble(rawValue));
 
-        System.arraycopy(raw, 36, y, 0, 4);
-
-        double dy = Utility.converUnitToCoord((int) Utility.convertDGNToIEEEDouble(y));
+        rawBuffer.order(bo);
 
         return new Coordinate(dx, dy);
     }
 
     public void setOrigin(Coordinate value)
     {
-        double  temp = Utility.converCoordToUnit(value.x);
-        short[] x    = Utility.convertIEEEDoubleToDGN(temp);
+        double temp = Utility.converCoordToUnit(value.x);
+        short[] x = Utility.convertIEEEDoubleToDGN(temp);
 
         System.arraycopy(x, 0, raw, 32, 4);
         temp = Utility.converCoordToUnit(value.y);
@@ -136,7 +147,9 @@
 
     public Geometry toGeometry(GeometryFactory factory)
     {
-        double temp = Math.abs(getStartAngle() - getSweepAngle());
+        double start = getStartAngle();
+        double end = getSweepAngle();
+        double temp = Math.abs(start - end);
         temp /= 4;
         int pts = (temp < 3) ? 3 : (int) temp;
         return factory.createLineString(convertToLineString(pts));
@@ -190,7 +203,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new ArcElement(raw);
         }
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 24ab7b6..c229b96 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
@@ -23,7 +23,7 @@
 {
     protected ArrayList list = new ArrayList();
 
-    public ComplexChainElement(short[] raw)
+    public ComplexChainElement(byte[] raw)
     {
         super(raw);
         attrOffset = 4;
@@ -195,9 +195,11 @@
                 {
                     list.add(((LineElement) element).toGeometry(factory));
                 }
+            /*
             } else if (element instanceof ArcElement)
             {
                 list.add(((ArcElement) element).toGeometry(factory));
+            */
             }
         }
 
@@ -240,7 +242,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new ComplexChainElement(raw);
         }
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 a1b06d9..b4b808e 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
@@ -23,7 +23,7 @@
 {
     ArrayList list = new ArrayList();
 
-    public ComplexShapeElement(short[] raw)
+    public ComplexShapeElement(byte[] raw)
     {
         super(raw);
     }
@@ -198,7 +198,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new ComplexShapeElement(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Element.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Element.java
index 62ff460..10e6852 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Element.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Element.java
@@ -33,12 +33,17 @@
     public static final int PRIMARY_CLASS           = 0;
     public static final int PRIMARY_RULE_CLASS      = 0;
 
-    protected short[]   raw;
-    protected byte      attrOffset = 0;
+    protected short[]       raw;
+    protected byte          attrOffset = 0;
+    protected ByteBuffer    rawBuffer;
 
-    public Element(short[] raw)
+    public Element(byte[] raw)
     {
-        this.raw = raw;
+        // this.raw = raw;
+        this.raw = new short[raw.length / 2];
+        rawBuffer = ByteBuffer.wrap(raw);
+        rawBuffer.order(ByteOrder.LITTLE_ENDIAN);
+        rawBuffer.asShortBuffer().get(this.raw);
     }
 
     public int getLineStyle()
@@ -217,6 +222,10 @@
         }
     }
 
+    protected static int getOffsetPosition(int offset)
+    {
+        return offset * 2;
+    }
 
     public static class ElementHandler implements IElementHandler
     {
@@ -234,23 +243,30 @@
 
         public Object read(ByteBuffer buffer, short signature, int length)
         {
-            byte[] dst = new byte[length - 4];
+            byte[] dst = new byte[length];
             try
             {
-                buffer.get(dst, 0, dst.length);
+                buffer.get(dst, 4, dst.length - 4);
             } catch (BufferUnderflowException exception)
             {
                 throw exception;   
             }
+
             ByteBuffer tmpBuffer = ByteBuffer.wrap(dst);
             tmpBuffer.order(ByteOrder.LITTLE_ENDIAN);
+            tmpBuffer.position(0);
+            tmpBuffer.putShort(signature);
+            tmpBuffer.putShort((short) ((length / 2) - 2));
+            
+            /*
             ShortBuffer sbuffer = tmpBuffer.asShortBuffer();
 
             short[] rawMem = new short[(length / 2)];
             sbuffer.get(rawMem, 2, rawMem.length - 2);
             rawMem[0] = signature;
             rawMem[1] = (short) ((length / 2) - 2);
-            Element elm = createElement(rawMem);
+            */
+            Element elm = createElement(dst);
 
             return elm;
         }
@@ -264,7 +280,7 @@
             return ((Element) element).raw.length;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new Element(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/EllipseElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/EllipseElement.java
index ed020a2..57a4d89 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/EllipseElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/EllipseElement.java
@@ -1,12 +1,14 @@
 package com.ximple.io.dgn7;
 
+import java.nio.ByteOrder;
+
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.geom.GeometryFactory;
 
 public class EllipseElement extends Element implements GeometryConverter
 {
-    public EllipseElement(short[] raw)
+    public EllipseElement(byte[] raw)
     {
         super(raw);
     }
@@ -31,10 +33,12 @@
 
     public double getPrimary()
     {
-        short[] primary = new short[4];
-
-        System.arraycopy(raw, 18, primary, 0, 4);
-
+        rawBuffer.position(18 * 2);
+        ByteOrder bo = rawBuffer.order();
+        rawBuffer.order(ByteOrder.BIG_ENDIAN);
+        byte[] primary = new byte[8];
+        rawBuffer.get(primary);
+        rawBuffer.order(bo);
         return Utility.convertDGNToIEEEDouble(primary) / 1000.0;
     }
 
@@ -48,10 +52,12 @@
 
     public double getSecondary()
     {
-        short[] secondary = new short[4];
-
-        System.arraycopy(raw, 22, secondary, 0, 4);
-
+        rawBuffer.position(22 * 2);
+        ByteOrder bo = rawBuffer.order();
+        rawBuffer.order(ByteOrder.BIG_ENDIAN);
+        byte[] secondary = new byte[8];
+        rawBuffer.get(secondary);
+        rawBuffer.order(bo);
         return Utility.convertDGNToIEEEDouble(secondary) / 1000.0;
     }
 
@@ -66,7 +72,6 @@
     public double getRotationAngle()
     {
         int rotation = (raw[26] << 16 & 0xffff0000);
-
         rotation |= raw[27] & 0x0000ffff;
 
         return Utility.converIntToRotation(rotation);
@@ -82,16 +87,18 @@
 
     public Coordinate getOrigin()
     {
-        short[] x = new short[4];
+        rawBuffer.position(28 * 2);
+        ByteOrder bo = rawBuffer.order();
+        rawBuffer.order(ByteOrder.BIG_ENDIAN);
+        byte[] rawValue = new byte[8];
 
-        System.arraycopy(raw, 28, x, 0, 4);
+        rawBuffer.get(rawValue); // x
+        double dx = Utility.converUnitToCoord(Utility.convertDGNToIEEEDouble(rawValue));
 
-        double dx = Utility.converUnitToCoord((int) Utility.convertDGNToIEEEDouble(x));
-        short[] y = new short[4];
+        rawBuffer.get(rawValue); // y
+        double dy = Utility.converUnitToCoord(Utility.convertDGNToIEEEDouble(rawValue));
 
-        System.arraycopy(raw, 32, y, 0, 4);
-
-        double dy = Utility.converUnitToCoord((int) Utility.convertDGNToIEEEDouble(y));
+        rawBuffer.order(bo);
 
         return new Coordinate(dx, dy);
     }
@@ -165,7 +172,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new EllipseElement(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineElement.java
index 717ed73..9efdcfa 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineElement.java
@@ -15,7 +15,7 @@
  */
 public class LineElement extends Element implements GeometryConverter
 {
-    public LineElement(short[] raw)
+    public LineElement(byte[] raw)
     {
         super(raw);
     }
@@ -27,15 +27,11 @@
 
     public Coordinate getEndPoint()
     {
-        int endX = (int) ((raw[22] << 16) & 0xffff0000);
+        int endX = ((raw[22] << 16) & 0xffff0000) | (raw[23] & 0x0000ffff);
+        int endY = ((raw[24] << 16) & 0xffff0000) | (raw[25] & 0x0000ffff);
 
-        endX = endX + (raw[23] & 0x0000ffff);
 
-        double x    = Utility.converUnitToCoord(endX);
-        int    endY = (int) ((raw[24] << 16) & 0xffff0000);
-
-        endY = endY + (raw[25] & 0x0000ffff);
-
+        double x = Utility.converUnitToCoord(endX);
         double y = Utility.converUnitToCoord(endY);
 
         return new Coordinate(x, y);
@@ -53,12 +49,11 @@
 
     public Coordinate getStartPoint()
     {
-        int startX = (int) ((raw[18] << 16) & 0xffff0000);
-
+        int startX = ((raw[18] << 16) & 0xffff0000);
         startX = startX + (raw[19] & 0x0000ffff);
 
         double x      = Utility.converUnitToCoord(startX);
-        int    startY = (int) ((raw[20] << 16) & 0xffff0000);
+        int    startY = ((raw[20] << 16) & 0xffff0000);
 
         startY = startY + (raw[21] & 0x0000ffff);
 
@@ -121,7 +116,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new LineElement(raw);
         }
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 5d0cb24..307f8c0 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
@@ -15,7 +15,7 @@
  */
 public class LineStringElement extends Element implements GeometryConverter
 {
-    public LineStringElement(short[] raw)
+    public LineStringElement(byte[] raw)
     {
         super(raw);
     }
@@ -158,7 +158,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new LineStringElement(raw);
         }
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 16b930c..6f7bda6 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
@@ -1,10 +1,7 @@
 package com.ximple.io.dgn7;
 
-//~--- 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;
@@ -20,7 +17,7 @@
 {
     static final Logger logger = Logger.getLogger(ShapeElement.class);
 
-    public ShapeElement(short[] raw)
+    public ShapeElement(byte[] raw)
     {
         super(raw);
     }
@@ -57,7 +54,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new ShapeElement(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TcbElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TcbElement.java
index fe4de4a..fa05e9f 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TcbElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TcbElement.java
@@ -9,7 +9,7 @@
  */
 public class TcbElement extends Element
 {
-    public TcbElement(short[] raw)
+    public TcbElement(byte[] raw)
     {
         super(raw);
     }
@@ -82,7 +82,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new TcbElement(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
index 48bd4db..a013d5a 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
@@ -18,52 +18,52 @@
 {
     public static final int ED_CENTERJUSTIFICATION = 0;
 
-//  Enter data field center justification
+    //  Enter data field center justification
     public static final int ED_LEFTJUSTIFICATION = 0;
 
-//  Enter data field left justification
+    //  Enter data field left justification
     public static final int ED_RIGHTJUSTIFICATION = 0;
 
-//  Enter data field right justification
+    //  Enter data field right justification
     public static final int TXTJUST_CB = 0;
 
-//  Center/bottom text justification.
+    //  Center/bottom text justification.
     public static final int TXTJUST_CC = 0;
 
-//  Center/center text justification.
+    //  Center/center text justification.
     public static final int TXTJUST_CT = 0;
 
-//  Center/top text justification.
+    //  Center/top text justification.
     public static final int TXTJUST_LB = 0;
 
-//  Left/bottom text justification.
+    //  Left/bottom text justification.
     public static final int TXTJUST_LC = 0;
 
-//  Left/center text justification.
+    //  Left/center text justification.
     public static final int TXTJUST_LT = 0;
 
-//  Left/top text justification.
+    //  Left/top text justification.
     public static final int TXTJUST_RB = 0;
 
-//  Right/bottom text justification.
+    //  Right/bottom text justification.
     public static final int TXTJUST_RC = 0;
 
-//  Right/center text justification.
+    //  Right/center text justification.
     public static final int TXTJUST_RT = 0;
 
-    public TextElement(short[] raw)
+    public TextElement(byte[] raw)
     {
         super(raw);
     }
 
     public Coordinate getOrigin()
     {
-        int x = (int) (raw[25] << 16 & 0xffff0000);
+        int x = (raw[25] << 16 & 0xffff0000);
 
         x += raw[26] & 0x0000ffff;
 
         double dx = Utility.converUnitToCoord(x);
-        int    y  = (int) (raw[27] << 16 & 0xffff0000);
+        int y = (raw[27] << 16 & 0xffff0000);
 
         y += raw[28] & 0x0000ffff;
 
@@ -75,10 +75,10 @@
     public Coordinate getUserOrigin()
     {
         Coordinate origin = getOrigin();
-        double     x      = origin.x;
-        double     weight = getUserSetWeight();
-        double     height = getUserSetHeight();
-        double     angle  = Utility.converRotationToRadian(getRotationAngle());
+        double x = origin.x;
+        double weight = getUserSetWeight();
+        double height = getUserSetHeight();
+        double angle = Utility.converRotationToRadian(getRotationAngle());
 
         x += weight * Math.cos(angle) - height * Math.sin(angle);
 
@@ -91,29 +91,29 @@
 
     private double getUserSetWeight()
     {
-        int      just   = getJustification();
-        Envelope range  = getRange();
-        double   weight = (range.getWidth());
+        int just = getJustification();
+        Envelope range = getRange();
+        double weight = (range.getWidth());
 
         switch (just)
         {
-        case 0 :
-        case 1 :
-        case 2 :
+        case 0:
+        case 1:
+        case 2:
             weight = 0;
 
             break;
 
-        case 6 :
-        case 7 :
-        case 8 :
+        case 6:
+        case 7:
+        case 8:
             weight = weight / 2;
 
             break;
 
-        case 12 :
-        case 13 :
-        case 14 :
+        case 12:
+        case 13:
+        case 14:
             break;
         }
 
@@ -122,28 +122,28 @@
 
     private double getUserSetHeight()
     {
-        int    just   = getJustification();
+        int just = getJustification();
         double height = getTextHeight();
 
         switch (just)
         {
-        case 2 :
-        case 8 :
-        case 14 :    // bottom
+        case 2:
+        case 8:
+        case 14:    // bottom
             height = 0;
 
             break;
 
-        case 1 :
-        case 7 :
-        case 13 :    // center
+        case 1:
+        case 7:
+        case 13:    // center
             height = height / 2;
 
             break;
 
-        case 0 :
-        case 6 :
-        case 12 :    // height
+        case 0:
+        case 6:
+        case 12:    // height
             break;
         }
 
@@ -182,7 +182,7 @@
 
     public double getTextHeight()
     {
-        int height = (int) ((raw[21] << 16) & 0xffff0000);
+        int height = ((raw[21] << 16) & 0xffff0000);
 
         height += raw[22] & 0x0000ffff;
 
@@ -191,7 +191,7 @@
 
     public double getTextWidth()
     {
-        int length = (int) (raw[19] << 16 & 0xffff0000);
+        int length = (raw[19] << 16 & 0xffff0000);
 
         length += raw[20] & 0x0000ffff;
 
@@ -200,12 +200,12 @@
 
     public int getJustification()
     {
-        return (int) ((raw[18] >>> 8) & 0x00000000ff);
+        return ((raw[18] >>> 8) & 0x00000000ff);
     }
 
     public double getRotationAngle()
     {
-        int totation = (int) ((raw[23] << 16) & 0xffff0000);
+        int totation = ((raw[23] << 16) & 0xffff0000);
 
         totation += raw[24] & 0x0000ffff;
 
@@ -216,13 +216,7 @@
     {
         int isChinese = raw[30] & 0x0000ffff;
 
-        if (isChinese == 0xfdff)
-        {
-            return true;
-        } else
-        {
-            return false;
-        }
+        return (isChinese == 0xfdff);
     }
 
     public int getTextLength()
@@ -240,8 +234,8 @@
     public String getText()
     {
         StringBuffer val = new StringBuffer();
-        char[]       temp;
-        int          num = getTextLength();
+        char[] temp;
+        int num = getTextLength();
 
         if (!isChinese())
         {
@@ -288,7 +282,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new TextElement(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextNodeElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextNodeElement.java
index 8cd87d7..eef53c2 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextNodeElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextNodeElement.java
@@ -23,7 +23,7 @@
 {
     ArrayList list = new ArrayList();
 
-    public TextNodeElement(short[] raw)
+    public TextNodeElement(byte[] raw)
     {
         super(raw);
     }
@@ -283,7 +283,7 @@
             return instance;
         }
 
-        protected Element createElement(short[] raw)
+        protected Element createElement(byte[] raw)
         {
             return new TextNodeElement(raw);
         }
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Utility.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Utility.java
index 7540fed..25f8254 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Utility.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Utility.java
@@ -1,5 +1,10 @@
 package com.ximple.io.dgn7;
 
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import org.apache.log4j.Logger;
+
 import com.vividsolutions.jts.geom.Envelope;
 
 /**
@@ -11,9 +16,10 @@
  */
 public final class Utility
 {
+    private static final Logger logger = Logger.getLogger(Utility.class);
+
     public static double converIntToDouble(int src)
     {
-
         return (double) ((long) ((src * 6) / 1000.0 + 0.5)) / 1000.0;
     }
 
@@ -71,6 +77,16 @@
         return newVal;
     }
 
+    public static double converUnitToCoord(double aValue)
+    {
+        double newVal;
+
+        newVal = aValue / 1000.0;
+        newVal += 2147483.648;    // 2147483.648 = 2 ^ 31
+
+        return newVal;
+    }
+
     public static int converCoordToUnit(double aValue)
     {
         double newVal = aValue;
@@ -103,22 +119,29 @@
                                          converCoordToUnit(range.getMinY()), converCoordToUnit(range.getMaxY()));
     }
 
-    public static double convertDGNToIEEEDouble(short[] src)
+    public static long convertDGNToRAWIEEEDouble(byte[] org)
     {
+        ByteBuffer buf = ByteBuffer.allocate(8);
+        buf.order(ByteOrder.LITTLE_ENDIAN);
+        buf.mark();
+        buf.put(org[2]);
+        buf.put(org[3]);
+        buf.put(org[0]);
+        buf.put(org[1]);
+        buf.put(org[6]);
+        buf.put(org[7]);
+        buf.put(org[4]);
+        buf.put(org[5]);
+        buf.position(0);
+
         int[] tmp = new int[2];
-        long  des;
-        int   sign;
+
+        tmp[0]   = buf.getInt();
+        tmp[1]   = buf.getInt();
+
         int   exponent;
-        int   rndbits;
 
-        if (src == null)
-        {
-            throw new RuntimeException("Source short array is null");
-        }
-
-        tmp[0]   = ((src[0] << 16) & 0xffff0000) | (src[1] & 0x0000ffff);
-        tmp[1]   = ((src[2] << 16) & 0xffff0000) | (src[3] & 0x0000ffff);
-        sign     = (tmp[0] & 0x80000000);
+        int sign     = (tmp[0] & 0x80000000);
         exponent = (tmp[0] >>> 23) & 0x000000ff;
 
         if (exponent != 0)
@@ -126,7 +149,7 @@
             exponent = exponent - 129 + 1023;
         }
 
-        rndbits = tmp[1] & 0x00000007;
+        int rndbits = tmp[1] & 0x00000007;
         tmp[1]  = tmp[1] >>> 3;
         tmp[1]  = (tmp[1] & 0x1fffffff) | (tmp[0] << 29);
 
@@ -137,10 +160,28 @@
 
         tmp[0] = (tmp[0] >>> 3) & 0x000fffff;
         tmp[0] = tmp[0] | (exponent << 20) | sign;
-        des    = (((long) tmp[0] << 32));
-        des    = des | (long) tmp[1];
 
-        return Double.longBitsToDouble(des);
+        buf.position(0);
+        buf.order(ByteOrder.BIG_ENDIAN);
+        buf.putInt(tmp[0]);
+        buf.putInt(tmp[1]);
+        buf.position(0);
+        byte[] tmpRaw = new byte[8];
+        buf.get(tmpRaw);
+        buf.position(0);
+        buf.order(ByteOrder.LITTLE_ENDIAN);
+        for (int i = tmpRaw.length; i > 0 ; i--)
+        {
+            buf.put(tmpRaw[i-1]);
+        }
+        buf.position(0);
+        long result = buf.getLong();
+        return result;
+    }
+
+    public static double convertDGNToIEEEDouble(byte[] src)
+    {
+        return Double.longBitsToDouble(convertDGNToRAWIEEEDouble(src));
     }
 
     public static short[] convertIEEEDoubleToDGN(double src)
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/GeneralDgnConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeneralDgnConvertJobContext.java
index 6062b40..eb4c087 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
@@ -336,6 +336,9 @@
         } else if (element instanceof ArcElement)
         {
             ArcElement arcElement = (ArcElement) element;
+            logger.fatal("" + arcElement.getPrimary() + ":" + arcElement.getSecondary() +
+                    "-" + arcElement.getStartAngle() + ":" + arcElement.getSweepAngle() + ":" +
+            arcElement.getRotationAngle() + ":" + arcElement.getOrigin());
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
             if (geom != null)
diff --git a/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml b/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml
index a2e2bd1..e33a0f9 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml
+++ b/xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml
@@ -11,6 +11,33 @@
     </elementCriterion>
     <LineCreateStrategy/>
   </TypeCompFilter>
+  <TypeCompFilter name="FSC-106.C-1">
+    <tid>106</tid>
+    <cid>1</cid>
+    <description>�����u�޽u</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-106.C-2">
+    <tid>106</tid>
+    <cid>2</cid>
+    <description>�����u�޽u���O</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-106.C-4">
+    <tid>106</tid>
+    <cid>4</cid>
+    <description>�����u�X�u�N���޽u���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
   <TypeCompFilter name="FSC-402.C-0">
     <tid>402</tid>
     <cid>0</cid>
@@ -26,6 +53,7 @@
     <description>�ܹq�ҵ��O</description>
     <elementCriterion>
       <elementType>7</elementType>
+      <elementType>17</elementType>
     </elementCriterion>
     <TextCreateStrategy/>
   </TypeCompFilter>
@@ -76,6 +104,123 @@
     </elementCriterion>
     <TextCreateStrategy/>
   </TypeCompFilter>
+  <TypeCompFilter name="FSC-411.C-7">
+    <tid>411</tid>
+    <cid>7</cid>
+    <description>�t�q��1/600�ޤW�U�Ÿ�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-420.C-0">
+    <tid>420</tid>
+    <cid>0</cid>
+    <description>�޷�</description>
+    <elementCriterion>
+      <elementType>6</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-420.C-1">
+    <tid>420</tid>
+    <cid>1</cid>
+    <description>�޷����O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-421.C-0">
+    <tid>421</tid>
+    <cid>0</cid>
+    <description>�@�P�޹D</description>
+    <elementCriterion>
+      <elementType>6</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-421.C-1">
+    <tid>421</tid>
+    <cid>1</cid>
+    <description>�@�P�޹D���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-423.C-0">
+    <tid>423</tid>
+    <cid>0</cid>
+    <description>�޸��_��</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-423.C-1">
+    <tid>423</tid>
+    <cid>1</cid>
+    <description>�޸��_���޽u</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-424.C-0">
+    <tid>424</tid>
+    <cid>0</cid>
+    <description>�S��u�k�X�вŸ�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-501.C-0">
+    <tid>501</tid>
+    <cid>0</cid>
+    <description>����X</description>
+    <elementCriterion>
+      <elementType>6</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-501.C-1">
+    <tid>501</tid>
+    <cid>1</cid>
+    <description>����X��r���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-502.C-0">
+    <tid>502</tid>
+    <cid>0</cid>
+    <description>���D���X</description>
+    <elementCriterion>
+      <elementType>6</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-502.C-1">
+    <tid>502</tid>
+    <cid>1</cid>
+    <description>���D���X��r���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-503.C-0">
+    <tid>503</tid>
+    <cid>0</cid>
+    <description>��r���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
   <TypeCompFilter name="FSC-407.C-0">
     <tid>407</tid>
     <cid>0</cid>
@@ -110,6 +255,51 @@
     <description>�q��-1/600���O</description>
     <elementCriterion>
       <elementType>7</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-407.C-7">
+    <tid>407</tid>
+    <cid>7</cid>
+    <description>1/600�q��ޤW�U�Ÿ�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-407.C-8">
+    <tid>407</tid>
+    <cid>8</cid>
+    <description>1/1200�q��ޤW�U�Ÿ�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-407.C-9">
+    <tid>407</tid>
+    <cid>9</cid>
+    <description>�q�������u</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-407.C-10">
+    <tid>407</tid>
+    <cid>10</cid>
+    <description>�q��츹</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-407.C-11">
+    <tid>407</tid>
+    <cid>11</cid>
+    <description>�q�������u���\</description>
+    <elementCriterion>
+      <elementType>17</elementType>
     </elementCriterion>
     <TextCreateStrategy/>
   </TypeCompFilter>
@@ -327,6 +517,70 @@
     </elementCriterion>
     <TextCreateStrategy/>
   </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-2">
+    <tid>115</tid>
+    <cid>2</cid>
+    <description>���O�t�������</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-3">
+    <tid>115</tid>
+    <cid>3</cid>
+    <description>���O�t����������O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-4">
+    <tid>115</tid>
+    <cid>4</cid>
+    <description>�C���t�������</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-5">
+    <tid>115</tid>
+    <cid>5</cid>
+    <description>�C���t����������O</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-6">
+    <tid>115</tid>
+    <cid>6</cid>
+    <description>�C���t�ι�-�t�q�Ǯy�е��O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-7">
+    <tid>115</tid>
+    <cid>7</cid>
+    <description>�C���t�ι�-�t�q�Ǯy�е��O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-115.C-8">
+    <tid>115</tid>
+    <cid>8</cid>
+    <description>�[��������(�a�U�C����)���O</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <TextCreateStrategy/>
+  </TypeCompFilter>
+
   <TypeCompFilter name="FSC-118.C-0">
     <tid>118</tid>
     <cid>0</cid>
@@ -357,12 +611,49 @@
   <TypeCompFilter name="FSC-140.C-0">
     <tid>140</tid>
     <cid>0</cid>
-    <description>�����u��</description>
+    <description>�����u��(�u���ϥ�)</description>
     <elementCriterion>
       <elementType>12</elementType>
     </elementCriterion>
     <LineCreateStrategy/>
   </TypeCompFilter>
+  <TypeCompFilter name="FSC-140.C-1">
+    <tid>140</tid>
+    <cid>1</cid>
+    <description>�޽u(�u���ϥ�)</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-140.C-2">
+    <tid>140</tid>
+    <cid>2</cid>
+    <description>�ɽu���O(�u���ϥ�)</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-140.C-3">
+    <tid>140</tid>
+    <cid>3</cid>
+    <description>�X�u�N���޽u(�u���ϥ�)</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-140.C-4">
+    <tid>140</tid>
+    <cid>4</cid>
+    <description>�X�u�N�����O(�u���ϥ�)</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+
   <TypeCompFilter name="FSC-151.C-0">
     <tid>150</tid>
     <cid>0</cid>
@@ -388,6 +679,7 @@
     <cid>0</cid>
     <description>����u</description>
     <elementCriterion>
+      <elementType>12</elementType>
       <elementType>17</elementType>
     </elementCriterion>
     <LineCreateStrategy/>
@@ -425,6 +717,7 @@
     <description>�����I���P���O</description>
     <elementCriterion>
       <elementType>7</elementType>
+      <elementType>17</elementType>
     </elementCriterion>
     <TextCreateStrategy/>
   </TypeCompFilter>
@@ -658,6 +951,33 @@
     </elementCriterion>
     <SymbolCreateStrategy/>
   </TypeCompFilter>
+  <TypeCompFilter name="FSC-216.C-1">
+    <tid>216</tid>
+    <cid>1</cid>
+    <description>�C���ʵ������O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <SymbolCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-216.C-2">
+    <tid>216</tid>
+    <cid>2</cid>
+    <description>�C���ʵ������P���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <SymbolCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-217.C-0">
+    <tid>217</tid>
+    <cid>0</cid>
+    <description>�C���a�U���</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <SymbolCreateStrategy/>
+  </TypeCompFilter>
   <!-- ���l -->
   <TypeCompFilter name="FSC-300.C-0">
     <tid>300</tid>
@@ -665,6 +985,7 @@
     <description>�q�T���l�u</description>
     <elementCriterion>
       <elementType>4</elementType>
+      <elementType>12</elementType>
     </elementCriterion>
     <LineCreateStrategy/>
   </TypeCompFilter>
@@ -710,6 +1031,25 @@
     <description>���O����u</description>
     <elementCriterion>
       <elementType>4</elementType>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-301.C-1">
+    <tid>301</tid>
+    <cid>1</cid>
+    <description>���O����u�޽u�Ÿ�</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-301.C-3">
+    <tid>301</tid>
+    <cid>3</cid>
+    <description>���O����u���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
     </elementCriterion>
     <LineCreateStrategy/>
   </TypeCompFilter>
@@ -723,6 +1063,339 @@
     </elementCriterion>
     <TextCreateStrategy/>
   </TypeCompFilter>
+  <TypeCompFilter name="FSC-113.C-0">
+    <tid>113</tid>
+    <cid>0</cid>
+    <description>�����a�U���</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-0">
+    <tid>403</tid>
+    <cid>0</cid>
+    <description>���C���H���</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-1">
+    <tid>403</tid>
+    <cid>1</cid>
+    <description>���C���H��ծy�е��O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-2">
+    <tid>403</tid>
+    <cid>2</cid>
+    <description>���C���H��ն��Ÿ�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-4">
+    <tid>403</tid>
+    <cid>4</cid>
+    <description>���O�ն��</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-5">
+    <tid>403</tid>
+    <cid>5</cid>
+    <description>���O�ծy�е��O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-6">
+    <tid>403</tid>
+    <cid>6</cid>
+    <description>���֤ն��Ÿ�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-403.C-7">
+    <tid>403</tid>
+    <cid>7</cid>
+    <description>���l�ծy�е��O(���l�ϥ�)</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-401.C-0">
+    <tid>401</tid>
+    <cid>0</cid>
+    <description>�޸�</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-401.C-1">
+    <tid>401</tid>
+    <cid>1</cid>
+    <description>�޸��޽u</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-401.C-2">
+    <tid>401</tid>
+    <cid>2</cid>
+    <description>�޸��޴U</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-401.C-3">
+    <tid>401</tid>
+    <cid>3</cid>
+    <description>�޸���r�������O</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-401.C-5">
+    <tid>401</tid>
+    <cid>5</cid>
+    <description>�޸��_���Ϭq�Ϲj</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-302.C-0">
+    <tid>302</tid>
+    <cid>0</cid>
+    <description>���O�t���u</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-302.C-1">
+    <tid>302</tid>
+    <cid>1</cid>
+    <description>���O�t���u���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-303.C-0">
+    <tid>303</tid>
+    <cid>0</cid>
+    <description>���O�ާ@�u</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-303.C-1">
+    <tid>303</tid>
+    <cid>1</cid>
+    <description>���O�ާ@�u�޽u</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-303.C-3">
+    <tid>303</tid>
+    <cid>3</cid>
+    <description>���O�ާ@�u���O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-305.C-0">
+    <tid>305</tid>
+    <cid>0</cid>
+    <description>���O�I����</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-306.C-0">
+    <tid>306</tid>
+    <cid>0</cid>
+    <description>���O�ɱ��}��</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-307.C-0">
+    <tid>307</tid>
+    <cid>0</cid>
+    <description>���O���[�I</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-308.C-0">
+    <tid>308</tid>
+    <cid>0</cid>
+    <description>���O�׺�</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-311.C-0">
+    <tid>311</tid>
+    <cid>0</cid>
+    <description>���O�x�b</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-311.C-1">
+    <tid>311</tid>
+    <cid>1</cid>
+    <description>���O�x�b�ϸ�(�e�q.����)���O</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-314.C-0">
+    <tid>314</tid>
+    <cid>0</cid>
+    <description>�[�Ÿ��O�t���u</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-314.C-1">
+    <tid>314</tid>
+    <cid>1</cid>
+    <description>�[�Ÿ��O�t���u���O</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-315.C-0">
+    <tid>315</tid>
+    <cid>0</cid>
+    <description>�[�Ÿ��O����u</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-315.C-1">
+    <tid>315</tid>
+    <cid>1</cid>
+    <description>�[�Ÿ��O����u</description>
+    <elementCriterion>
+      <elementType>7</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-316.C-0">
+    <tid>316</tid>
+    <cid>0</cid>
+    <description>���O����</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-317.C-0">
+    <tid>317</tid>
+    <cid>0</cid>
+    <description>���O����}��</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-317.C-1">
+    <tid>317</tid>
+    <cid>1</cid>
+    <description>���O����}�����O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-318.C-0">
+    <tid>318</tid>
+    <cid>0</cid>
+    <description>���O�׬y��</description>
+    <elementCriterion>
+      <elementType>12</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-319.C-0">
+    <tid>319</tid>
+    <cid>0</cid>
+    <description>���֦��e</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-320.C-0">
+    <tid>320</tid>
+    <cid>0</cid>
+    <description>���ֳq�T���Y</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-323.C-0">
+    <tid>323</tid>
+    <cid>0</cid>
+    <description>���q�ഫ��</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-324.C-0">
+    <tid>324</tid>
+    <cid>0</cid>
+    <description>�۰ʤƻ�����</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
+  <TypeCompFilter name="FSC-324.C-1">
+    <tid>324</tid>
+    <cid>1</cid>
+    <description>�۰ʤƻ��������O</description>
+    <elementCriterion>
+      <elementType>17</elementType>
+    </elementCriterion>
+    <LineCreateStrategy/>
+  </TypeCompFilter>
   <!-- Dummy
   <TypeCompLevelFilter name="DemoFeature3">
     <tid>999</tid>

--
Gitblit v0.0.0-SNAPSHOT