view 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 source
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