From 44114c9140a99d2c506000a345cfbca74b2ee085 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Thu, 28 Aug 2008 19:38:54 +0800
Subject: [PATCH] update for EOFM-156

---
 xdgnjobs/pom.xml                                                             |    1 
 xdgnjobs/ximple-elmparser/src/main/java/com/ximple/eofms/XElementParser.java |  214 +++++++++++++++++++++++
 .gitattributes                                                               |    2 
 xdgnjobs/ximple-elmparser/pom.xml                                            |  300 +++++++++++++++++++++++++++++++++
 4 files changed, 517 insertions(+), 0 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 0a929a3..76a0fa1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -41,6 +41,8 @@
 xdgnjobs/ximple-dgnio/src/test/resources/com/ximple/io/dgn7/test-data/HV88491_0888888.dgn -text
 xdgnjobs/ximple-dgnio/src/test/resources/com/ximple/io/dgn7/test-data/HV88494_0.dgn -text
 xdgnjobs/ximple-dgnio/src/test/resources/com/ximple/io/dgn7/test-data/testHV.dgn -text
+xdgnjobs/ximple-elmparser/pom.xml svneol=native#text/xml
+xdgnjobs/ximple-elmparser/src/main/java/com/ximple/eofms/XElementParser.java svneol=native#text/plain
 xdgnjobs/ximple-jobcarrier/pom.xml svneol=native#text/xml
 xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobCarrier.java svneol=native#text/plain
 xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobWizard.java svneol=native#text/plain
diff --git a/xdgnjobs/pom.xml b/xdgnjobs/pom.xml
index 3ed4eed..dfff2ad 100644
--- a/xdgnjobs/pom.xml
+++ b/xdgnjobs/pom.xml
@@ -765,5 +765,6 @@
     <module>ximple-dgnio</module>
     <module>ximple-spatialjob</module>
     <module>ximple-jobcarrier</module>
+    <module>ximple-elmparser</module>
   </modules>
 </project>
