Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZone.java @ 9402:e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
author | mschaefer |
---|---|
date | Tue, 14 Aug 2018 14:04:01 +0200 |
parents | b570b6fcc052 |
children |
rev | line source |
---|---|
9071 | 1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by | |
3 * Björnsen Beratende Ingenieure GmbH | |
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt | |
5 * | |
6 * This file is Free Software under the GNU AGPL (>=v3) | |
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
8 * documentation coming with Dive4Elements River for details. | |
9 */ | |
10 package org.dive4elements.river.artifacts.uinfo.vegetationzones; | |
11 | |
12 import java.util.ArrayList; | |
13 import java.util.List; | |
9260 | 14 import java.util.TreeSet; |
9071 | 15 |
9402
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
16 import org.dive4elements.artifacts.CallContext; |
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
17 import org.dive4elements.river.artifacts.resources.Resources; |
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
18 import org.dive4elements.river.model.River; |
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
19 |
9071 | 20 /** |
21 * @author Domenico Nardi Tironi | |
22 * | |
23 */ | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
24 public class VegetationZone implements Comparable<VegetationZone> { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
25 |
9260 | 26 // IMMER ABGLEICHEN MIT VegetationZone.class Server und Client |
27 public static final boolean HAS_COLORS_EDITABLE = false; | |
28 | |
9071 | 29 private static final String TABLE_CELL_SEPARATOR = "TABLE_CELL_SEPARATOR"; |
30 private static final String TABLE_ROW_SEPARATOR = "TABLE_ROW_SEPARATOR"; | |
31 private final String zoneName; | |
32 private final int min_day_overflow; | |
33 private final int max_day_overflow; | |
9260 | 34 private final String hexColor; |
9071 | 35 |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
36 public static List<VegetationZone> parse(final String zonesRaw) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
37 final List<VegetationZone> resultList = new ArrayList<>(); |
9071 | 38 |
39 final List<String[]> results = new ArrayList<>(); | |
40 if (zonesRaw.contains(TABLE_ROW_SEPARATOR)) { | |
41 final String[] rows = zonesRaw.split(TABLE_ROW_SEPARATOR); | |
42 for (final String row : rows) { | |
43 if (row.contains(TABLE_CELL_SEPARATOR)) { | |
44 final String[] result = row.split(TABLE_CELL_SEPARATOR); | |
45 results.add(result); | |
46 } | |
47 } | |
48 } | |
49 for (final String[] zone : results) { | |
50 | |
9260 | 51 final VegetationZone helper = new VegetationZone(zone[0], Integer.valueOf(zone[1]), Integer.valueOf(zone[2]), zone[3]); |
9071 | 52 resultList.add(helper); |
53 } | |
54 | |
55 return resultList; | |
56 } | |
57 | |
9260 | 58 public static VegetationZone createFromTableEntry(final String zone, final String min_day_overflow, final String max_day_overflow, final String hexColor) { |
59 return new VegetationZone(zone, Integer.valueOf(min_day_overflow), Integer.valueOf(max_day_overflow), hexColor); // Error-Handling? | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
60 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
61 |
9260 | 62 private VegetationZone(final String zone, final Integer min_day_overflow, final Integer max_day_overflow, final String hexColor) { |
9071 | 63 this.zoneName = zone; |
64 this.min_day_overflow = min_day_overflow; | |
65 this.max_day_overflow = max_day_overflow; | |
9260 | 66 this.hexColor = hexColor; |
9071 | 67 } |
68 | |
69 public int getMax_day_overflow() { | |
70 return this.max_day_overflow; | |
71 } | |
72 | |
73 public String getZoneName() { | |
9260 | 74 if (this.zoneName == null || this.zoneName.equals("")) { |
75 return "---"; | |
76 } | |
9071 | 77 return this.zoneName; |
78 } | |
79 | |
9260 | 80 public String getHexColor() { |
81 try { | |
82 final int test = Integer.decode(this.hexColor); | |
83 return this.hexColor; | |
84 } | |
85 catch (final NumberFormatException e) { | |
86 return "#ffffff"; | |
87 } | |
88 } | |
89 | |
9071 | 90 public int getMin_day_overflow() { |
91 return this.min_day_overflow; | |
92 } | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
93 |
9402
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
94 public static final List<VegetationZone> getStandardList(final River river, final CallContext context) { |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
95 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
96 final List<VegetationZone> list = new ArrayList<>(); |
9402
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
97 for (final org.dive4elements.river.model.uinfo.VegetationZone vz : org.dive4elements.river.model.uinfo.VegetationZone.getValues(river)) { |
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
98 final String zn = Resources.getMsg(context.getMeta(), "uinfo_vegetation_type_" + vz.getVegetationType().getId().toString()); |
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
99 list.add(new VegetationZone(zn, vz.getMin_overflow_days(), vz.getMax_overflow_days(), vz.getColor())); |
e511eb935ccd
Changed hard coded standard vegetation zone table to fetching it from the database, i18n for the standard zone names
mschaefer
parents:
9260
diff
changeset
|
100 } |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
101 return list; |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
102 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
103 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
104 public static final String parseListToDataString(final List<VegetationZone> list) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
105 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
106 java.util.Collections.sort(list); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
107 final StringBuilder builder = new StringBuilder(); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
108 for (final VegetationZone zone : list) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
109 builder.append(zone.getZoneName()); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
110 builder.append(TABLE_CELL_SEPARATOR); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
111 builder.append(zone.getMin_day_overflow()); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
112 builder.append(TABLE_CELL_SEPARATOR); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
113 builder.append(zone.getMax_day_overflow()); |
9260 | 114 builder.append(TABLE_CELL_SEPARATOR); |
115 builder.append(zone.getHexColor()); | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
116 builder.append(TABLE_ROW_SEPARATOR); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
117 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
118 return builder.toString(); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
119 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
120 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
121 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
122 @Override |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
123 public int compareTo(final VegetationZone o) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
124 final int basicCompare = Integer.valueOf(this.getMin_day_overflow()).compareTo(o.getMin_day_overflow()); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
125 if (basicCompare == 0) |
9260 | 126 return Integer.valueOf(this.getMax_day_overflow()).compareTo(o.getMax_day_overflow()); // wenn min==min && max==max, alphabetisch sortieren? |
127 | |
128 if (basicCompare == 0) { | |
129 return 1; // for treeSet | |
130 } | |
131 | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
132 return basicCompare; |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
133 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
134 |
9260 | 135 public static final boolean zonesAreOverlapping(final List<VegetationZone> list) { |
136 for (final VegetationZone zone : list) { | |
137 for (final VegetationZone zoneOther : list) { | |
138 if (zone != zoneOther) { | |
139 final boolean overlaps = zone.overlaps(zoneOther); | |
140 if (overlaps) { | |
141 return overlaps; // cancel. only one zone has to overlap | |
142 } | |
143 } | |
144 } | |
145 } | |
146 | |
147 return false; | |
148 } | |
149 | |
150 public static final boolean hasGaps(final List<VegetationZone> list, final int lower, final int upper) { | |
151 | |
152 if ((upper - lower) == 0) | |
153 return true; | |
154 | |
155 final TreeSet<VegetationZone> treeList = new TreeSet<>(); | |
156 treeList.addAll(list); | |
157 int lowerCompare = lower; | |
158 for (final VegetationZone zone : treeList) { | |
159 if (zone.getLowerFromTo() > (lowerCompare + 1)) { // nicht inklusiv | |
160 return true; | |
161 } | |
162 lowerCompare = zone.getUpperFromTo(); | |
163 } | |
164 if ((lowerCompare) < upper) | |
165 return true; // am Ende nicht geschlossen | |
166 | |
167 return false; | |
168 } | |
169 | |
170 private boolean overlaps(final VegetationZone otherZone) { | |
171 final int otherLower = otherZone.getLowerFromTo(); | |
172 final int otherUpper = otherZone.getUpperFromTo(); | |
173 | |
174 final int upper = getUpperFromTo(); | |
175 final int lower = getLowerFromTo(); | |
176 final int otherSchwerpunkt = (otherLower + otherUpper) / 2; | |
177 if ((otherUpper <= upper && otherUpper >= lower)) { | |
178 return true; | |
179 } else if (otherLower >= lower && otherLower <= upper) { | |
180 return true; | |
181 } else if (otherSchwerpunkt >= (lower) && otherSchwerpunkt <= (upper)) { | |
182 return true; | |
183 } | |
184 return false; | |
185 } | |
186 | |
187 public Integer getLowerFromTo() { | |
188 return this.min_day_overflow < this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow; // Math. is forbidden :-( | |
189 } | |
190 | |
191 public Integer getUpperFromTo() { | |
192 return this.min_day_overflow > this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow;// Math. is forbidden :-( | |
193 } | |
194 | |
9071 | 195 } |