teichmann@5841: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5841: * Software engineering by Intevation GmbH teichmann@5841: * teichmann@5991: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5841: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5991: * documentation coming with Dive4Elements River for details. teichmann@5841: */ teichmann@5841: teichmann@5826: package org.dive4elements.river.etl.aft; sascha@4073: teichmann@5826: import org.dive4elements.river.etl.db.ConnectedStatements; teichmann@4772: teichmann@4772: import java.sql.ResultSet; teichmann@4772: import java.sql.SQLException; teichmann@4772: teichmann@4772: import java.util.ArrayList; sascha@4075: import java.util.List; sascha@4075: sascha@4075: import org.apache.log4j.Logger; sascha@4073: sascha@4073: public class Rivers sascha@4073: { sascha@4075: private static Logger log = Logger.getLogger(Rivers.class); sascha@4073: sascha@4075: public Rivers() { sascha@4073: } sascha@4073: teichmann@6903: private static List findFLYSRivers( teichmann@6903: List flysRivers, teichmann@6903: String needle teichmann@6903: ) { teichmann@6903: List rivers = new ArrayList(); teichmann@6903: teichmann@6903: needle = needle.toLowerCase(); teichmann@6903: teichmann@7006: for (River river: flysRivers) { teichmann@6903: String name = river.getName().toLowerCase(); teichmann@6903: if (name.contains(needle)) { teichmann@6903: rivers.add(river); teichmann@6903: } teichmann@6903: } teichmann@6903: teichmann@6903: return rivers; teichmann@6903: } teichmann@6903: sascha@4094: public boolean sync(SyncContext context) throws SQLException { sascha@4077: sascha@4075: log.info("sync: rivers"); sascha@4073: sascha@4077: ConnectedStatements flysStatements = context.getFlysStatements(); sascha@4077: ConnectedStatements aftStatements = context.getAftStatements(); sascha@4077: teichmann@6903: List flysRivers = new ArrayList(); sascha@4075: sascha@4075: ResultSet flysRs = flysStatements teichmann@4753: .getStatement("select.rivers").executeQuery(); sascha@4075: teichmann@4753: try { teichmann@4753: while (flysRs.next()) { teichmann@4753: int id = flysRs.getInt("id"); teichmann@4753: String name = flysRs.getString("name"); teichmann@4753: double from = flysRs.getDouble("min_km"); teichmann@4753: double to = flysRs.getDouble("max_km"); teichmann@6903: flysRivers.add(new River(id, name, from, to)); teichmann@4753: } sascha@4075: } teichmann@4753: finally { teichmann@4753: flysRs.close(); teichmann@4753: } sascha@4075: sascha@4075: List commonRivers = new ArrayList(); sascha@4075: sascha@4075: ResultSet aftRs = aftStatements sascha@4075: .getStatement("select.gewaesser").executeQuery(); sascha@4075: teichmann@4753: try { teichmann@4753: while (aftRs.next()) { teichmann@4753: String name = aftRs.getString("NAME"); teichmann@6903: int id2 = aftRs.getInt("GEWAESSER_NR"); teichmann@6903: for (River river: findFLYSRivers(flysRivers, name)) { teichmann@4753: river.setId2(id2); teichmann@4753: commonRivers.add(river); teichmann@4753: } sascha@4075: } sascha@4075: } teichmann@4753: finally { teichmann@4753: aftRs.close(); teichmann@4753: } sascha@4075: sascha@4094: boolean modified = false; sascha@4094: teichmann@7006: if (log.isDebugEnabled()) { teichmann@7006: log.debug("Rivers found in FLYS and AFT:"); teichmann@7006: for (River river: commonRivers) { teichmann@7006: log.debug(" " + river.getName()); teichmann@7006: } teichmann@7006: log.debug("---"); teichmann@7006: } teichmann@7006: sascha@4075: for (River river: commonRivers) { sascha@4094: modified |= river.sync(context); sascha@4075: } sascha@4094: sascha@4094: return modified; sascha@4073: } sascha@4073: } sascha@4073: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :