From feea447fea52442150bdc1acee26ab27a7aec086 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Wed, 19 Mar 2008 17:33:59 +0800
Subject: [PATCH] update for EOFM-17

---
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java           |   69 +++++++++++
 ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml         |   16 ++
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java       |   29 +++-
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java                 |    2 
 .gitattributes                                                                                  |   23 ++-
 ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java              |    5 
 ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml    |    0 
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java                  |   10 
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java          |    4 
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java          |    2 
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java  |   29 +++-
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractFLinkageDispatchableFilter.java |    9 -
 /dev/null                                                                                       |   46 -------
 ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java              |   27 ++++
 ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml            |   15 ++
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java         |   36 ++++++
 ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java           |    2 
 17 files changed, 235 insertions(+), 89 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index c0b7501..c5671d0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -41,20 +41,21 @@
 ximple-jobcarrier/src/main/resources/quartz_jobs.xml svneol=native#text/xml
 ximple-jobcarrier/src/test/java/com/ximple/eofms/XQuartzJobCarrierTest.java svneol=native#text/plain
 ximple-spatialjob/pom.xml svneol=native#text/xml
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractFLinkageHandlerStrategy.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractFLinkageDispatchableFilter.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java svneol=native#text/plain
+ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateFeatureTypeStrategy.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateLineStringStrategy.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateTextStrategy.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatchableStrategy.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatcher.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/GeometryCoordinateDecorator.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompIdHandlerStrategy.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompLevelIdHandlerStrategy.java svneol=native#text/plain
-ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeIdHandlerStrategy.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/util/BinConverter.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/util/Bits.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/util/ByteArrayCompressor.java svneol=native#text/plain
@@ -62,3 +63,7 @@
 ximple-spatialjob/src/main/java/com/ximple/eofms/util/LangUtil.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/util/PrintfFormat.java svneol=native#text/plain
 ximple-spatialjob/src/main/java/com/ximple/eofms/util/TWDDatumConverter.java svneol=native#text/plain
+ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml svneol=native#text/xml
+ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java svneol=native#text/plain
+ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml svneol=native#text/xml
+ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml svneol=native#text/xml
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java
new file mode 100644
index 0000000..2269b69
--- /dev/null
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractDispatchableFilter.java
@@ -0,0 +1,36 @@
+package com.ximple.eofms.filter;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public abstract class AbstractDispatchableFilter implements ElementDispatchableFilter
+{
+    private String name;
+    private String description;
+
+    protected Log logger = LogFactory.getLog(AbstractFLinkageDispatchableFilter.class);
+
+    public AbstractDispatchableFilter()
+    {
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getDescription()
+    {
+        return description;
+    }
+
+    public void setDescription(String description)
+    {
+        this.description = description;
+    }
+}
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractFLinkageHandlerStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractFLinkageDispatchableFilter.java
similarity index 69%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractFLinkageHandlerStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractFLinkageDispatchableFilter.java
index 201809f..f12b07d 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractFLinkageHandlerStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/AbstractFLinkageDispatchableFilter.java
@@ -1,18 +1,13 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
 import com.ximple.io.dgn7.UserAttributeData;
 
-public abstract class AbstractFLinkageHandlerStrategy implements ElementDispatchableStrategy
+public abstract class AbstractFLinkageDispatchableFilter extends AbstractDispatchableFilter
 {
-    protected Log logger = LogFactory.getLog(AbstractFLinkageHandlerStrategy.class);
-
     protected FrammeAttributeData getFeatureLinkage(Element element)
     {
         if (!element.hasUserAttributeData())
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateFeatureTypeStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java
similarity index 93%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateFeatureTypeStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java
index 08c9ef9..7f8c9f7 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateFeatureTypeStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java
@@ -1,4 +1,4 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import org.geotools.feature.Feature;
 import org.geotools.feature.FeatureType;
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateLineStringStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
similarity index 98%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateLineStringStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
index 5cb5372..e8e6bc0 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateLineStringStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
@@ -1,4 +1,4 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import java.util.List;
 
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateTextStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
similarity index 98%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateTextStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
index 413516c..27e5248 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/CreateTextStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
@@ -1,4 +1,4 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import java.util.List;
 
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatchableStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
similarity index 69%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatchableStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
index 2319568..9ed97d1 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatchableStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
@@ -1,10 +1,10 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import org.geotools.feature.Feature;
 
 import com.ximple.io.dgn7.Element;
 
-public interface ElementDispatchableStrategy
+public interface ElementDispatchableFilter
 {
     public boolean isDispatchable(Element element);
 
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatcher.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
similarity index 62%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatcher.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
index 2ce52a8..ed57e26 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/ElementDispatcher.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
@@ -1,4 +1,4 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import java.util.LinkedList;
 
@@ -8,21 +8,21 @@
 
 public class ElementDispatcher
 {
-    private LinkedList<ElementDispatchableStrategy> rules;
+    private LinkedList<ElementDispatchableFilter> rules;
 
     public ElementDispatcher()
     {
-        rules = new LinkedList<ElementDispatchableStrategy>();
+        rules = new LinkedList<ElementDispatchableFilter>();
     }
 
-    public void addRule(ElementDispatchableStrategy rule)
+    public void addRule(ElementDispatchableFilter rule)
     {
         rules.add(rule);
     }
 
     public Feature execute(Element element)
     {
-        for (ElementDispatchableStrategy rule : rules)
+        for (ElementDispatchableFilter rule : rules)
         {
             if (rule.isDispatchable(element))
             {
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompIdHandlerStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
similarity index 63%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompIdHandlerStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
index 659157d..ada1bd6 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompIdHandlerStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
@@ -1,4 +1,4 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import org.geotools.feature.Feature;
 import org.geotools.feature.FeatureType;
@@ -8,20 +8,33 @@
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
 
-public class TypeCompIdHandlerStrategy extends AbstractFLinkageHandlerStrategy
+public class TypeCompIdDispatchableFilter extends AbstractFLinkageDispatchableFilter
 {
-    private String name;
     private int tid;
     private int cid;
     private CreateFeatureTypeStrategy createStrategy;
 
-    public TypeCompIdHandlerStrategy(String fname,
-                                     CreateFeatureTypeStrategy createStrategy,
-                                     int tid, int compid)
+    public TypeCompIdDispatchableFilter()
     {
-        this.name = fname;
+    }
+
+    public TypeCompIdDispatchableFilter(String fname,
+                                        CreateFeatureTypeStrategy createStrategy,
+                                        int tid, int compid)
+    {
+        this.setName(fname);
         this.tid = tid;
         this.cid = compid;
+        this.createStrategy = createStrategy;
+    }
+
+    public CreateFeatureTypeStrategy getCreateStrategy()
+    {
+        return createStrategy;
+    }
+
+    public void setCreateStrategy(CreateFeatureTypeStrategy createStrategy)
+    {
         this.createStrategy = createStrategy;
     }
 
@@ -36,7 +49,7 @@
     {
         try
         {
-            FeatureType ftype = createStrategy.createFeatureElement(name);
+            FeatureType ftype = createStrategy.createFeatureElement(getName());
             return createStrategy.createFeature(ftype, element);
         } catch (SchemaException e)
         {
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompLevelIdHandlerStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
similarity index 64%
rename from ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompLevelIdHandlerStrategy.java
rename to ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
index 9021b14..dab9595 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeCompLevelIdHandlerStrategy.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
@@ -1,4 +1,4 @@
-package com.ximple.eofms.jobs;
+package com.ximple.eofms.filter;
 
 import org.geotools.feature.Feature;
 import org.geotools.feature.FeatureType;
@@ -8,22 +8,35 @@
 import com.ximple.io.dgn7.Element;
 import com.ximple.io.dgn7.FrammeAttributeData;
 
-public class TypeCompLevelIdHandlerStrategy extends AbstractFLinkageHandlerStrategy
+public class TypeCompLevelIdDispatchableFilter extends AbstractFLinkageDispatchableFilter
 {
-    private String name;
     private int tid;
     private int cid;
     private int lid;
     private CreateFeatureTypeStrategy createStrategy;
 
-    public TypeCompLevelIdHandlerStrategy(String fname,
-                                          CreateFeatureTypeStrategy createStrategy,
-                                          int tid, int compid, int level)
+    public TypeCompLevelIdDispatchableFilter()
     {
-        this.name = fname;
+    }
+
+    public TypeCompLevelIdDispatchableFilter(String fname,
+                                             CreateFeatureTypeStrategy createStrategy,
+                                             int tid, int compid, int level)
+    {
+        this.setName(fname);
         this.tid = tid;
         this.cid = compid;
         this.lid = level;
+        this.createStrategy = createStrategy;
+    }
+
+    public CreateFeatureTypeStrategy getCreateStrategy()
+    {
+        return createStrategy;
+    }
+
+    public void setCreateStrategy(CreateFeatureTypeStrategy createStrategy)
+    {
         this.createStrategy = createStrategy;
     }
 
@@ -39,7 +52,7 @@
     {
         try
         {
-            FeatureType ftype = createStrategy.createFeatureElement(name);
+            FeatureType ftype = createStrategy.createFeatureElement(getName());
             return createStrategy.createFeature(ftype, element);
         } catch (SchemaException e)
         {
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java
new file mode 100644
index 0000000..54d70b0
--- /dev/null
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java
@@ -0,0 +1,69 @@
+package com.ximple.eofms.filter;
+
+import org.geotools.feature.Feature;
+import org.geotools.feature.FeatureType;
+import org.geotools.feature.IllegalAttributeException;
+import org.geotools.feature.SchemaException;
+
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+
+public class TypeIdDispatchableFilter extends AbstractFLinkageDispatchableFilter
+{
+    private int tid;
+    private CreateFeatureTypeStrategy createStrategy;
+
+    public TypeIdDispatchableFilter()
+    {
+    }
+
+    public TypeIdDispatchableFilter(String fname, CreateFeatureTypeStrategy createStrategy,
+                                    int tid)
+    {
+        this.setName(fname);
+        this.tid = tid;
+        this.createStrategy = createStrategy;
+    }
+
+    public int getTid()
+    {
+        return tid;
+    }
+
+    public void setTid(int tid)
+    {
+        this.tid = tid;
+    }
+
+    public CreateFeatureTypeStrategy getCreateStrategy()
+    {
+        return createStrategy;
+    }
+
+    public void setCreateStrategy(CreateFeatureTypeStrategy createStrategy)
+    {
+        this.createStrategy = createStrategy;
+    }
+
+    public boolean isDispatchable(Element element)
+    {
+        FrammeAttributeData featureLinkage = getFeatureLinkage(element);
+        return featureLinkage != null && tid == featureLinkage.getFsc();
+    }
+
+    public Feature execute(Element element)
+    {
+        try
+        {
+            FeatureType ftype = createStrategy.createFeatureElement(getName());
+            return createStrategy.createFeature(ftype, element);
+        } catch (SchemaException e)
+        {
+            logger.error(e.getMessage(), e);
+        } catch (IllegalAttributeException e)
+        {
+            logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+}
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
index 344dd76..7bddaa9 100644
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
+++ b/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertJobContext.java
@@ -27,6 +27,9 @@
 
 import oracle.jdbc.OracleConnection;
 
+import com.ximple.eofms.filter.CreateLineStringStrategy;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
 import com.ximple.io.dgn7.Element;
 
 public class OracleConvertJobContext
@@ -272,7 +275,7 @@
     private ElementDispatcher createElementDispatcher()
     {
         ElementDispatcher dispatcher = new ElementDispatcher();
-        dispatcher.addRule(new TypeCompIdHandlerStrategy("Conductor", new CreateLineStringStrategy(), 106, 0));
+        dispatcher.addRule(new TypeCompIdDispatchableFilter("Conductor", new CreateLineStringStrategy(), 106, 0));
         return dispatcher;
     }
 
diff --git a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeIdHandlerStrategy.java b/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeIdHandlerStrategy.java
deleted file mode 100644
index 1a48dcb..0000000
--- a/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/TypeIdHandlerStrategy.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.ximple.eofms.jobs;
-
-import org.geotools.feature.Feature;
-import org.geotools.feature.FeatureType;
-import org.geotools.feature.IllegalAttributeException;
-import org.geotools.feature.SchemaException;
-
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-
-public class TypeIdHandlerStrategy extends AbstractFLinkageHandlerStrategy
-{
-    private String name;
-    private int tid;
-    private CreateFeatureTypeStrategy createStrategy;
-
-    public TypeIdHandlerStrategy(String fname, CreateFeatureTypeStrategy createStrategy,
-                                 int tid)
-    {
-        this.name = fname;
-        this.tid = tid;
-        this.createStrategy = createStrategy;
-    }
-
-    public boolean isDispatchable(Element element)
-    {
-        FrammeAttributeData featureLinkage = getFeatureLinkage(element);
-        return featureLinkage != null && tid == featureLinkage.getFsc();
-    }
-
-    public Feature execute(Element element)
-    {
-        try
-        {
-            FeatureType ftype = createStrategy.createFeatureElement(name);
-            return createStrategy.createFeature(ftype, element);
-        } catch (SchemaException e)
-        {
-            logger.error(e.getMessage(), e);
-        } catch (IllegalAttributeException e)
-        {
-            logger.error(e.getMessage(), e);
-        }
-        return null;
-    }
-}
diff --git a/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml b/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
new file mode 100644
index 0000000..1ef202a
--- /dev/null
+++ b/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding="big5"?>
+<digester-rules>
+  <pattern value="ElementDispatcherRules">
+    <object-create-rule classname="com.ximple.eofms.filter.ElementDispatcher"/>
+    <set-properties-rule/>
+    <pattern value="TypeFilter">
+      <object-create-rule classname="ElementDispatchableStrategy"/>
+      <set-next-rule methodname="addChart" paramtype="study.jakarta.commons.digester.ChartConfig"/>
+      <set-properties-rule/>
+      <bean-property-setter-rule pattern="legendVisible"/>
+      <bean-property-setter-rule pattern="type"/>
+      <bean-property-setter-rule pattern="width"/>
+      <bean-property-setter-rule pattern="description"/>
+    </pattern>
+  </pattern>
+</digester-rules>
\ No newline at end of file
diff --git a/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java b/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
new file mode 100644
index 0000000..8a82011
--- /dev/null
+++ b/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
@@ -0,0 +1,27 @@
+package com.ximple.eofms.filter;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.digester.Digester;
+import org.apache.commons.digester.xmlrules.DigesterLoader;
+import org.geotools.TestData;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import org.xml.sax.SAXException;
+
+public class ElementDispatcherTest
+{
+    private static final String TestRulesName = "testRules.xml";
+    private static final String TestConfigName = "testElementFilter.xml";
+
+    @Test
+    public void testLoadRules() throws IOException, SAXException
+    {
+        File rules = TestData.file(this, TestRulesName);
+        Digester digester = DigesterLoader.createDigester(rules.toURI().toURL());
+        File config = TestData.file(this, TestConfigName);
+        ElementDispatcher ed = (ElementDispatcher) digester.parse(config);
+        Assert.assertNotNull(ed);
+    }
+}
diff --git a/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml b/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml
diff --git a/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml b/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml
new file mode 100644
index 0000000..57ffc03
--- /dev/null
+++ b/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml
@@ -0,0 +1,15 @@
+<?xml version='1.0' encoding="big5"?>
+<digester-rules>
+  <pattern value="ElementDispatcherRules">
+    <object-create-rule classname="com.ximple.eofms.filter.ElementDispatcher"/>
+    <set-properties-rule/>
+    <pattern value="TypeFilter">
+      <object-create-rule classname="com.ximple.eofms.filter.TypeIdDispatchableFilter"/>
+      <set-next-rule methodname="addRule" paramtype="com.ximple.eofms.filter.ElementDispatchableFilter"/>
+      <set-properties-rule/>
+      <bean-property-setter-rule pattern="name"/>
+      <bean-property-setter-rule pattern="id"/>
+      <bean-property-setter-rule pattern="description"/>
+    </pattern>
+  </pattern>
+</digester-rules>
\ No newline at end of file

--
Gitblit v0.0.0-SNAPSHOT