changeset 4072:88f801888d85

load configuration an setup db connections. flys-aft/trunk@3401 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 13 Dec 2011 12:33:36 +0000
parents 0f5cc88a0f74
children 2c70fae83d0c
files flys-aft/ChangeLog flys-aft/doc/conf.xml flys-aft/pom.xml flys-aft/src/main/java/de/intevation/aft/Sync.java flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java flys-aft/src/main/java/de/intevation/utils/XML.java
diffstat 6 files changed, 143 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/flys-aft/ChangeLog	Tue Dec 13 10:11:23 2011 +0000
+++ b/flys-aft/ChangeLog	Tue Dec 13 12:33:36 2011 +0000
@@ -1,3 +1,17 @@
+2011-12-13	Sascha L. Teichmann	<sascha.teichmann@inteavtion.de>
+
+	* doc/conf.xml: Adjusted structure to be more generic.
+
+	* src/main/java/de/intevation/utils/XML.java: Allow namespace aware
+	  file parsing.
+
+	* src/main/java/de/intevation/db/ConnectionBuilder.java: New. Evaluate
+	  config and builds a new db connection.
+
+	* src/main/java/de/intevation/aft/Sync.java: Load config file.
+
+	* pom.xml: Added dependency to SQLite JDBC driver.
+
 2011-12-13	Sascha L. Teichmann	<sascha.teichmann@inteavtion.de>
 
 	* doc/conf.xml: New. Configuration file.
--- a/flys-aft/doc/conf.xml	Tue Dec 13 10:11:23 2011 +0000
+++ b/flys-aft/doc/conf.xml	Tue Dec 13 12:33:36 2011 +0000
@@ -1,21 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <sync>
   <!-- The FLYS side -->
-  <flys>
+  <side name="flys">
+    <db>
+      <driver>org.postgresql.Driver</driver>
+      <user>flys</user>
+      <password>flys</password>
+      <url>jdbc:postgresql://localhost:5432/flys</url>
+    </db>
+  </side>
+  <!-- The AFT side -->
+  <side name="aft">
     <db>
       <driver/>
       <user/>
       <password/>
-      <url/>
+      <url>jdbc:sqlite:/path/to/aft.db</url>
     </db>
-  </flys>
-  <!-- The AFT side -->
-  <aft>
-    <db>
-      <driver/>
-      <user/>
-      <password/>
-      <url/>
-    </db>
-  </aft>
+  </side>
 </sync>
--- a/flys-aft/pom.xml	Tue Dec 13 10:11:23 2011 +0000
+++ b/flys-aft/pom.xml	Tue Dec 13 12:33:36 2011 +0000
@@ -41,5 +41,10 @@
       <artifactId>log4j</artifactId>
       <version>1.2.14</version>
     </dependency>
+    <dependency>
+      <groupId>org.xerial</groupId>
+      <artifactId>sqlite-jdbc</artifactId>
+      <version>3.7.2</version>
+    </dependency>
   </dependencies>
 </project>
--- a/flys-aft/src/main/java/de/intevation/aft/Sync.java	Tue Dec 13 10:11:23 2011 +0000
+++ b/flys-aft/src/main/java/de/intevation/aft/Sync.java	Tue Dec 13 12:33:36 2011 +0000
@@ -1,8 +1,43 @@
 package de.intevation.aft;
 
+import java.io.File;
+
+import org.w3c.dom.Document;
+
+import de.intevation.utils.XML;
+
+import de.intevation.db.ConnectionBuilder;
+
 public class Sync
 {
+    public static final String FLYS = "flys";
+    public static final String AFT  = "aft";
+
+    public static final String CONFIG_FILE =
+        System.getProperty("config.file", "config.xml");
+
     public static void main(String [] args) {
+
+        File configFile = new File(CONFIG_FILE);
+
+        if (!configFile.isFile() || !configFile.canRead()) {
+            System.err.println("cannot read config file");
+            System.exit(1);
+        }
+
+        Document config = XML.parseDocument(configFile, Boolean.FALSE);
+
+        if (config == null) {
+            System.err.println("cannot load config");
+            System.exit(1);
+        }
+
+        ConnectionBuilder flysConnectionBuilder =
+            new ConnectionBuilder(FLYS, config);
+
+        ConnectionBuilder aftConnectionBuilder =
+            new ConnectionBuilder(AFT, config);
+
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java	Tue Dec 13 12:33:36 2011 +0000
@@ -0,0 +1,72 @@
+package de.intevation.db;
+
+import de.intevation.utils.XML;
+
+import java.util.HashMap;
+
+import org.w3c.dom.Document;
+
+import javax.xml.xpath.XPathConstants;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.DriverManager;
+
+import org.apache.log4j.Logger;
+
+public class ConnectionBuilder
+{
+    private static Logger log = Logger.getLogger(ConnectionBuilder.class);
+
+    public static final String XPATH_DRIVER   = "/sync/side[@name=$type]/db/driver/text()";
+    public static final String XPATH_USER     = "/sync/side[@name=$type]/db/user/text()";
+    public static final String XPATH_PASSWORD = "/sync/side[@name=$type]/db/password/text()";
+    public static final String XPATH_URL      = "/sync/side[@name=$type]/db/url/text()";
+
+    protected String type;
+    protected String driver;
+    protected String user;
+    protected String password;
+    protected String url;
+
+    public ConnectionBuilder(String type, Document document) {
+        this.type = type;
+        extractCredentials(document);
+    }
+
+    protected void extractCredentials(Document document) {
+        HashMap<String, String> map = new HashMap<String, String>();
+        map.put("type", type);
+
+        driver = (String)XML.xpath(
+            document, XPATH_DRIVER, XPathConstants.STRING, null, map);
+        user = (String)XML.xpath(
+            document, XPATH_USER, XPathConstants.STRING, null, map);
+        password = (String)XML.xpath(
+            document, XPATH_PASSWORD, XPathConstants.STRING, null, map);
+        url = (String)XML.xpath(
+            document, XPATH_URL, XPathConstants.STRING, null, map);
+
+        if (log.isDebugEnabled()) {
+            log.debug("driver: " + driver);
+            log.debug("user: " + user);
+            log.debug("password: *******");
+            log.debug("url: " + url);
+        }
+    }
+
+    public Connection getConnection() throws SQLException {
+
+        if (driver != null && driver.length() > 0) {
+            try {
+                Class.forName(driver);
+            }
+            catch (ClassNotFoundException cnfe) {
+                throw new SQLException(cnfe);
+            }
+        }
+
+        return DriverManager.getConnection(url, user, password);
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-aft/src/main/java/de/intevation/utils/XML.java	Tue Dec 13 10:11:23 2011 +0000
+++ b/flys-aft/src/main/java/de/intevation/utils/XML.java	Tue Dec 13 12:33:36 2011 +0000
@@ -69,10 +69,14 @@
      * during loading.
      */
     public static final Document parseDocument(File file) {
+        return parseDocument(file, Boolean.TRUE);
+    }
+
+    public static final Document parseDocument(File file, Boolean namespaceAware) {
         InputStream inputStream = null;
         try {
             inputStream = new BufferedInputStream(new FileInputStream(file));
-            return parseDocument(inputStream);
+            return parseDocument(inputStream, namespaceAware);
         }
         catch (IOException ioe) {
             log.error(ioe.getLocalizedMessage(), ioe);

http://dive4elements.wald.intevation.org