annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeights.java @ 9178:2f5052835b76

uinfo inundationduration langjähr. Mittel, Uedauern.properties, Meldung
author gernotbelger
date Tue, 26 Jun 2018 19:48:35 +0200
parents 28eec75415d8
children ed4b14389667
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.Arrays;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
14 import java.util.Collection;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
15 import java.util.Collections;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
16 import java.util.List;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
17 import java.util.Properties;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
18
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
19 import org.apache.commons.lang.ArrayUtils;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
20 import org.apache.commons.lang.StringUtils;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
21 import org.apache.commons.lang.math.NumberRange;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
22 import org.dive4elements.artifacts.common.utils.Config;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.model.Calculation;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.model.BedHeight;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.model.Range;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
26 import org.dive4elements.river.model.River;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
27
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 * 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
30 *
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
31 * @author Gernot Belger
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 final class DefaultBedHeights {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
34 private static final String CONFIG_FILE = "sinfo_tkh_bedheights.properties";
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
35 private final River river;
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 DefaultBedHeights(final River river) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
38 this.river = river;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
39 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
40
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
41 public List<BedHeight> getBedHeights(final Calculation problems) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
42 final Collection<String> bedHeightNames = loadBedHeightDefaultsForRiver(this.river, problems);
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
43
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
44 final List<BedHeight> defaultBedHeights = loadBedHeightsByName(this.river, bedHeightNames, problems);
9129
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
45 if (defaultBedHeights.isEmpty()) {
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
46 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
47 return Collections.emptyList();
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
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
50 /* 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
51 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
52
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
53 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
54 final BedHeight bedHeight = defaultBedHeights.get(i);
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
55
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
56 final Range range = bedHeight.getRange();
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
57 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
58
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
59 if (overlapsRange(bedRange, defaultBedHeights, i + 1)) {
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
60 problems.addProblem("sinfo.bedheightsfinder.overlappingrange", bedHeight.getDescription());
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
61 } else
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
62 result.add(bedHeight);
28eec75415d8 Handle case where no default bedheights are defined for a given river
gernotbelger
parents: 9097
diff changeset
63 }
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
64
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
65 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
66
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
67 // 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
68 for (final BedHeight bedHeight : defaultBedHeights) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
69
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
70 final Range range = bedHeight.getRange();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
71
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
72 if (range.getA() == null || range.getB() == null)
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
73 problems.addProblem("sinfo.bedheightsfinder.badrange", bedHeight.getDescription());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
74 else
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
75 validBedHeights.add(bedHeight);
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
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
78 return result;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
79 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
80
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
81 private static Collection<String> loadBedHeightDefaultsForRiver(final River river, final Calculation problems) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
82
9178
2f5052835b76 uinfo inundationduration langjähr. Mittel, Uedauern.properties, Meldung
gernotbelger
parents: 9129
diff changeset
83 try {
2f5052835b76 uinfo inundationduration langjähr. Mittel, Uedauern.properties, Meldung
gernotbelger
parents: 9129
diff changeset
84 final Properties properties = Config.loadProperties(CONFIG_FILE);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
85 final String value = properties.getProperty(river.getName());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
86 final String[] split = StringUtils.split(StringUtils.trim(value), ',');
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
87 if (ArrayUtils.isEmpty(split)) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
88 problems.addProblem("sinfo.bedheightsfinder.configfile.missingriver", CONFIG_FILE, river.getName());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
89 return Collections.emptyList();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
90 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
91
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
92 return Arrays.asList(split);
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
93 }
9178
2f5052835b76 uinfo inundationduration langjähr. Mittel, Uedauern.properties, Meldung
gernotbelger
parents: 9129
diff changeset
94 catch (
2f5052835b76 uinfo inundationduration langjähr. Mittel, Uedauern.properties, Meldung
gernotbelger
parents: 9129
diff changeset
95
2f5052835b76 uinfo inundationduration langjähr. Mittel, Uedauern.properties, Meldung
gernotbelger
parents: 9129
diff changeset
96 final Exception e) {
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
97 e.printStackTrace();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
98 problems.addProblem("sinfo.bedheightsfinder.configfile.loaderror", CONFIG_FILE, e.getMessage());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
99 return Collections.emptyList();
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
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
103 private static List<BedHeight> loadBedHeightsByName(final River river, final Collection<String> bedHeightNames, final Calculation problems) {
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
104
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
105 final List<BedHeight> bedHeights = new ArrayList<>(bedHeightNames.size());
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
106
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
107 for (final String name : bedHeightNames) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
108 try {
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
109 final BedHeight bedHeight = BedHeight.getBedHeightByDescription(river, name);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
110 if (bedHeight == null)
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
111 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), name);
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
112 else
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
113 bedHeights.add(bedHeight);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
114 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
115 catch (final Exception e) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
116 e.printStackTrace();
9097
82917e414d76 Fixed missing parameter in addProblem
mschaefer
parents: 9087
diff changeset
117 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), name);
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
118 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
119 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
120
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
121 return bedHeights;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
122 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
123
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
124 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
125
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
126 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
127
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
128 final BedHeight compareBed = result.get(i);
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
129 final Range range = compareBed.getRange();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
130 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
131
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
132 if (compareRange.overlapsRange(bedRange))
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
133 return true;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
134 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
135
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
136 return false;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
137 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
138 }

http://dive4elements.wald.intevation.org