annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeights.java @ 9192:ed4b14389667

Formatting
author gernotbelger
date Thu, 28 Jun 2018 19:13:14 +0200
parents 2f5052835b76
children aca5a7a57a3a
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 }
9192
ed4b14389667 Formatting
gernotbelger
parents: 9178
diff changeset
94 catch (final Exception e) {
8942
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
95 e.printStackTrace();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
96 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
97 return Collections.emptyList();
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 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
100
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
101 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
102
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
103 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
104
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
105 for (final String name : bedHeightNames) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
106 try {
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
107 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
108 if (bedHeight == null)
9087
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
109 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), name);
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
110 else
fb976ea01463 Fixed :bed heights finder did not consider the river correctly
gernotbelger
parents: 8942
diff changeset
111 bedHeights.add(bedHeight);
8942
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 catch (final Exception e) {
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
114 e.printStackTrace();
9097
82917e414d76 Fixed missing parameter in addProblem
mschaefer
parents: 9087
diff changeset
115 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
116 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
117 }
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 return bedHeights;
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
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
122 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
123
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
124 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
125
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
126 final BedHeight compareBed = result.get(i);
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
127 final Range range = compareBed.getRange();
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
128 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
129
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
130 if (compareRange.overlapsRange(bedRange))
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
131 return true;
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
132 }
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
133
11bf13cf0463 Minor changes to tkh calculation. Loading default bed heights form config file.
gernotbelger
parents:
diff changeset
134 return false;
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 }

http://dive4elements.wald.intevation.org