\ No newline at end of file
diff --git a/xdgnjobs/ximple-elmparser/pom.xml b/xdgnjobs/ximple-elmparser/pom.xml
new file mode 100644
index 0000000..b3bd6c1
--- /dev/null
+++ b/xdgnjobs/ximple-elmparser/pom.xml
@@ -0,0 +1,300 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+
+  <parent>
+    <groupId>com.ximple.eofms</groupId>
+    <artifactId>ximple-dgnjobs</artifactId>
+    <version>0.9.0</version>
+  </parent>
+
+
+  <groupId>com.ximple.eofms</groupId>
+  <artifactId>ximple-elmparser</artifactId>
+  <version>0.9.0</version>
+  <packaging>jar</packaging>
+  <name>ximple-elmparser</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <xdgnio.version>0.9.0</xdgnio.version>
+  </properties>
+
+  <scm>
+    <connection>
+      scm:svn:http://www.ximple.com.tw/svn/xeofms/xspatialjob/truck/
+    </connection>
+    <url>http://www.ximple.com.tw/svn/xeofms/xspatialjob/truck/</url>
+  </scm>
+
+  <description>
+    Ximple Element Parser
+  </description>
+
+  <organization>
+    <name>Ximple</name>
+    <url>http://www.ximple.com.tw</url>
+  </organization>
+
+  <inceptionYear>2008</inceptionYear>
+
+  <developers>
+    <developer>
+      <name>Kuo-Feng Kao</name>
+      <id>ulysseskao</id>
+      <email>ulysseskao@ximple.com.tw</email>
+      <organization>Ximple</organization>
+      <roles>
+        <role>Java Developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <contributors>
+  </contributors>
+
+  <!-- =========================================================== -->
+  <!--     Dependencies to be inherited by all modules.            -->
+  <!-- =========================================================== -->
+  <dependencies>
+    <dependency>
+      <artifactId>quartz</artifactId>
+      <groupId>opensymphony</groupId>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.transaction</groupId>
+      <artifactId>jta</artifactId>
+      <version>1.0.1B</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-shapefile</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-sample-data</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-data</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-jdbc</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-postgis</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-oracle-spatial</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-mysql</artifactId>
+    </dependency>
+
+    <!-- because main and sample-data depend on referencing we need a tie breaker -->
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt2-referencing</artifactId>
+    </dependency>
+
+    <!-- We need this to make the referencing module useful -->
+    <dependency>
+      <artifactId>gt2-epsg-hsql</artifactId>
+      <groupId>org.geotools</groupId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <artifactId>jdom</artifactId>
+      <groupId>jdom</groupId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.velocity</groupId>
+      <artifactId>velocity</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+    </dependency>
+
+    <!-- ORACLE -->
+    <dependency>
+      <groupId>com.oracle</groupId>
+      <artifactId>ojdbc5</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.oracle</groupId>
+      <artifactId>ojdbc5</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.oracle</groupId>
+      <artifactId>sdoapi</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.oracle</groupId>
+      <artifactId>sdotype</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.oracle</groupId>
+      <artifactId>sdoutl</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>postgresql</groupId>
+      <artifactId>postgresql</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.postgis</groupId>
+      <artifactId>postgis-driver</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+    </dependency>
+
+    <!-- AWL -->
+    <dependency>
+      <groupId>org.awl</groupId>
+      <artifactId>awl</artifactId>
+    </dependency>
+
+    <!-- Ximple Library -->
+    <dependency>
+      <artifactId>ximple-dgnio</artifactId>
+      <groupId>com.ximple.eofms</groupId>
+      <version>${xdgnio.version}</version>
+    </dependency>
+    <dependency>
+      <artifactId>ximple-spatialjob</artifactId>
+      <groupId>com.ximple.eofms</groupId>
+      <version>${xdgnio.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <!-- ======================================================= -->
+      <!--     JAR packaging.                                      -->
+      <!-- ======================================================= -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <mainClass>com.ximple.eofms.XQuartzJobCarrier</mainClass>
+              <addClasspath>true</addClasspath>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+      <!-- ======================================================= -->
+      <!--     exec jar.                                           -->
+      <!-- ======================================================= -->
+      <plugin>
+        <!--
+           Use maven from the command line:
+             mvn exec:java -Dexec.mainClass="com.ximple.eofms.XQuartzJobCarrier"
+        -->
+        <artifactId>exec-maven-plugin</artifactId>
+        <groupId>org.codehaus.mojo</groupId>
+        <!--
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+        -->
+        <configuration>
+          <mainClass>com.ximple.eofms.XQuartzJobCarrier</mainClass>
+          <!--
+          <commandlineArgs>-wizard</commandlineArgs>
+          -->
+        </configuration>
+        <!--
+        <dependencies>
+          <dependency>
+             <groupId>com.ximple.eofms</groupId>
+             <artifactId>ximple-jobcarrier</artifactId>
+             <version>0.0.1</version>
+             <type>jar</type>
+           </dependency>
+        </dependencies>
+        -->
+      </plugin>
+      <plugin>
+        <groupId>com.ximple.eofms.maven</groupId>
+        <artifactId>ximple-jar-collector</artifactId>
+        <version>${project.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>collect</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>native2ascii-maven-plugin</artifactId>
+        <version>1.0-alpha-1</version>
+        <configuration>
+          <dest>target/classes/com/ximple/eofms</dest>
+          <src>src/main/resources/com/ximple/eofms</src>
+        </configuration>
+        <executions>
+          <execution>
+            <id>native2ascii-utf8</id>
+            <goals>
+              <goal>native2ascii</goal>
+            </goals>
+            <configuration>
+              <encoding>UTF8</encoding>
+              <includes>XQuartzJobWizard_zh*.properties</includes>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <resources>
+      <resource>
+        <directory>src/main/resources/com/ximple/eofms</directory>
+        <excludes>
+          <exclude>XQuartzJobWizard_zh*.properties</exclude>
+        </excludes>
+        <filtering>true</filtering>
+      </resource>
+      <resource>
+        <directory>src/main/resources</directory>
+        <includes>
+          <include>log4j.properties</include>
+          <include>quartz.properties</include>
+          <include>quartz_jobs.xml</include>
+        </includes>
+        <!--
+        <excludes>
+          <exclude>XQuartzJobWizard*.properties</exclude>
+          <exclude>quartz_jobs.xml</exclude>
+          <exclude>quartz_jobs_shapefiles.xml</exclude>
+        </excludes>
+        -->
+        <filtering>false</filtering>
+      </resource>
+    </resources>
+  </build>
+
+</project>
diff --git a/xdgnjobs/ximple-elmparser/src/main/java/com/ximple/eofms/XElementParser.java b/xdgnjobs/ximple-elmparser/src/main/java/com/ximple/eofms/XElementParser.java
new file mode 100644
index 0000000..722497f
--- /dev/null
+++ b/xdgnjobs/ximple-elmparser/src/main/java/com/ximple/eofms/XElementParser.java
@@ -0,0 +1,214 @@
+package com.ximple.eofms;
+
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+import java.nio.channels.FileChannel;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.digester.Digester;
+import org.apache.commons.digester.xmlrules.DigesterLoader;
+import org.apache.commons.collections.map.MultiValueMap;
+import org.xml.sax.SAXException;
+import org.geotools.feature.Feature;
+
+import com.vividsolutions.jts.geom.GeometryFactory;
+
+import com.ximple.io.dgn7.Dgn7fileReader;
+import com.ximple.io.dgn7.Lock;
+import com.ximple.io.dgn7.Dgn7fileException;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.ElementType;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.jobs.context.postgis.FeatureDgnConvertPostGISJobContext;
+
+public class XElementParser implements Runnable
+{
+    static Log logger = LogFactory.getLog(XElementParser.class);
+    static final GeometryFactory geometryFactory = new GeometryFactory();
+
+    private HashMap<String, String> dataConfig;
+    private ElementDispatcher elementDispatcher;
+    private MultiValueMap featuresContext = new MultiValueMap();
+
+    public static void main(String[] args)
+    {
+        XElementParser parser = new XElementParser();
+        parser.run();
+    }
+
+    public XElementParser()
+    {
+        initializeDataConfig();
+    }
+
+    private void initializeDataConfig()
+    {
+        dataConfig = new HashMap<String, String>();
+        dataConfig.put("DATAPATH", "G:\\Temp\\JobData\\nstpc\\elmout");
+        
+        elementDispatcher = createElementDispatcher();
+    }
+
+    private ElementDispatcher createElementDispatcher()
+    {
+        try
+        {
+            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
+            assert rulesURL != null;
+            Digester digester = DigesterLoader.createDigester(rulesURL);
+            URL filterURL;
+
+            filterURL = FeatureDgnConvertPostGISJobContext.class.getResource("/conf/DefaultConvertShpFilter.xml");
+
+            assert filterURL != null;
+            return (ElementDispatcher) digester.parse(filterURL);
+        } catch (UnsupportedEncodingException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        } catch (MalformedURLException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        } catch (IOException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        } catch (SAXException e)
+        {
+            logger.info(e.getMessage(), e);
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    public void run()
+    {
+        File dataDir = new File(dataConfig.get("DATAPATH"));
+        if ((!dataDir.exists()) || (!dataDir.isDirectory()))
+        {
+            return;
+        }
+
+        File[] dataFiles = dataDir.listFiles(new FilenameFilter() {
+            public boolean accept(File dir, String name)
+            {
+                return name.toLowerCase().endsWith(".dgn");
+            }
+        });
+
+        for (File dataFile : dataFiles)
+        {
+            try
+            {
+                FileInputStream fs = new FileInputStream(dataFile);
+                FileChannel fc = fs.getChannel();
+                Dgn7fileReader reader = new Dgn7fileReader(fc, new Lock());
+                int count = 0;
+                Element lastComplex = null;
+                while (reader.hasNext())
+                {
+                    Dgn7fileReader.Record record = reader.nextElement();
+                    if (record.element() != null)
+                    {
+                        Element element = (Element) record.element();
+                        ElementType type = element.getElementType();
+
+                        if ((!type.isComplexElement()) && (!element.isComponentElement()))
+                        {
+                            if (lastComplex != null)
+                            {
+                                processFeatureElement(lastComplex);
+                                lastComplex = null;
+                            }
+
+                            processFeatureElement(element);
+                        } else if (element.isComponentElement())
+                        {
+                            if (lastComplex != null)
+                            {
+                                ((ComplexElement) lastComplex).add(element);
+                            }
+                        } else if (type.isComplexElement())
+                        {
+                            if (lastComplex != null)
+                            {
+                                processFeatureElement(lastComplex);
+                            }
+                            lastComplex = element;
+                        }
+                    }
+                    count++;
+                }
+
+                if (lastComplex != null)
+                {
+                    processFeatureElement(lastComplex);
+                }
+                logger.debug("ElementRecord Count=" + count);
+
+            } catch (Dgn7fileException e)
+            {
+                logger.warn(e.getMessage(), e);
+            } catch (FileNotFoundException e)
+            {
+                logger.warn(e.getMessage(), e);
+            } catch (IOException e)
+            {
+                logger.warn(e.getMessage(), e);
+            }
+        }
+
+        postProcessFeatureContext();
+    }
+
+    private void processFeatureElement(Element element)
+    {
+        if (element == null)
+        {
+            logger.warn("Unknown Element:" + null);
+            return;
+        }
+
+        // �P�_�O�_�ũM����
+        Feature feature = elementDispatcher.execute(element);
+        if (feature == null)
+        {
+            FrammeAttributeData linkage =
+                    AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
+            logger.warn("Unknown Element:" + element.getElementType().toString() +
+                    ":type=" + element.getType() + ":lv=" + element.getLevelIndex() + ":id=" +
+                    (linkage == null ? "NULL" : (linkage.getFsc() + "|" + linkage.getComponentID())));
+            if (element instanceof ComplexElement)
+            {
+                ComplexElement complex = (ComplexElement) element;
+                logger.warn("----Complex Element size=" + complex.size());
+            }
+
+            return;
+        }
+
+        featuresContext.put(feature.getFeatureType(), feature);
+    }
+
+    private void postProcessFeatureContext()
+    {
+        if (featuresContext.size() == 0) return;
+        for (Object key : featuresContext.keySet())
+        {
+            List elements = (List) featuresContext.get(key);
+        }
+    }
+}

--
Gitblit v0.0.0-SNAPSHOT