diff etl/src/main/java/org/dive4elements/river/etl/db/Statements.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-aft/src/main/java/org/dive4elements/river/etl/db/Statements.java@9438e9259213
children 8bd9b551456c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etl/src/main/java/org/dive4elements/river/etl/db/Statements.java	Thu Apr 25 15:23:37 2013 +0200
@@ -0,0 +1,124 @@
+package org.dive4elements.river.etl.db;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+
+public class Statements
+{
+    private static Logger log = Logger.getLogger(Statements.class);
+
+    public static final String RESOURCE_PATH = "/sql/";
+    public static final String COMMON_PROPERTIES = "-common.properties";
+
+    protected String type;
+    protected String driver;
+
+    protected Map<String, SymbolicStatement> statements;
+
+    public Statements(String type, String driver) {
+        this.type   = type;
+        this.driver = driver;
+    }
+
+    public SymbolicStatement getStatement(String key) {
+        return getStatements().get(key);
+    }
+
+    public Map<String, SymbolicStatement> getStatements() {
+        if (statements == null) {
+            statements = loadStatements();
+        }
+        return statements;
+    }
+
+    protected Map<String, SymbolicStatement> loadStatements() {
+        Map<String, SymbolicStatement> statements =
+            new HashMap<String, SymbolicStatement>();
+
+        Properties properties = loadProperties();
+
+        for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
+            String key = (String)e.nextElement();
+            String value = properties.getProperty(key);
+            SymbolicStatement symbolic = new SymbolicStatement(value);
+            statements.put(key, symbolic);
+        }
+
+        return statements;
+    }
+
+    protected String driverToProperties() {
+        return
+            type + "-" +
+            driver.replace('.', '-').toLowerCase() + ".properties";
+    }
+
+    protected Properties loadCommon() {
+        Properties common = new Properties();
+
+        String path = RESOURCE_PATH + type + COMMON_PROPERTIES;
+
+        InputStream in = Statements.class.getResourceAsStream(path);
+
+        if (in != null) {
+            try {
+                common.load(in);
+            }
+            catch (IOException ioe) {
+                log.error("cannot load defaults: " + path, ioe);
+            }
+            finally {
+                try {
+                    in.close();
+                }
+                catch (IOException ioe) {
+                }
+            }
+        }
+        else {
+            log.warn("cannot find: " + path);
+        }
+
+        return common;
+    }
+
+    protected Properties loadProperties() {
+
+        Properties common = loadCommon();
+
+        Properties properties = new Properties(common);
+
+        String path = RESOURCE_PATH + driverToProperties();
+
+        InputStream in = Statements.class.getResourceAsStream(path);
+
+        if (in != null) {
+            try {
+                properties.load(in);
+            }
+            catch (IOException ioe) {
+                log.error("cannot load statements: " + path, ioe);
+            }
+            finally {
+                try {
+                    in.close();
+                }
+                catch (IOException ioe) {
+                }
+            }
+        }
+        else {
+            log.warn("cannot find: " + path);
+        }
+
+        return properties;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org