# HG changeset patch # User Sascha L. Teichmann # Date 1323783703 0 # Node ID 2c70fae83d0c30dee2f35056ef27bf70b66858aa # Parent 88f801888d85ec21af43408f9aeb8db0ef261bad start syncing at river level. flys-aft/trunk@3406 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 88f801888d85 -r 2c70fae83d0c flys-aft/ChangeLog --- a/flys-aft/ChangeLog Tue Dec 13 12:33:36 2011 +0000 +++ b/flys-aft/ChangeLog Tue Dec 13 13:41:43 2011 +0000 @@ -1,3 +1,20 @@ +2011-12-13 Sascha L. Teichmann + + * src/main/java/de/intevation/db/ConnectionBuilder.java: Added + access to Statements. + + * src/main/java/de/intevation/db/SymbolicStatement.java: New. + Made top level from inner class of Statements. + + * src/main/java/de/intevation/db/Statements.java: Moved SymbolicStatement + out to top level class. + + * src/main/java/de/intevation/aft/Rivers.java: Syncing beginns at + river level. + + * src/main/java/de/intevation/aft/Sync.java: Start the syncing with + the rivers of both dbs. + 2011-12-13 Sascha L. Teichmann * doc/conf.xml: Adjusted structure to be more generic. diff -r 88f801888d85 -r 2c70fae83d0c flys-aft/src/main/java/de/intevation/aft/Rivers.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-aft/src/main/java/de/intevation/aft/Rivers.java Tue Dec 13 13:41:43 2011 +0000 @@ -0,0 +1,27 @@ +package de.intevation.aft; + +import java.sql.SQLException; + +import de.intevation.db.ConnectionBuilder; + +public class Rivers +{ + protected ConnectionBuilder aftConnectionBuilder; + protected ConnectionBuilder flysConnectionBuilder; + + public Rivers( + ConnectionBuilder aftConnectionBuilder, + ConnectionBuilder flysConnectionBuilder + ) { + this.aftConnectionBuilder = aftConnectionBuilder; + this.flysConnectionBuilder = flysConnectionBuilder; + } + + public void sync() throws SQLException { + } + + public void close() { + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : + diff -r 88f801888d85 -r 2c70fae83d0c flys-aft/src/main/java/de/intevation/aft/Sync.java --- a/flys-aft/src/main/java/de/intevation/aft/Sync.java Tue Dec 13 12:33:36 2011 +0000 +++ b/flys-aft/src/main/java/de/intevation/aft/Sync.java Tue Dec 13 13:41:43 2011 +0000 @@ -2,6 +2,8 @@ import java.io.File; +import java.sql.SQLException; + import org.w3c.dom.Document; import de.intevation.utils.XML; @@ -32,12 +34,25 @@ System.exit(1); } + ConnectionBuilder aftConnectionBuilder = + new ConnectionBuilder(AFT, config); + ConnectionBuilder flysConnectionBuilder = new ConnectionBuilder(FLYS, config); - ConnectionBuilder aftConnectionBuilder = - new ConnectionBuilder(AFT, config); + Rivers rivers = new Rivers( + aftConnectionBuilder, + flysConnectionBuilder); + try { + rivers.sync(); + } + catch (SQLException sqle) { + System.err.println("syncing failed: " + sqle.getMessage()); + } + finally { + rivers.close(); + } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 88f801888d85 -r 2c70fae83d0c flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java --- a/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java Tue Dec 13 12:33:36 2011 +0000 +++ b/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java Tue Dec 13 13:41:43 2011 +0000 @@ -29,9 +29,12 @@ protected String password; protected String url; + protected Statements statements; + public ConnectionBuilder(String type, Document document) { this.type = type; extractCredentials(document); + statements = new Statements(type, driver != null ? driver : ""); } protected void extractCredentials(Document document) { @@ -68,5 +71,9 @@ return DriverManager.getConnection(url, user, password); } + + public SymbolicStatement getStatement(String key) { + return statements.getStatement(key); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 88f801888d85 -r 2c70fae83d0c flys-aft/src/main/java/de/intevation/db/Statements.java --- a/flys-aft/src/main/java/de/intevation/db/Statements.java Tue Dec 13 12:33:36 2011 +0000 +++ b/flys-aft/src/main/java/de/intevation/db/Statements.java Tue Dec 13 13:41:43 2011 +0000 @@ -7,154 +7,12 @@ import org.apache.log4j.Logger; -import java.util.List; -import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import java.util.Enumeration; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.PreparedStatement; -import java.sql.Timestamp; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class Statements { - public static final Pattern VAR = Pattern.compile(":([a-zA-Z0-9_]+)"); - - public static class SymbolicStatement { - - protected String statement; - protected String compiled; - protected Map> positions; - - public class Instance { - - /** TODO: Support more types. */ - - protected PreparedStatement stmnt; - - public Instance(Connection connection) throws SQLException { - stmnt = connection.prepareStatement(compiled); - } - - public void close() { - try { - stmnt.close(); - } - catch (SQLException sqle) { - log.error("cannot close statement", sqle); - } - } - - public void setInt(String key, int value) - throws SQLException - { - List pos = positions.get(key.toLowerCase()); - if (pos != null) { - for (Integer p: pos) { - stmnt.setInt(p, value); - } - } - } - - public void setString(String key, String value) - throws SQLException - { - List pos = positions.get(key.toLowerCase()); - if (pos != null) { - for (Integer p: pos) { - stmnt.setString(p, value); - } - } - } - - public void setObject(String key, Object value) - throws SQLException - { - List pos = positions.get(key.toLowerCase()); - if (pos != null) { - for (Integer p: pos) { - stmnt.setObject(p, value); - } - } - } - - public void setTimestamp(String key, Timestamp value) - throws SQLException - { - List pos = positions.get(key.toLowerCase()); - if (pos != null) { - for (Integer p: pos) { - stmnt.setTimestamp(p, value); - } - } - } - - public void setDouble(String key, int value) - throws SQLException - { - List pos = positions.get(key.toLowerCase()); - if (pos != null) { - for (Integer p: pos) { - stmnt.setDouble(p, value); - } - } - } - - public void setNull(String key, int sqlType) - throws SQLException - { - List pos = positions.get(key.toLowerCase()); - if (pos != null) { - for (Integer p: pos) { - stmnt.setNull(p, sqlType); - } - } - } - - public void set(Map map) throws SQLException { - for (Map.Entry entry: map.entrySet()) { - setObject(entry.getKey(), entry.getValue()); - } - } - - } // class Instance - - public SymbolicStatement(String statement) { - this.statement = statement; - compile(); - } - - public String getStatement() { - return statement; - } - - protected void compile() { - positions = new HashMap>(); - - StringBuffer sb = new StringBuffer(); - Matcher m = VAR.matcher(statement); - int index = 1; - while (m.find()) { - String key = m.group(1).toLowerCase(); - List list = positions.get(key); - if (list == null) { - list = new ArrayList(); - positions.put(key, list); - } - list.add(index++); - m.appendReplacement(sb, "?"); - } - m.appendTail(sb); - compiled = sb.toString(); - } - } // class SymbolicStatement - - private static Logger log = Logger.getLogger(Statements.class); public static final String RESOURCE_PATH = "/sql/"; diff -r 88f801888d85 -r 2c70fae83d0c flys-aft/src/main/java/de/intevation/db/SymbolicStatement.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-aft/src/main/java/de/intevation/db/SymbolicStatement.java Tue Dec 13 13:41:43 2011 +0000 @@ -0,0 +1,153 @@ +package de.intevation.db; + +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.PreparedStatement; +import java.sql.Timestamp; + +import org.apache.log4j.Logger; + +public class SymbolicStatement { + + private static Logger log = Logger.getLogger(SymbolicStatement.class); + + public static final Pattern VAR = Pattern.compile(":([a-zA-Z0-9_]+)"); + + protected String statement; + protected String compiled; + protected Map> positions; + + public class Instance { + + /** TODO: Support more types. */ + + protected PreparedStatement stmnt; + + public Instance(Connection connection) throws SQLException { + stmnt = connection.prepareStatement(compiled); + } + + public void close() { + try { + stmnt.close(); + } + catch (SQLException sqle) { + log.error("cannot close statement", sqle); + } + } + + public void setInt(String key, int value) + throws SQLException + { + List pos = positions.get(key.toLowerCase()); + if (pos != null) { + for (Integer p: pos) { + stmnt.setInt(p, value); + } + } + } + + public void setString(String key, String value) + throws SQLException + { + List pos = positions.get(key.toLowerCase()); + if (pos != null) { + for (Integer p: pos) { + stmnt.setString(p, value); + } + } + } + + public void setObject(String key, Object value) + throws SQLException + { + List pos = positions.get(key.toLowerCase()); + if (pos != null) { + for (Integer p: pos) { + stmnt.setObject(p, value); + } + } + } + + public void setTimestamp(String key, Timestamp value) + throws SQLException + { + List pos = positions.get(key.toLowerCase()); + if (pos != null) { + for (Integer p: pos) { + stmnt.setTimestamp(p, value); + } + } + } + + public void setDouble(String key, int value) + throws SQLException + { + List pos = positions.get(key.toLowerCase()); + if (pos != null) { + for (Integer p: pos) { + stmnt.setDouble(p, value); + } + } + } + + public void setNull(String key, int sqlType) + throws SQLException + { + List pos = positions.get(key.toLowerCase()); + if (pos != null) { + for (Integer p: pos) { + stmnt.setNull(p, sqlType); + } + } + } + + public void set(Map map) throws SQLException { + for (Map.Entry entry: map.entrySet()) { + setObject(entry.getKey(), entry.getValue()); + } + } + + public void clearParameters() throws SQLException { + stmnt.clearParameters(); + } + + } // class Instance + + public SymbolicStatement(String statement) { + this.statement = statement; + compile(); + } + + public String getStatement() { + return statement; + } + + protected void compile() { + positions = new HashMap>(); + + StringBuffer sb = new StringBuffer(); + Matcher m = VAR.matcher(statement); + int index = 1; + while (m.find()) { + String key = m.group(1).toLowerCase(); + List list = positions.get(key); + if (list == null) { + list = new ArrayList(); + positions.put(key, list); + } + list.add(index++); + m.appendReplacement(sb, "?"); + } + m.appendTail(sb); + compiled = sb.toString(); + } +} // class SymbolicStatement