sascha@305: package de.intevation.artifactdatabase.db;
sascha@305:
sascha@305: import java.util.Properties;
sascha@305:
sascha@305: import java.io.IOException;
sascha@305: import java.io.InputStream;
sascha@305:
sascha@305: import org.apache.log4j.Logger;
sascha@305:
sascha@305: public class SQL {
sascha@305:
sascha@305: private static Logger logger = Logger.getLogger(SQL.class);
sascha@305:
sascha@305: protected Properties statements;
sascha@305:
sascha@305: public SQL() {
sascha@305: }
sascha@305:
sascha@305: public SQL(String driver) {
sascha@305: this(SQL.class, driver);
sascha@305: }
sascha@305:
sascha@305: public SQL(Class clazz, String driver) {
sascha@305: this(clazz, "/sql", driver);
sascha@305: }
sascha@305:
sascha@305: public SQL(Class clazz, String resourcePath, String driver) {
sascha@305: }
sascha@305:
sascha@305: public static final String driverToProperties(String driver) {
sascha@305: return driver.replace('.', '-').toLowerCase() + ".properties";
sascha@305: }
sascha@305:
sascha@305: /**
sascha@305: * Returns key/value pairs of SQL statements for the used database
sascha@305: * backend.
sascha@305: * The concrete set of SQL statements is determined by the
sascha@305: * used JDBC database driver which is configured in conf.xml.
sascha@305: * The class name of the driver is transformed by replacing
sascha@305: * all '.' with '_' and lower case the resulting string.
sascha@305: * The transformed string is used to load a properties file
sascha@305: * in '/sql/' which should contain the statements.
sascha@305: * Example:
sascha@305: * org.postgresql.Driver
results in loading of
sascha@305: * /sql/org-postgresql-driver.properties
.
sascha@305: * @return The key/value pairs of SQL statements.
sascha@305: */
sascha@305: protected Properties loadStatements(
sascha@305: Class clazz,
sascha@305: String resourcePath,
sascha@305: String driver
sascha@305: ) {
sascha@305: Properties properties = new Properties();
sascha@305:
sascha@305: String resDriver = driverToProperties(driver);
sascha@305:
sascha@305: InputStream in = null;
sascha@305: try {
sascha@305: String res = resourcePath + "/" + resDriver;
sascha@305:
sascha@305: in = clazz.getResourceAsStream(res);
sascha@305:
sascha@305: if (in == null) {
sascha@305: logger.warn("No SQL file for driver '" + driver + "' found.");
sascha@305: resDriver = driverToProperties(DBConnection.DEFAULT_DRIVER);
sascha@305: res = resourcePath + "/" + resDriver;
sascha@305:
sascha@305: in = clazz.getResourceAsStream(res);
sascha@305: if (in == null) {
sascha@305: logger.error("No SQL file for driver '" +
sascha@305: DBConnection.DEFAULT_DRIVER + "' found.");
sascha@305: }
sascha@305: }
sascha@305:
sascha@305: if (in != null) {
sascha@305: properties.load(in);
sascha@305: }
sascha@305: }
sascha@305: catch (IOException ioe) {
sascha@305: logger.error(ioe);
sascha@305: }
sascha@305:
sascha@305: return properties;
sascha@305: }
sascha@305:
sascha@305: public String get(String key) {
sascha@305: return statements.getProperty(key);
sascha@305: }
sascha@305: }
sascha@305: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :