sascha@4075: package de.intevation.aft; sascha@4075: sascha@4078: import java.util.Map; sascha@4078: import java.util.HashMap; sascha@4078: sascha@4076: import java.sql.ResultSet; sascha@4075: import java.sql.SQLException; sascha@4075: sascha@4075: import org.apache.log4j.Logger; sascha@4075: sascha@4078: import org.w3c.dom.Document; sascha@4078: import org.w3c.dom.NodeList; sascha@4078: import org.w3c.dom.Element; sascha@4078: sascha@4075: import de.intevation.db.ConnectedStatements; sascha@4075: sascha@4075: public class River sascha@4075: extends IdPair sascha@4075: { sascha@4075: private static Logger log = Logger.getLogger(River.class); sascha@4075: sascha@4075: protected String name; sascha@4075: sascha@4075: public River() { sascha@4075: } sascha@4075: sascha@4075: public River(int id1, int id2, String name) { sascha@4075: super(id1, id2); sascha@4075: this.name = name; sascha@4075: } sascha@4075: sascha@4075: public String getName() { sascha@4075: return name; sascha@4075: } sascha@4075: sascha@4079: public static Long numberToLong(String s) { sascha@4082: try { sascha@4082: return Long.valueOf(s.trim()); sascha@4082: } sascha@4082: catch (NumberFormatException nfe) { sascha@4082: } sascha@4082: return null; sascha@4079: } sascha@4079: sascha@4079: public static Map indexByNumber(Document document) { sascha@4079: Map map = new HashMap(); sascha@4078: NodeList nodes = document.getElementsByTagName("PEGELSTATION"); sascha@4078: for (int i = nodes.getLength()-1; i >= 0; --i) { sascha@4078: Element element = (Element)nodes.item(i); sascha@4082: String numberString = element.getAttribute("NUMMER"); sascha@4082: Long number = numberToLong(numberString); sascha@4079: if (number != null) { sascha@4082: DIPSGauge newG = new DIPSGauge(element); sascha@4082: DIPSGauge oldG = map.put(number, newG); sascha@4082: if (oldG != null) { sascha@4082: log.warn("DIPS: '" + newG.getName() + sascha@4082: "' collides with '" + oldG.getName() + sascha@4082: "' on gauge number " + number + "."); sascha@4082: } sascha@4082: } sascha@4082: else { sascha@4082: log.warn("DIPS: gauge '" + element.getAttribute("NAME") + sascha@4082: "' has invalid gauge number '" + numberString + "'"); sascha@4079: } sascha@4078: } sascha@4078: return map; sascha@4078: } sascha@4078: sascha@4077: public void sync(SyncContext context) throws SQLException { sascha@4075: log.info("sync river: " + this); sascha@4077: sascha@4081: Map dipsGauges = indexByNumber(context.getDips()); sascha@4081: sascha@4077: ConnectedStatements flysStatements = context.getFlysStatements(); sascha@4077: ConnectedStatements aftStatements = context.getAftStatements(); sascha@4077: sascha@4076: ResultSet messstellenRs = aftStatements sascha@4076: .getStatement("select.messstelle") sascha@4076: .clearParameters() sascha@4076: .setInt("GEWAESSER_NR", id2).executeQuery(); sascha@4076: sascha@4076: while (messstellenRs.next()) { sascha@4076: String name = messstellenRs.getString("NAME"); sascha@4076: String num = messstellenRs.getString("MESSSTELLE_NR"); sascha@4081: Long number = numberToLong(num); sascha@4081: if (number == null) { sascha@4081: log.warn("Invalid MESSSTELLE_NR for MESSSTELLE '"+name+"'"); sascha@4081: continue; sascha@4081: } sascha@4081: DIPSGauge dipsGauge = dipsGauges.get(number); sascha@4081: if (dipsGauges == null) { sascha@4081: log.warn("MESSSTELLE '" + name + "' not found in DIPS."); sascha@4081: continue; sascha@4081: } sascha@4076: } sascha@4076: sascha@4076: messstellenRs.close(); sascha@4076: sascha@4076: ResultSet gaugesRs = flysStatements sascha@4076: .getStatement("select.gauges") sascha@4076: .clearParameters() sascha@4076: .setInt("river_id", id1).executeQuery(); sascha@4076: sascha@4076: while (gaugesRs.next()) { sascha@4076: int gaugeId = gaugesRs.getInt("id"); sascha@4076: String name = gaugesRs.getString("name"); sascha@4076: } sascha@4076: sascha@4076: gaugesRs.close(); sascha@4079: sascha@4075: } sascha@4075: sascha@4075: public String toString() { sascha@4075: return "[River: name=" + name + ", " + super.toString() + "]"; sascha@4075: } sascha@4075: sascha@4075: } sascha@4075: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :