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 }

http://dive4elements.wald.intevation.org