comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeights.java @ 9129:28eec75415d8

Handle case where no default bedheights are defined for a given river
author gernotbelger
date Wed, 06 Jun 2018 14:15:58 +0200
parents 82917e414d76
children 2f5052835b76
comparison
equal deleted inserted replaced
9128:99c6bf20bd92 9129:28eec75415d8
45 45
46 public List<BedHeight> getBedHeights(final Calculation problems) { 46 public List<BedHeight> getBedHeights(final Calculation problems) {
47 final Collection<String> bedHeightNames = loadBedHeightDefaultsForRiver(this.river, problems); 47 final Collection<String> bedHeightNames = loadBedHeightDefaultsForRiver(this.river, problems);
48 48
49 final List<BedHeight> defaultBedHeights = loadBedHeightsByName(this.river, bedHeightNames, problems); 49 final List<BedHeight> defaultBedHeights = loadBedHeightsByName(this.river, bedHeightNames, problems);
50 if (defaultBedHeights.isEmpty()) {
51 problems.addProblem("sinfo.bedheightsfinder.nobedheightsforriver", this.river.getName());
52 return Collections.emptyList();
53 }
54
55 /* check for overlapping ranges, N2-search, but we expect only have small numbers of bed heights */
56 final List<BedHeight> result = new ArrayList<>(defaultBedHeights.size());
57
58 for (int i = 0; i < defaultBedHeights.size(); i++) {
59 final BedHeight bedHeight = defaultBedHeights.get(i);
60
61 final Range range = bedHeight.getRange();
62 final NumberRange bedRange = new NumberRange(range.getA(), range.getB());
63
64 if (overlapsRange(bedRange, defaultBedHeights, i + 1)) {
65 problems.addProblem("sinfo.bedheightsfinder.overlappingrange", bedHeight.getDescription());
66 } else
67 result.add(bedHeight);
68 }
50 69
51 final List<BedHeight> validBedHeights = new ArrayList<>(defaultBedHeights.size()); 70 final List<BedHeight> validBedHeights = new ArrayList<>(defaultBedHeights.size());
52 71
53 // REMARK: check for bad ranges because db schema allow for incomplete ranges, and ignore if this is the case 72 // REMARK: check for bad ranges because db schema allow for incomplete ranges, and ignore if this is the case
54 for (final BedHeight bedHeight : defaultBedHeights) { 73 for (final BedHeight bedHeight : defaultBedHeights) {
57 76
58 if (range.getA() == null || range.getB() == null) 77 if (range.getA() == null || range.getB() == null)
59 problems.addProblem("sinfo.bedheightsfinder.badrange", bedHeight.getDescription()); 78 problems.addProblem("sinfo.bedheightsfinder.badrange", bedHeight.getDescription());
60 else 79 else
61 validBedHeights.add(bedHeight); 80 validBedHeights.add(bedHeight);
62 }
63
64 /* check for overlapping ranges, N2-search, but we expect only have small numbers of bed heights */
65 final List<BedHeight> result = new ArrayList<>(defaultBedHeights.size());
66
67 for (int i = 0; i < defaultBedHeights.size(); i++) {
68 final BedHeight bedHeight = validBedHeights.get(i);
69
70 final Range range = bedHeight.getRange();
71 final NumberRange bedRange = new NumberRange(range.getA(), range.getB());
72
73 if (overlapsRange(bedRange, validBedHeights, i + 1)) {
74 problems.addProblem("sinfo.bedheightsfinder.overlappingrange", bedHeight.getDescription());
75 } else
76 result.add(bedHeight);
77 } 81 }
78 82
79 return result; 83 return result;
80 } 84 }
81 85

http://dive4elements.wald.intevation.org