Mercurial > dive4elements > river
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 | 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 | 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 } |