diff artifact-database/src/main/java/de/intevation/artifactdatabase/db/SQL.java @ 305:f33401ea2a6c

Artifact database: Refactorized the usage of dialect independent SQL to be reusable. artifacts/trunk@2412 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 28 Jul 2011 10:19:35 +0000
parents
children d96bcb40dbf9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/db/SQL.java	Thu Jul 28 10:19:35 2011 +0000
@@ -0,0 +1,90 @@
+package de.intevation.artifactdatabase.db;
+
+import java.util.Properties;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.log4j.Logger;
+
+public class SQL {
+
+    private static Logger logger = Logger.getLogger(SQL.class);
+
+    protected Properties statements;
+
+    public SQL() {
+    }
+
+    public SQL(String driver) {
+        this(SQL.class, driver);
+    }
+
+    public SQL(Class clazz, String driver) {
+        this(clazz, "/sql", driver);
+    }
+
+    public SQL(Class clazz, String resourcePath, String driver) {
+    }
+
+    public static final String driverToProperties(String driver) {
+        return driver.replace('.', '-').toLowerCase() + ".properties";
+    }
+
+    /**
+     * Returns key/value pairs of SQL statements for the used database
+     * backend.
+     * The concrete set of SQL statements is determined by the
+     * used JDBC database driver which is configured in conf.xml.
+     * The class name of the driver is transformed by replacing
+     * all '.' with '_' and lower case the resulting string.
+     * The transformed string is used to load a properties file
+     * in '/sql/' which should contain the statements.
+     * Example:<br>
+     * <code>org.postgresql.Driver</code> results in loading of
+     * <code>/sql/org-postgresql-driver.properties</code>.
+     * @return The key/value pairs of SQL statements.
+     */
+    protected Properties loadStatements(
+        Class  clazz,
+        String resourcePath,
+        String driver
+    ) { 
+        Properties properties = new Properties();
+
+        String resDriver = driverToProperties(driver);
+
+        InputStream in = null;
+        try {
+            String res = resourcePath + "/" + resDriver;
+
+            in = clazz.getResourceAsStream(res);
+
+            if (in == null) {
+                logger.warn("No SQL file for driver '" + driver + "' found.");
+                resDriver = driverToProperties(DBConnection.DEFAULT_DRIVER);
+                res = resourcePath + "/" + resDriver;
+
+                in = clazz.getResourceAsStream(res);
+                if (in == null) {
+                    logger.error("No SQL file for driver '" +
+                        DBConnection.DEFAULT_DRIVER + "' found.");
+                }
+            }
+
+            if (in != null) {
+                properties.load(in);
+            }
+        }
+        catch (IOException ioe) {
+            logger.error(ioe);
+        }
+
+        return properties;
+    }
+
+    public String get(String key) {
+        return statements.getProperty(key);
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org