Mercurial > dive4elements > river
comparison 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 |
comparison
equal
deleted
inserted
replaced
9210:de55d9a94796 | 9211:aca5a7a57a3a |
---|---|
8 * documentation coming with Dive4Elements River for details. | 8 * documentation coming with Dive4Elements River for details. |
9 */ | 9 */ |
10 package org.dive4elements.river.artifacts.sinfo.tkhstate; | 10 package org.dive4elements.river.artifacts.sinfo.tkhstate; |
11 | 11 |
12 import java.util.ArrayList; | 12 import java.util.ArrayList; |
13 import java.util.Arrays; | |
14 import java.util.Collection; | 13 import java.util.Collection; |
15 import java.util.Collections; | 14 import java.util.Collections; |
16 import java.util.List; | 15 import java.util.List; |
17 import java.util.Properties; | |
18 | 16 |
19 import org.apache.commons.lang.ArrayUtils; | |
20 import org.apache.commons.lang.StringUtils; | |
21 import org.apache.commons.lang.math.NumberRange; | 17 import org.apache.commons.lang.math.NumberRange; |
22 import org.dive4elements.artifacts.common.utils.Config; | |
23 import org.dive4elements.river.artifacts.model.Calculation; | 18 import org.dive4elements.river.artifacts.model.Calculation; |
19 import org.dive4elements.river.artifacts.sinfo.tkhstate.DefaultBedHeightsConfig.DefaultBedHeight; | |
24 import org.dive4elements.river.model.BedHeight; | 20 import org.dive4elements.river.model.BedHeight; |
25 import org.dive4elements.river.model.Range; | 21 import org.dive4elements.river.model.Range; |
26 import org.dive4elements.river.model.River; | 22 import org.dive4elements.river.model.River; |
27 | 23 |
28 /** | 24 /** |
29 * This class knows how to find the default bed heights defined for tkh calculation | 25 * This class knows how to find the default bed heights defined for tkh calculation |
30 * | 26 * |
31 * @author Gernot Belger | 27 * @author Gernot Belger |
32 */ | 28 */ |
33 final class DefaultBedHeights { | 29 final class DefaultBedHeights { |
34 private static final String CONFIG_FILE = "sinfo_tkh_bedheights.properties"; | 30 |
35 private final River river; | 31 private final River river; |
36 | 32 |
37 public DefaultBedHeights(final River river) { | 33 public DefaultBedHeights(final River river) { |
38 this.river = river; | 34 this.river = river; |
39 } | 35 } |
40 | 36 |
41 public List<BedHeight> getBedHeights(final Calculation problems) { | 37 public List<BedHeight> getBedHeights(final Calculation problems) { |
42 final Collection<String> bedHeightNames = loadBedHeightDefaultsForRiver(this.river, problems); | 38 final Collection<DefaultBedHeight> defaults = DefaultBedHeightsConfig.getDefaults(this.river, problems); |
43 | 39 |
44 final List<BedHeight> defaultBedHeights = loadBedHeightsByName(this.river, bedHeightNames, problems); | 40 final List<BedHeight> defaultBedHeights = loadBedHeightsByName(this.river, defaults, problems); |
45 if (defaultBedHeights.isEmpty()) { | 41 if (defaultBedHeights.isEmpty()) { |
46 problems.addProblem("sinfo.bedheightsfinder.nobedheightsforriver", this.river.getName()); | 42 problems.addProblem("sinfo.bedheightsfinder.nobedheightsforriver", this.river.getName()); |
47 return Collections.emptyList(); | 43 return Collections.emptyList(); |
48 } | 44 } |
49 | 45 |
54 final BedHeight bedHeight = defaultBedHeights.get(i); | 50 final BedHeight bedHeight = defaultBedHeights.get(i); |
55 | 51 |
56 final Range range = bedHeight.getRange(); | 52 final Range range = bedHeight.getRange(); |
57 final NumberRange bedRange = new NumberRange(range.getA(), range.getB()); | 53 final NumberRange bedRange = new NumberRange(range.getA(), range.getB()); |
58 | 54 |
59 if (overlapsRange(bedRange, defaultBedHeights, i + 1)) { | 55 if (overlapsRange(bedRange, defaultBedHeights, i + 1)) |
60 problems.addProblem("sinfo.bedheightsfinder.overlappingrange", bedHeight.getDescription()); | 56 problems.addProblem("sinfo.bedheightsfinder.overlappingrange", bedHeight.getDescription()); |
61 } else | 57 else |
62 result.add(bedHeight); | 58 result.add(bedHeight); |
63 } | 59 } |
64 | 60 |
65 final List<BedHeight> validBedHeights = new ArrayList<>(defaultBedHeights.size()); | 61 final List<BedHeight> validBedHeights = new ArrayList<>(defaultBedHeights.size()); |
66 | 62 |
76 } | 72 } |
77 | 73 |
78 return result; | 74 return result; |
79 } | 75 } |
80 | 76 |
81 private static Collection<String> loadBedHeightDefaultsForRiver(final River river, final Calculation problems) { | |
82 | 77 |
83 try { | 78 private static List<BedHeight> loadBedHeightsByName(final River river, final Collection<DefaultBedHeight> defaults, final Calculation problems) { |
84 final Properties properties = Config.loadProperties(CONFIG_FILE); | |
85 final String value = properties.getProperty(river.getName()); | |
86 final String[] split = StringUtils.split(StringUtils.trim(value), ','); | |
87 if (ArrayUtils.isEmpty(split)) { | |
88 problems.addProblem("sinfo.bedheightsfinder.configfile.missingriver", CONFIG_FILE, river.getName()); | |
89 return Collections.emptyList(); | |
90 } | |
91 | 79 |
92 return Arrays.asList(split); | 80 final List<BedHeight> bedHeights = new ArrayList<>(defaults.size()); |
93 } | |
94 catch (final Exception e) { | |
95 e.printStackTrace(); | |
96 problems.addProblem("sinfo.bedheightsfinder.configfile.loaderror", CONFIG_FILE, e.getMessage()); | |
97 return Collections.emptyList(); | |
98 } | |
99 } | |
100 | 81 |
101 private static List<BedHeight> loadBedHeightsByName(final River river, final Collection<String> bedHeightNames, final Calculation problems) { | 82 for (final DefaultBedHeight heightDefault : defaults) { |
102 | 83 |
103 final List<BedHeight> bedHeights = new ArrayList<>(bedHeightNames.size()); | 84 final String description = heightDefault.description; |
85 try { | |
104 | 86 |
105 for (final String name : bedHeightNames) { | 87 final BedHeight bedHeight = BedHeight.getBedHeightByDescription(river, description, heightDefault.startKm, heightDefault.endKm); |
106 try { | |
107 final BedHeight bedHeight = BedHeight.getBedHeightByDescription(river, name); | |
108 if (bedHeight == null) | 88 if (bedHeight == null) |
109 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), name); | 89 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), description); |
110 else | 90 else |
111 bedHeights.add(bedHeight); | 91 bedHeights.add(bedHeight); |
112 } | 92 } |
113 catch (final Exception e) { | 93 catch (final Exception e) { |
114 e.printStackTrace(); | 94 e.printStackTrace(); |
115 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), name); | 95 problems.addProblem("sinfo.bedheightsfinder.missingdescription", river.getName(), description); |
116 } | 96 } |
117 } | 97 } |
118 | 98 |
119 return bedHeights; | 99 return bedHeights; |
120 } | 100 } |