annotate etl/src/main/java/org/dive4elements/river/etl/aft/Rivers.java @ 7006:5fe8c64b48d4

Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
author Sascha L. Teichmann <teichmann@intevation.de>
date Fri, 13 Sep 2013 12:02:40 +0200
parents b3e2abe359d8
children 0a5239a1e46e
rev   line source
5841
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5991
6f80d5f375fd Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5841
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5841
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5991
6f80d5f375fd Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5841
diff changeset
6 * documentation coming with Dive4Elements River for details.
5841
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
8bd9b551456c Added header to Java files in ETL process.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5826
9438e9259213 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5825
diff changeset
9 package org.dive4elements.river.etl.aft;
4073
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
5826
9438e9259213 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5825
diff changeset
11 import org.dive4elements.river.etl.db.ConnectedStatements;
4772
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4753
diff changeset
12
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4753
diff changeset
13 import java.sql.ResultSet;
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4753
diff changeset
14 import java.sql.SQLException;
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4753
diff changeset
15
f939e1e6cfa4 Sorted imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4753
diff changeset
16 import java.util.ArrayList;
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
17 import java.util.List;
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
18
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
19 import org.apache.log4j.Logger;
4073
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 public class Rivers
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 {
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
23 private static Logger log = Logger.getLogger(Rivers.class);
4073
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
25 public Rivers() {
4073
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 }
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27
6903
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
28 private static List<River> findFLYSRivers(
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
29 List<River> flysRivers,
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
30 String needle
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
31 ) {
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
32 List<River> rivers = new ArrayList<River>();
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
33
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
34 needle = needle.toLowerCase();
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
35
7006
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
36 for (River river: flysRivers) {
6903
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
37 String name = river.getName().toLowerCase();
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
38 if (name.contains(needle)) {
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
39 rivers.add(river);
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
40 }
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
41 }
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
42
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
43 return rivers;
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
44 }
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
45
4094
b20b710aa86f Bubble up modifications up to main().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4083
diff changeset
46 public boolean sync(SyncContext context) throws SQLException {
4077
97de7a552b79 Load DIPS XML
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
47
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
48 log.info("sync: rivers");
4073
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49
4077
97de7a552b79 Load DIPS XML
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
50 ConnectedStatements flysStatements = context.getFlysStatements();
97de7a552b79 Load DIPS XML
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
51 ConnectedStatements aftStatements = context.getAftStatements();
97de7a552b79 Load DIPS XML
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
52
6903
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
53 List<River> flysRivers = new ArrayList<River>();
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
54
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
55 ResultSet flysRs = flysStatements
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
56 .getStatement("select.rivers").executeQuery();
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
57
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
58 try {
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
59 while (flysRs.next()) {
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
60 int id = flysRs.getInt("id");
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
61 String name = flysRs.getString("name");
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
62 double from = flysRs.getDouble("min_km");
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
63 double to = flysRs.getDouble("max_km");
6903
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
64 flysRivers.add(new River(id, name, from, to));
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
65 }
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
66 }
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
67 finally {
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
68 flysRs.close();
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
69 }
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
70
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
71 List<River> commonRivers = new ArrayList<River>();
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
72
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
73 ResultSet aftRs = aftStatements
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
74 .getStatement("select.gewaesser").executeQuery();
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
75
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
76 try {
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
77 while (aftRs.next()) {
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
78 String name = aftRs.getString("NAME");
6903
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
79 int id2 = aftRs.getInt("GEWAESSER_NR");
b3e2abe359d8 ETL: Take care of the fact that one river in AFT/SGM may correspond to N rivers in FLYS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5991
diff changeset
80 for (River river: findFLYSRivers(flysRivers, name)) {
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
81 river.setId2(id2);
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
82 commonRivers.add(river);
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
83 }
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
84 }
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
85 }
4753
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
86 finally {
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
87 aftRs.close();
a310aceb2e51 Fetch calculation range (Berechnungsstrecke) for FLYS rivers, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4094
diff changeset
88 }
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
89
4094
b20b710aa86f Bubble up modifications up to main().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4083
diff changeset
90 boolean modified = false;
b20b710aa86f Bubble up modifications up to main().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4083
diff changeset
91
7006
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
92 if (log.isDebugEnabled()) {
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
93 log.debug("Rivers found in FLYS and AFT:");
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
94 for (River river: commonRivers) {
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
95 log.debug(" " + river.getName());
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
96 }
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
97 log.debug("---");
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
98 }
5fe8c64b48d4 Fix for flys/issue1479: Really iterate over the FLYS river not over empty list.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6903
diff changeset
99
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
100 for (River river: commonRivers) {
4094
b20b710aa86f Bubble up modifications up to main().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4083
diff changeset
101 modified |= river.sync(context);
4075
dbd0b3b1b8b8 Sync each river.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4073
diff changeset
102 }
4094
b20b710aa86f Bubble up modifications up to main().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4083
diff changeset
103
b20b710aa86f Bubble up modifications up to main().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4083
diff changeset
104 return modified;
4073
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 }
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 }
2c70fae83d0c start syncing at river level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org