Mercurial > dive4elements > river
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);