annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadData.java @ 8237:25c3a62863d2

(issue1448) Unify SedimentLoadData ctor again
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 08 Sep 2014 19:00:30 +0200
parents 2f63c6c84540
children b207eeb66edd
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;
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
38 public static final int GF_MAX = 8;
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
39
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
40 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
41 "coarse",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
42 "fine_middle",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
43 "sand",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
44 "susp_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_bed",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
46 "suspended_sediment",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
47 "total",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
48 "bed_load",
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
49 "bed_load_susp_sand"
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
50 };
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
51
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
52 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
53 /* 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
54 /* 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
55 /* 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
56 /* 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
57 /* 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
58 /* 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
59 /* 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
60 /* GF_BED_LOAD */ 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
61 /* GF_BED_LOAD_SUSP_SAND */ Station.BED_LOAD
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
62 };
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
63
8209
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
64 public static final int measurementStationType(int grainFraction) {
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
65 return grainFraction < 0 || grainFraction >= MEASUREMENT_STATION_GF.length
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
66 ? Station.UNKNOWN
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
67 : MEASUREMENT_STATION_GF[grainFraction];
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
68 }
5114b643a6d6 Fixed broken build.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8208
diff changeset
69
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
70 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
71 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
72 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
73 return i;
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
74 }
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
75 }
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
76 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
77 }
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
78
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
79 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
80 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
81 ? GF_NAMES[index]
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
82 : "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
83 }
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
84
8208
2badb2ca5f89 Sediment load: converted grain fraction name to an array lookup.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8202
diff changeset
85
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
86 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
87 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
88 }
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
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
90 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
91
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
92 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
93 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
94 }
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
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
96 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
97 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
98 }
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
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
100 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
101
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
102 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
103
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 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
105 }
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(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
108 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
109 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
110 }
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
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 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
113 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
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
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 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
117 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
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 } // 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
120
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 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
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 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
125 private int kind;
8237
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
126 private int 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
127
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
128 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
129
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 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
131 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
132 private Date sqStartTime;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
133 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
134
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
135 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
136 }
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
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
138 public Load(
8237
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
139 int id,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
140 int kind,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
141 String description,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
142 Date startTime,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
143 Date stopTime,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
144 Integer sqTiId,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
145 Date sqStartTime,
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
146 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
147 ) {
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
148 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
149 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
150 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
151 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
152 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
153 this.sqStartTime = sqStartTime;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
154 this.sqStopTime = sqStopTime;
8237
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
155 this.sqTiId = sqTiId == null ? 0 : 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
156 }
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
157
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
158 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
159 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
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
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
162 public int getSQRelationTimeIntervalId() {
8237
25c3a62863d2 (issue1448) Unify SedimentLoadData ctor again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8228
diff changeset
163 return sqTiId;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
164 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
165
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
166 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
167 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
168 }
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
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
170 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
171 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
172 }
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
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 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
175 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
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
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 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
179 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
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
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
182 public Date getSQStartTime() {
8228
2f63c6c84540 (issue1448) Fix return values of SQ time interval accessors
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8216
diff changeset
183 return sqStartTime;
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
184 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
185
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
186 public Date getSQStopTime() {
8228
2f63c6c84540 (issue1448) Fix return values of SQ time interval accessors
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8216
diff changeset
187 return sqStopTime;
8199
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
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
190 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
191 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
192 }
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
193 } // 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
194
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 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
196
8048
cde6d2a9ec32 Sediment Load: Added table to figure out where grain fractions are measured.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8047
diff changeset
197 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
198 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
199 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
200
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
201 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
202
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 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
204
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 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
206
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
207 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
208
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
209 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
210 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
211 }
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
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 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
214 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
215 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
216 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
217 }
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 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
219 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
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
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
222 public void allLoads(Collection<Load> loads) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
223 for (List<Value> values: grainFractions) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
224 if (values != null) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
225 for (Value value: values) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
226 loads.add(value.getLoad());
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
227 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
228 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
229 }
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
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
232 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
233 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
234 }
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
235
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
236 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
237 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
238 }
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
239
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
240 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
241 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
242 }
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
243
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
244 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
245 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
246 }
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
247
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
248 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
249 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
250 }
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
251
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
252 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
253 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
254 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
255 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
256 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
257 }
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
258 }
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
259
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
260 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
261 @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
262 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
263 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
264 }
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
265 };
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
266
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
267 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
268 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
269 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
270 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
271 // 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
272 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
273 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
274 }
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
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
276 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
277 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
278 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
279 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
280 }
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
281 }
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
282 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
283 }
aa622bddfdac Directly chain stations with the same km position together. This ease some summations.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8036
diff changeset
284
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
285 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
286 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
287 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
288 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
289 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
290 }
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
291 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
292 }
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
293
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
294 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
295 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
296 }
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
297
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
298 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
299 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
300 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
301 }
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
302
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
303 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
304 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
305 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
306 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
307 ) {
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
308 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
309 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
310 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
311 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
312 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
313 }
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
314 }
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
315 }
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
316 }
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
317
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
318 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
319 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
320 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
321 @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
322 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
323 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
324 }
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
325 });
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
326 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
327 }
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
328
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
329 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
330 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
331 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
332 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
333 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
334 }
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
335 }
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
336 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
337 }
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
338
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
339 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
340 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
341 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
342 ) {
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
343 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
344 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
345 }
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
346 // 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
347 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
348 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
349 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
350 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
351 int xid = v.getLoad().getId();
8100
786bb4f87e8d Fix binarysearch logic in SedimentLoadData
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8092
diff changeset
352 if (xid > id) hi = mid-1;
786bb4f87e8d Fix binarysearch logic in SedimentLoadData
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8092
diff changeset
353 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
354 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
355 }
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
356
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
357 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
358 }
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
359 } // 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
360
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
361
8040
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
362 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
363
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
364 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
365 }
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
366
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
367 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
368 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
369 }
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
370
8092
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
371 public Station[] getStations() {
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
372 return stations;
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
373 }
7d4be7a6a2b1 Expose sedimentLoad stations
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8058
diff changeset
374
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
375 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
376 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
377 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
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 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
380 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
381 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
382 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
383 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
384 } 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
385 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
386 }
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 }
8040
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
388 this.stations = new Station[same.size()];
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
389 int i = 0;
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
390 for (Station station: same.values()) {
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
391 this.stations[i++] = station;
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
392 }
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
393 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
394 }
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
395
8193
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
396 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
397 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
398 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
399 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
400 }
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
401 }
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
402 else {
8d447516b7dd Sum up fractions from stations and previous stations according to respective validity model.
Tom Gottfried <tom@intevation.de>
parents: 8186
diff changeset
403 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
404 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
405 }
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
406 }
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
407 }
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
408
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
409 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
410 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
411 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
412 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
413 ) {
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
414 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
415 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
416 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
417 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
418 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
419 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
420 } 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
421 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
422 } 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
423 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
424 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
425 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
426 }
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
427 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
428 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
429
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
430 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
431 @Override
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
432 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
433 return a.getId() - b.getId();
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
434 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
435 };
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
436
8199
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
437 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
438 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
439 public int compare(Load a, Load b) {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
440 return a.getSQRelationTimeIntervalId() - b.getSQRelationTimeIntervalId();
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
441 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
442 };
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
443
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
444 public static final Comparator<Load> LOAD_ID_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
445 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
446 public int compare(Load a, Load b) {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
447 return LOAD_ID_CMP.compare(a, b) + LOAD_SQ_TI_CMP.compare(a,b);
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
448 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
449 };
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
450
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
451 /** Find all loads in the range a/b with the according sq_time_interval */
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
452 public Collection<Load> findLoads(double a, double b, int sqRelationTimeInterval) {
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
453 final TreeSet<Load> loads = new TreeSet<Load>(LOAD_ID_SQ_TI_CMP);
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
454
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
455 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
456 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
457 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
458 station.allLoads(loads);
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
459 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
460 });
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
461
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
462 return loads;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
463 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
464
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
465 /** 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
466 *
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
467 * 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
468 */
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
469 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
470 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
471
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
472 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
473 @Override
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
474 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
475 station.allLoads(loads);
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
476 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
477 });
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
478
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
479 return loads;
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
480 }
42ac86ec19c7 (issue1448) Add sq time intervals to sediment load data model.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8193
diff changeset
481
8123
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
482 public Collection<Load> findLoads(double a, double b) {
8140
369fbb28f5d0 Added missing generics parameter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8139
diff changeset
483 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
484
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
485 findStations(a, b, new Visitor() {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
486 @Override
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
487 public void visit(Station station) {
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
488 station.allLoads(loads);
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
489 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
490 });
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
491
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
492 return loads;
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
493 }
4a2ef6895557 Sediment load: Fixed findStations() and add findLoads().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8100
diff changeset
494
8035
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
495 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
496 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
497 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
498 }
8040
f1500a524b76 Replace station list with a plain array.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8039
diff changeset
499 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
500 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
501
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
502 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
503 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
504 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
505 @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
506 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
507 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
508 }
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
509 });
f2dc7992b8a3 Sediment loads from cache are sorted in station order so range filters
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8034
diff changeset
510 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
511 }
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
512 }
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
513 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org