annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadData.java @ 8293:301a32bd7045 3.1.6

Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
author "Tom Gottfried <tom@intevation.de>"
date Wed, 17 Sep 2014 19:28:39 +0200
parents 5ffbf97766f7
children 69b0a71b4845
rev   line source
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
3 *
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
7 */
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
8 package org.dive4elements.river.artifacts.model.minfo;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
9
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
10 import java.io.Serializable;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
11 import java.util.ArrayList;
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
12 import java.util.Collection;
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
13 import java.util.Collections;
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
14 import java.util.Comparator;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
15 import java.util.Date;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
16 import java.util.List;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
17 import java.util.TreeMap;
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
18 import java.util.TreeSet;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
19
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
20 import org.apache.log4j.Logger;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
21
8201
4b8c5a08de04 Make it compile again.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8199
diff changeset
22 import org.dive4elements.river.backend.utils.EpsilonComparator;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
23
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
24 public class SedimentLoadData implements Serializable
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
25 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8201
diff changeset
26 private static Logger log = Logger.getLogger(SedimentLoadData.class);
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
27
8177
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
28 public static final int GF_UNKNOWN = -1;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
29 public static final int GF_COARSE = 0;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
30 public static final int GF_FINE_MIDDLE = 1;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
31 public static final int GF_SAND = 2;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
32 public static final int GF_SUSP_SAND = 3;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
33 public static final int GF_SUSP_SAND_BED = 4;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
34 public static final int GF_SUSP_SEDIMENT = 5;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
35 public static final int GF_TOTAL = 6;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
36 public static final int GF_BED_LOAD = 7;
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
37 public static final int GF_BED_LOAD_SUSP_SAND = 8;
8293
301a32bd7045 Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
"Tom Gottfried <tom@intevation.de>"
parents: 8255
diff changeset
38 public static final int GF_SUSP_LOAD = 9;
301a32bd7045 Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
"Tom Gottfried <tom@intevation.de>"
parents: 8255
diff changeset
39 public static final int GF_MAX = 9;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
40
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
41 public static final String [] GF_NAMES = {
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
42 "coarse",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
43 "fine_middle",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
44 "sand",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
45 "susp_sand",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
46 "susp_sand_bed",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
47 "suspended_sediment",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
48 "total",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
49 "bed_load",
8293
301a32bd7045 Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
"Tom Gottfried <tom@intevation.de>"
parents: 8255
diff changeset
50 "bed_load_susp_sand",
301a32bd7045 Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
"Tom Gottfried <tom@intevation.de>"
parents: 8255
diff changeset
51 "suspended_load"
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
52 };
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
53
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
54 public static final int [] MEASUREMENT_STATION_GF = {
8177
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
55 /* GF_COARSE */ Station.BED_LOAD,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
56 /* GF_FINE_MIDDLE */ Station.BED_LOAD,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
57 /* GF_SAND */ Station.BED_LOAD,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
58 /* GF_SUSP_SAND */ Station.BED_LOAD,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
59 /* GF_SUSP_SAND_BED */ Station.BED_LOAD,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
60 /* GF_SUSP_SEDIMENT */ Station.SUSPENDED,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
61 /* GF_TOTAL */ Station.BED_LOAD|Station.SUSPENDED,
aa80f9ba56a9 We have to calculate bed load plus suspended sand instead of suspended load.
Tom Gottfried <tom@intevation.de>
parents: 8140
diff changeset
62 /* GF_BED_LOAD */ Station.BED_LOAD,
8293
301a32bd7045 Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
"Tom Gottfried <tom@intevation.de>"
parents: 8255
diff changeset
63 /* GF_BED_LOAD_SUSP_SAND */ Station.BED_LOAD,
301a32bd7045 Though not yet part of the calculation, suspended load has to be optionally loadable through datacage.
"Tom Gottfried <tom@intevation.de>"
parents: 8255
diff changeset
64 /* GF_SUSP_LOAD */ Station.SUSPENDED
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
65 };
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
66
8209
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
67 public static final int measurementStationType(int grainFraction) {
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
68 return grainFraction < 0 || grainFraction >= MEASUREMENT_STATION_GF.length
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
69 ? Station.UNKNOWN
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
70 : MEASUREMENT_STATION_GF[grainFraction];
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
71 }
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
72
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
73 public static final int grainFractionIndex(String name) {
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
74 for (int i = 0; i < GF_NAMES.length; ++i) {
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
75 if (GF_NAMES[i].equals(name)) {
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
76 return i;
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
77 }
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
78 }
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
79 return GF_UNKNOWN;
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
80 }
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
81
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
82 public static final String grainFractionName(int index) {
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
83 return index >= 0 && index < GF_NAMES.length
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
84 ? GF_NAMES[index]
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
85 : "unknown";
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
86 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
87
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
88
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
89 public interface Visitor {
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
90 void visit(Station station);
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
91 }
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
92
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
93 public static class Value implements Serializable {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
94
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
95 public interface Filter {
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
96 boolean accept(Value value);
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
97 }
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
98
8047
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
99 public interface Visitor {
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
100 void visit(Value value);
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
101 }
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
102
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
103 private double value;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
104
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
105 private Load load;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
106
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
107 public Value() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
108 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
109
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
110 public Value(Load load, double value) {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
111 this.load = load;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
112 this.value = value;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
113 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
114
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
115 public double getValue() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
116 return value;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
117 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
118
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
119 public Load getLoad() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
120 return load;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
121 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
122 } // class Value
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
123
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
124
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
125 public static class Load implements Serializable {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
126
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
127 private int id;
8058
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
128 private int kind;
8239
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
129 private Integer sqTiId;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
130
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
131 private String description;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
132
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
133 private Date startTime;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
134 private Date stopTime;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
135 private Date sqStartTime;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
136 private Date sqStopTime;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
137
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
138 public Load() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
139 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
140
8058
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
141 public Load(
8237
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
142 int id,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
143 int kind,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
144 String description,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
145 Date startTime,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
146 Date stopTime,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
147 Integer sqTiId,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
148 Date sqStartTime,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
149 Date sqStopTime
8058
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
150 ) {
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
151 this.id = id;
8058
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
152 this.kind = kind;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
153 this.description = description;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
154 this.startTime = startTime;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
155 this.stopTime = stopTime;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
156 this.sqStartTime = sqStartTime;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
157 this.sqStopTime = sqStopTime;
8239
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
158 this.sqTiId = sqTiId;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
159 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
160
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
161 public int getId() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
162 return id;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
163 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
164
8239
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
165 public Integer getSQRelationTimeIntervalId() {
8237
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
166 return sqTiId;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
167 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
168
8058
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
169 public int getKind() {
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
170 return kind;
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
171 }
fbe3ba5a480e Sediment load: Fetch kind of sediment load from database to tell if it is official or not.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8050
diff changeset
172
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
173 public String getDescription() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
174 return description;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
175 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
176
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
177 public Date getStartTime() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
178 return startTime;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
179 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
180
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
181 public Date getStopTime() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
182 return stopTime;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
183 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
184
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
185 public Date getSQStartTime() {
8228
2f63c6c84540 (issue1448) Fix return values of SQ time interval accessors
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8216
diff changeset
186 return sqStartTime;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
187 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
188
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
189 public Date getSQStopTime() {
8228
2f63c6c84540 (issue1448) Fix return values of SQ time interval accessors
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8216
diff changeset
190 return sqStopTime;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
191 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
192
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
193 public boolean isEpoch() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
194 return startTime != null && stopTime != null;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
195 }
8185
76e1e9d81ce2 Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents: 8178
diff changeset
196 } // class Load
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
197
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
198 public static class Station implements Serializable {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
199
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
200 public static final int UNKNOWN = 0;
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
201 public static final int BED_LOAD = 1;
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
202 public static final int SUSPENDED = 2;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
203
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
204 private double station;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
205
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
206 private int type;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
207
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
208 private List<List<Value>> grainFractions;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
209
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
210 private Station prev;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
211
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
212 public Station() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
213 this(BED_LOAD, 0.0);
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
214 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
215
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
216 public Station(int type, double station) {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
217 grainFractions = new ArrayList<List<Value>>(GF_MAX+1);
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
218 for (int i = 0; i < GF_MAX+1; ++i) {
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
219 grainFractions.add(null);
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
220 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
221 this.type = type;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
222 this.station = station;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
223 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
224
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
225 public void allLoads(Collection<Load> loads) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
226 for (List<Value> values: grainFractions) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
227 if (values != null) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
228 for (Value value: values) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
229 loads.add(value.getLoad());
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
230 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
231 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
232 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
233 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
234
8242
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
235 public void allOfficialLoads(Collection<Load> loads) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
236 for (List<Value> values: grainFractions) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
237 if (values != null) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
238 for (Value value: values) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
239 Load load = value.getLoad();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
240 if (load.getKind() == 1) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
241 loads.add(value.getLoad());
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
242 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
243 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
244 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
245 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
246 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
247
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
248 public void allLoads(Collection<Load> loads, Integer sqRelationTimeInterval) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
249
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
250 for (List<Value> values: grainFractions) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
251 if (values == null) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
252 continue;
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
253 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
254 for (Value value: values) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
255 Load load = value.getLoad();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
256 Integer sqId = load.getSQRelationTimeIntervalId();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
257 if ((sqRelationTimeInterval == null)
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
258 || sqId != null && sqId.equals(sqRelationTimeInterval)) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
259 loads.add(load);
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
260 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
261 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
262 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
263 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
264
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
265 public double getStation() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
266 return station;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
267 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
268
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
269 public int getType() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
270 return type;
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
271 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
272
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
273 public boolean isType(int type) {
8050
9e79e384aa8b Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8048
diff changeset
274 return (this.type & type) != 0;
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
275 }
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
276
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
277 public void setPrev(Station prev) {
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
278 this.prev = prev;
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
279 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
280
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
281 public Station getPrev() {
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
282 return prev;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
283 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
284
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
285 public void merge(Station other) {
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
286 this.type |= other.type;
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
287 for (int i = 0, N = grainFractions.size(); i < N; ++i) {
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
288 grainFractions.set(i,
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
289 mergeValues(grainFractions.get(i), other.grainFractions.get(i)));
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
290 }
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
291 }
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
292
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
293 private static final Comparator<Value> ID_CMP = new Comparator<Value>() {
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
294 @Override
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
295 public int compare(Value a, Value b) {
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
296 return a.getLoad().getId() - b.getLoad().getId();
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
297 }
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
298 };
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
299
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
300 private static List<Value> mergeValues(List<Value> a, List<Value> b) {
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
301 if (a == null) return b;
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
302 if (b == null) return a;
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
303 a.addAll(b);
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
304 // re-establish id order.
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
305 Collections.sort(a, ID_CMP);
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
306 return a;
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
307 }
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
308
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
309 public Station prevByType(int type) {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
310 for (Station curr = this; curr != null; curr = curr.getPrev()) {
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
311 if (curr.isType(type)) {
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
312 return curr;
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
313 }
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
314 }
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
315 return null;
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
316 }
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
317
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
318 public void addValue(int grainFraction, Value value) {
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
319 List<Value> values = grainFractions.get(grainFraction);
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
320 if (values == null) {
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
321 values = new ArrayList<Value>();
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
322 grainFractions.set(grainFraction, values);
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
323 }
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
324 values.add(value);
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
325 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
326
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
327 public boolean hasGrainFraction(String grainFraction) {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
328 return hasGrainFraction(grainFractionIndex(grainFraction));
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
329 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
330
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
331 public boolean hasGrainFraction(int grainFraction) {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
332 List<Value> values = grainFractions.get(grainFraction);
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
333 return values != null && !values.isEmpty();
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
334 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
335
8047
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
336 public void filterGrainFraction(
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
337 int grainFraction,
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
338 Value.Filter filter,
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
339 Value.Visitor visitor
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
340 ) {
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
341 List<Value> values = grainFractions.get(grainFraction);
8047
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
342 if (values != null && !values.isEmpty()) {
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
343 for (Value value: values) {
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
344 if (filter.accept(value)) {
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
345 visitor.visit(value);
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
346 }
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
347 }
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
348 }
8047
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
349 }
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
350
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
351 public List<Value> filterGrainFraction(int grainFraction, Value.Filter filter) {
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
352 final List<Value> result = new ArrayList<Value>();
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
353 filterGrainFraction(grainFraction, filter, new Value.Visitor() {
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
354 @Override
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
355 public void visit(Value value) {
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
356 result.add(value);
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
357 }
8047
c835f3cf098e Sediment load: Added join to fetch measurement station via ranges which know the river. Added a visitor for values, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8044
diff changeset
358 });
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
359 return result;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
360 }
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
361
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
362 public double findValueByLoadId(int id) {
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
363 for (List<Value> values: grainFractions) {
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
364 double value = findValueByLoadId(values, id);
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
365 if (!Double.isNaN(value)) {
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
366 return value;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
367 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
368 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
369 return Double.NaN;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
370 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
371
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
372 private static final double findValueByLoadId(
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
373 List<Value> values,
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
374 int id
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
375 ) {
8036
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
376 if (values == null) {
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
377 return Double.NaN;
17542d100e75 Throw out old visitor model and use grain fraction filters instead. Fixed neighborhood wirinng of measument stations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8035
diff changeset
378 }
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
379 // List is ordered by station id -> binary search.
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
380 int lo = 0, hi = values.size()-1;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
381 while (lo <= hi) {
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
382 int mid = (lo + hi)/2;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
383 Value v = values.get(mid);
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
384 int xid = v.getLoad().getId();
8100
786bb4f87e8d Fix binarysearch logic in SedimentLoadData
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8092
diff changeset
385 if (xid > id) hi = mid-1;
786bb4f87e8d Fix binarysearch logic in SedimentLoadData
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8092
diff changeset
386 else if (xid < id) lo = mid+1;
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
387 else return v.getValue();
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
388 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
389
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
390 return Double.NaN;
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
391 }
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
392 } // class Station
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
393
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
394
8040
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
395 private Station [] stations;
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
396
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
397 public SedimentLoadData() {
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
398 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
399
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
400 public SedimentLoadData(Collection<Station> stations, boolean kmUp) {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
401 setStations(stations, kmUp);
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
402 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
403
8092
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
404 public Station[] getStations() {
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
405 return stations;
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
406 }
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
407
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
408 public void setStations(Collection<Station> stations, boolean kmUp) {
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
409 TreeMap<Double, Station> same =
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
410 new TreeMap<Double, Station>(EpsilonComparator.CMP);
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
411
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
412 for (Station station: stations) {
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
413 Double key = station.getStation();
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
414 Station st = same.get(key);
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
415 if (st == null) {
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
416 same.put(key, station);
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
417 } else {
8044
86fa217c24d5 Sediment load: Merge measurement stations if they have the same km. The chaining was too complicated to build algorithms on top of it.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8041
diff changeset
418 st.merge(station);
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
419 }
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
420 }
8040
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
421 this.stations = new Station[same.size()];
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
422 int i = 0;
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
423 for (Station station: same.values()) {
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
424 this.stations[i++] = station;
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
425 }
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
426 wireNeighbors(kmUp);
8034
b6e7cfcabf2c Wire the neighbors to the measurement stations together. This eases the lookup for same types (suspended or bed load).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8033
diff changeset
427 }
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
428
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
429 private void wireNeighbors(boolean kmUp) {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
430 if (kmUp) {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
431 for (int i = stations.length - 1; i > 0; --i) {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
432 stations[i-1].setPrev(stations[i]);
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
433 }
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
434 }
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
435 else {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
436 for (int i = 1; i < stations.length; ++i) {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
437 stations[i].setPrev(stations[i-1]);
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
438 }
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
439 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
440 }
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
441
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
442 private void recursiveFindStations(
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
443 double a, double b,
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
444 int lo, int hi,
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
445 Visitor visitor
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
446 ) {
8139
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
447 while (lo <= hi) {
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
448 int mid = (lo+hi)/2;
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
449 Station st = stations[mid];
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
450 double station = st.getStation();
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
451 if (station < a) {
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
452 lo = mid+1;
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
453 } else if (station > b) {
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
454 hi = mid-1;
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
455 } else {
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
456 recursiveFindStations(a, b, lo, mid-1, visitor);
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
457 visitor.visit(st);
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
458 lo = mid+1;
1e8812b996bc Sediment load: Remove simple tail recursive calls from SedimentLoadData.recursiveFindStations(). More carefully this time.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8130
diff changeset
459 }
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
460 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
461 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
462
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
463 public static final Comparator<Load> LOAD_ID_CMP = new Comparator<Load>() {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
464 @Override
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
465 public int compare(Load a, Load b) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
466 return a.getId() - b.getId();
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
467 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
468 };
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
469
8242
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
470 public static final Comparator<Load> LOAD_TI_CMP = new Comparator<Load>() {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
471 @Override
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
472 public int compare(Load a, Load b) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
473 Date a_start = a.getStartTime();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
474 Date a_stop = a.getStopTime();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
475 Date b_start = b.getStartTime();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
476 Date b_stop = b.getStopTime();
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
477 if (a_start == null && b_start == null) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
478 return 0;
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
479 } else if (a_start != null) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
480 return a_start.compareTo(b_start);
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
481 } else if (a_stop != null) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
482 return a_stop.compareTo(b_stop);
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
483 } else {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
484 return 1;
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
485 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
486 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
487 };
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
488
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
489 public static final Comparator<Load> LOAD_SQ_TI_CMP = new Comparator<Load>() {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
490 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
491 public int compare(Load a, Load b) {
8239
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
492 Integer a_id = a.getSQRelationTimeIntervalId();
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
493 Integer b_id = b.getSQRelationTimeIntervalId();
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
494 if (a_id == null && b_id == null) {
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
495 return 0;
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
496 }
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
497 if (a_id == null) {
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
498 return -1;
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
499 }
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
500 if (b_id == null) {
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
501 return 1;
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
502 }
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
503 return a_id - b_id;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
504 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
505 };
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
506
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
507 /** Find all loads in the range a/b with the according sq_time_interval */
8242
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
508 public Collection<Load> findLoads(double a, double b, final Integer sqRelationTimeInterval) {
8239
b207eeb66edd (issue1448) Objectify sq_time_interval id.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8237
diff changeset
509 final TreeSet<Load> loads = new TreeSet<Load>(LOAD_ID_CMP);
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
510
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
511 findStations(a, b, new Visitor() {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
512 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
513 public void visit(Station station) {
8242
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
514 station.allLoads(loads, sqRelationTimeInterval);
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
515 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
516 });
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
517
8242
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
518 return loads;
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
519 }
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
520
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
521 /** Find all official loads with a distinct time interval id */
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
522 public Collection<Load> findUniqueTiOfficialLoads(double a, double b) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
523 final TreeSet<Load> loads = new TreeSet<Load>(LOAD_TI_CMP);
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
524
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
525 findStations(a, b, new Visitor() {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
526 @Override
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
527 public void visit(Station station) {
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
528 station.allOfficialLoads(loads);
8240
61fd22f65bd4 (issue1448) Actually filter out not matching sq_time_interval_ids
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8239
diff changeset
529 }
8242
f8ea1a7ecde6 (issue1448) Fix info service for epoch / periods and off epoch
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8240
diff changeset
530 });
8240
61fd22f65bd4 (issue1448) Actually filter out not matching sq_time_interval_ids
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8239
diff changeset
531
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
532 return loads;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
533 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
534
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
535 /** Get a list of loads with unique sq_time_intervals.
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
536 *
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
537 * This is mainly a convenience function for the SedimentLoadInfoService.
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
538 */
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
539 public Collection<Load> findUniqueTimeIntervalLoads(double a, double b) {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
540 final TreeSet<Load> loads = new TreeSet<Load>(LOAD_SQ_TI_CMP);
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
541
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
542 findStations(a, b, new Visitor() {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
543 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
544 public void visit(Station station) {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
545 station.allLoads(loads);
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
546 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
547 });
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
548
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
549 return loads;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
550 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
551
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
552 public Collection<Load> findLoads(double a, double b) {
8140
369fbb28f5d0 Added missing generics parameter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8139
diff changeset
553 final TreeSet<Load> loads = new TreeSet<Load>(LOAD_ID_CMP);
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
554
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
555 findStations(a, b, new Visitor() {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
556 @Override
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
557 public void visit(Station station) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
558 station.allLoads(loads);
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
559 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
560 });
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
561
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
562 return loads;
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
563 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
564
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
565 public void findStations(double a, double b, Visitor visitor) {
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
566 if (a > b) {
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
567 double t = a; a = b; b = t;
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
568 }
8040
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
569 recursiveFindStations(a, b, 0, stations.length-1, visitor);
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
570 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
571
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
572 public List<Station> findStations(double a, double b) {
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
573 final List<Station> result = new ArrayList<Station>();
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
574 findStations(a, b, new Visitor() {
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
575 @Override
8038
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
576 public void visit(Station station) {
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
577 result.add(station);
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
578 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
579 });
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
580 return result;
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
581 }
8033
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
582 }
5e3f4b4fcb28 New way to loaded sediment loads from database and cache it. The data structure a way more straight forward. TODO: Implement calculation on this basis.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
583 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org