Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZone.java @ 9260:b570b6fcc052
VegetationZone color added and disabled
author | gernotbelger |
---|---|
date | Tue, 17 Jul 2018 10:59:27 +0200 |
parents | 431f1c269be5 |
children | e511eb935ccd |
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 |
16 /** | |
17 * @author Domenico Nardi Tironi | |
18 * | |
19 */ | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
20 public class VegetationZone implements Comparable<VegetationZone> { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
21 |
9260 | 22 // IMMER ABGLEICHEN MIT VegetationZone.class Server und Client |
23 public static final boolean HAS_COLORS_EDITABLE = false; | |
24 | |
9071 | 25 private static final String TABLE_CELL_SEPARATOR = "TABLE_CELL_SEPARATOR"; |
26 private static final String TABLE_ROW_SEPARATOR = "TABLE_ROW_SEPARATOR"; | |
27 private final String zoneName; | |
28 private final int min_day_overflow; | |
29 private final int max_day_overflow; | |
9260 | 30 private final String hexColor; |
9071 | 31 |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
32 public static List<VegetationZone> parse(final String zonesRaw) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
33 final List<VegetationZone> resultList = new ArrayList<>(); |
9071 | 34 |
35 final List<String[]> results = new ArrayList<>(); | |
36 if (zonesRaw.contains(TABLE_ROW_SEPARATOR)) { | |
37 final String[] rows = zonesRaw.split(TABLE_ROW_SEPARATOR); | |
38 for (final String row : rows) { | |
39 if (row.contains(TABLE_CELL_SEPARATOR)) { | |
40 final String[] result = row.split(TABLE_CELL_SEPARATOR); | |
41 results.add(result); | |
42 } | |
43 } | |
44 } | |
45 for (final String[] zone : results) { | |
46 | |
9260 | 47 final VegetationZone helper = new VegetationZone(zone[0], Integer.valueOf(zone[1]), Integer.valueOf(zone[2]), zone[3]); |
9071 | 48 resultList.add(helper); |
49 } | |
50 | |
51 return resultList; | |
52 } | |
53 | |
9260 | 54 public static VegetationZone createFromTableEntry(final String zone, final String min_day_overflow, final String max_day_overflow, final String hexColor) { |
55 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
|
56 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
57 |
9260 | 58 private VegetationZone(final String zone, final Integer min_day_overflow, final Integer max_day_overflow, final String hexColor) { |
9071 | 59 this.zoneName = zone; |
60 this.min_day_overflow = min_day_overflow; | |
61 this.max_day_overflow = max_day_overflow; | |
9260 | 62 this.hexColor = hexColor; |
9071 | 63 } |
64 | |
65 public int getMax_day_overflow() { | |
66 return this.max_day_overflow; | |
67 } | |
68 | |
69 public String getZoneName() { | |
9260 | 70 if (this.zoneName == null || this.zoneName.equals("")) { |
71 return "---"; | |
72 } | |
9071 | 73 return this.zoneName; |
74 } | |
75 | |
9260 | 76 public String getHexColor() { |
77 try { | |
78 final int test = Integer.decode(this.hexColor); | |
79 return this.hexColor; | |
80 } | |
81 catch (final NumberFormatException e) { | |
82 return "#ffffff"; | |
83 } | |
84 } | |
85 | |
9071 | 86 public int getMin_day_overflow() { |
87 return this.min_day_overflow; | |
88 } | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
89 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
90 public static final List<VegetationZone> getStandardList() { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
91 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
92 final List<VegetationZone> list = new ArrayList<>(); |
9260 | 93 list.add(new VegetationZone("Zonaler Wald", 0, 5, "#336600")); |
94 list.add(new VegetationZone("Hartholzaue, trocken", 6, 40, "#00cc00")); | |
95 list.add(new VegetationZone("Hartholzaue, feucht", 41, 80, "#66ff33")); | |
96 list.add(new VegetationZone("Silberweidenwald", 81, 140, "#008080")); | |
97 list.add(new VegetationZone("Weidengebüsch", 141, 200, "#33cccc")); | |
98 list.add(new VegetationZone("Uferröhricht", 201, 260, "#ffa8ff")); | |
99 list.add(new VegetationZone("Uferpioniere", 261, 320, "#ff0000")); | |
100 list.add(new VegetationZone("Vegetationslos", 321, 364, "#b2b2b2")); | |
101 list.add(new VegetationZone("Wasserfläche", 365, 365, "#0066ff")); | |
9118
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 return list; |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
104 } |
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 public static final String parseListToDataString(final List<VegetationZone> list) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
107 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
108 java.util.Collections.sort(list); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
109 final StringBuilder builder = new StringBuilder(); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
110 for (final VegetationZone zone : list) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
111 builder.append(zone.getZoneName()); |
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.getMin_day_overflow()); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
114 builder.append(TABLE_CELL_SEPARATOR); |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
115 builder.append(zone.getMax_day_overflow()); |
9260 | 116 builder.append(TABLE_CELL_SEPARATOR); |
117 builder.append(zone.getHexColor()); | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
118 builder.append(TABLE_ROW_SEPARATOR); |
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 return builder.toString(); |
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 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
123 |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
124 @Override |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
125 public int compareTo(final VegetationZone o) { |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
126 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
|
127 if (basicCompare == 0) |
9260 | 128 return Integer.valueOf(this.getMax_day_overflow()).compareTo(o.getMax_day_overflow()); // wenn min==min && max==max, alphabetisch sortieren? |
129 | |
130 if (basicCompare == 0) { | |
131 return 1; // for treeSet | |
132 } | |
133 | |
9118
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
134 return basicCompare; |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
135 } |
431f1c269be5
Veg-Zone Table improved, State change data recovery;
gernotbelger
parents:
9071
diff
changeset
|
136 |
9260 | 137 public static final boolean zonesAreOverlapping(final List<VegetationZone> list) { |
138 for (final VegetationZone zone : list) { | |
139 for (final VegetationZone zoneOther : list) { | |
140 if (zone != zoneOther) { | |
141 final boolean overlaps = zone.overlaps(zoneOther); | |
142 if (overlaps) { | |
143 return overlaps; // cancel. only one zone has to overlap | |
144 } | |
145 } | |
146 } | |
147 } | |
148 | |
149 return false; | |
150 } | |
151 | |
152 public static final boolean hasGaps(final List<VegetationZone> list, final int lower, final int upper) { | |
153 | |
154 if ((upper - lower) == 0) | |
155 return true; | |
156 | |
157 final TreeSet<VegetationZone> treeList = new TreeSet<>(); | |
158 treeList.addAll(list); | |
159 int lowerCompare = lower; | |
160 for (final VegetationZone zone : treeList) { | |
161 if (zone.getLowerFromTo() > (lowerCompare + 1)) { // nicht inklusiv | |
162 return true; | |
163 } | |
164 lowerCompare = zone.getUpperFromTo(); | |
165 } | |
166 if ((lowerCompare) < upper) | |
167 return true; // am Ende nicht geschlossen | |
168 | |
169 return false; | |
170 } | |
171 | |
172 private boolean overlaps(final VegetationZone otherZone) { | |
173 final int otherLower = otherZone.getLowerFromTo(); | |
174 final int otherUpper = otherZone.getUpperFromTo(); | |
175 | |
176 final int upper = getUpperFromTo(); | |
177 final int lower = getLowerFromTo(); | |
178 final int otherSchwerpunkt = (otherLower + otherUpper) / 2; | |
179 if ((otherUpper <= upper && otherUpper >= lower)) { | |
180 return true; | |
181 } else if (otherLower >= lower && otherLower <= upper) { | |
182 return true; | |
183 } else if (otherSchwerpunkt >= (lower) && otherSchwerpunkt <= (upper)) { | |
184 return true; | |
185 } | |
186 return false; | |
187 } | |
188 | |
189 public Integer getLowerFromTo() { | |
190 return this.min_day_overflow < this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow; // Math. is forbidden :-( | |
191 } | |
192 | |
193 public Integer getUpperFromTo() { | |
194 return this.min_day_overflow > this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow;// Math. is forbidden :-( | |
195 } | |
196 | |
9071 | 197 } |