annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeights.java @ 9211:aca5a7a57a3a

SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
author gernotbelger
date Tue, 03 Jul 2018 13:09:46 +0200
parents ed4b14389667
children 439699ff9b2d
rev   line source
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
2 * Software engineering by
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
5 *
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
9 */
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.tkhstate;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
11
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
12 import java.util.ArrayList;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
13 import java.util.Collection;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
14 import java.util.Collections;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
15 import java.util.List;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
16
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
17 import org.apache.commons.lang.math.NumberRange;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.model.Calculation;
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
19 import org.dive4elements.river.artifacts.sinfo.tkhstate.DefaultBedHeightsConfig.DefaultBedHeight;
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.model.BedHeight;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.model.Range;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.model.River;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
23
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
24 /**
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
25 * This class knows how to find the default bed heights defined for tkh calculation
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
26 *
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
27 * @author Gernot Belger
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
28 */
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
29 final class DefaultBedHeights {
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
30
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
31 private final River river;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
32
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
33 public DefaultBedHeights(final River river) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
34 this.river = river;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
35 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
36
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
37 public List<BedHeight> getBedHeights(final Calculation problems) {
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
38 final Collection<DefaultBedHeight> defaults = DefaultBedHeightsConfig.getDefaults(this.river, problems);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
39
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
40 final List<BedHeight> defaultBedHeights = loadBedHeightsByName(this.river, defaults, problems);
9129
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
41 if (defaultBedHeights.isEmpty()) {
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
42 problems.addProblem("sinfo.bedheightsfinder.nobedheightsforriver", this.river.getName());
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
43 return Collections.emptyList();
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
44 }
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
45
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
46 /* check for overlapping ranges, N2-search, but we expect only have small numbers of bed heights */
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
47 final List<BedHeight> result = new ArrayList<>(defaultBedHeights.size());
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
48
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
49 for (int i = 0; i < defaultBedHeights.size(); i++) {
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
50 final BedHeight bedHeight = defaultBedHeights.get(i);
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
51
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
52 final Range range = bedHeight.getRange();
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
53 final NumberRange bedRange = new NumberRange(range.getA(), range.getB());
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
54
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
55 if (overlapsRange(bedRange, defaultBedHeights, i + 1))
9129
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
56 problems.addProblem("sinfo.bedheightsfinder.overlappingrange", bedHeight.getDescription());
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
57 else
9129
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
58 result.add(bedHeight);
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
59 }
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
60
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
61 final List<BedHeight> validBedHeights = new ArrayList<>(defaultBedHeights.size());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
62
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
63 // REMARK: check for bad ranges because db schema allow for incomplete ranges, and ignore if this is the case
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
64 for (final BedHeight bedHeight : defaultBedHeights) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
65
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
66 final Range range = bedHeight.getRange();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
67
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
68 if (range.getA() == null || range.getB() == null)
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
69 problems.addProblem("sinfo.bedheightsfinder.badrange", bedHeight.getDescription());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
70 else
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
71 validBedHeights.add(bedHeight);
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
72 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
73
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
74 return result;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
75 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
76
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
77
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
78 private static List<BedHeight> loadBedHeightsByName(final River river, final Collection<DefaultBedHeight> defaults, final Calculation problems) {
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
79
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
80 final List<BedHeight> bedHeights = new ArrayList<>(defaults.size());
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
81
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
82 for (final DefaultBedHeight heightDefault : defaults) {
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
83
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
84 final String description = heightDefault.description;
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
85 try {
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
86
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
87 final BedHeight bedHeight = BedHeight.getBedHeightByDescription(river, description, heightDefault.startKm, heightDefault.endKm);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
88 if (bedHeight == null)
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
89 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), description);
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
90 else
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
91 bedHeights.add(bedHeight);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
92 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
93 catch (final Exception e) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
94 e.printStackTrace();
9211
aca5a7a57a3a SINFO-TKH: definition der standard sohlhöhen jetzt mit Gültigkeitsstrecke. Definitionsdateien aufgeteilt in eine pro Gewässer.
gernotbelger
parents: 9192
diff changeset
95 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), description);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
96 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
97 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
98
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
99 return bedHeights;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
100 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
101
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
102 private static boolean overlapsRange(final NumberRange bedRange, final List<BedHeight> result, final int startIndex) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
103
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
104 for (int i = startIndex; i < result.size(); i++) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
105
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
106 final BedHeight compareBed = result.get(i);
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
107 final Range range = compareBed.getRange();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
108 final NumberRange compareRange = new NumberRange(range.getA(), range.getB());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
109
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
110 if (compareRange.overlapsRange(bedRange))
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
111 return true;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
112 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
113
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
114 return false;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
115 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
116 }

http://dive4elements.wald.intevation.org