[PATCH] VegetationZone color added and disabled
Wald Commits
scm-commit at wald.intevation.org
Tue Jul 17 10:59:36 CEST 2018
# HG changeset patch
# User gernotbelger
# Date 1531817967 -7200
# Node ID b570b6fcc052e3eda222f92cc71967b73a113f23
# Parent 66b003701546622cb4bfa8e9b738fa3956fa37a0
VegetationZone color added and disabled
diff -r 66b003701546 -r b570b6fcc052 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/commons/UInfoResultType.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/commons/UInfoResultType.java Mon Jul 16 08:43:07 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/commons/UInfoResultType.java Tue Jul 17 10:59:27 2018 +0200
@@ -151,6 +151,19 @@
}
};
+ public static final UInfoResultType vegzone_color = new UInfoResultType(null, "uinfo.export.csv.meta.header.veg.color") {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public String exportValue(final CallContext context, final Object value) {
+ return exportStringValue(value);
+ }
+
+ @Override
+ protected NumberFormat createFormatter(final CallContext context) {
+ throw new UnsupportedOperationException();
+ }
+ };
public static final UInfoResultType vegdauervon = new UInfoResultType(null, "uinfo.export.csv.meta.header.veg.dauervon") {
private static final long serialVersionUID = 1L;
@@ -173,9 +186,8 @@
@Override
public String exportValue(final CallContext context, final Object value) {
-
- final double doubleValue = asDouble(value);
- return exportDoubleValue(context, doubleValue);
+ // valix hex-Check?
+ return String.valueOf(value);
}
@Override
diff -r 66b003701546 -r b570b6fcc052 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZone.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZone.java Mon Jul 16 08:43:07 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZone.java Tue Jul 17 10:59:27 2018 +0200
@@ -11,6 +11,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.TreeSet;
/**
* @author Domenico Nardi Tironi
@@ -18,12 +19,15 @@
*/
public class VegetationZone implements Comparable<VegetationZone> {
- // IMMER ABGLEICHEN MIT VEGETATIONZONE IM CLIENT SuperVegZonesTablePanel.TABLE_CELL_SEPARATOR
+ // IMMER ABGLEICHEN MIT VegetationZone.class Server und Client
+ public static final boolean HAS_COLORS_EDITABLE = false;
+
private static final String TABLE_CELL_SEPARATOR = "TABLE_CELL_SEPARATOR";
private static final String TABLE_ROW_SEPARATOR = "TABLE_ROW_SEPARATOR";
private final String zoneName;
private final int min_day_overflow;
private final int max_day_overflow;
+ private final String hexColor;
public static List<VegetationZone> parse(final String zonesRaw) {
final List<VegetationZone> resultList = new ArrayList<>();
@@ -40,21 +44,22 @@
}
for (final String[] zone : results) {
- final VegetationZone helper = new VegetationZone(zone[0], Integer.valueOf(zone[1]), Integer.valueOf(zone[2]));
+ final VegetationZone helper = new VegetationZone(zone[0], Integer.valueOf(zone[1]), Integer.valueOf(zone[2]), zone[3]);
resultList.add(helper);
}
return resultList;
}
- public static VegetationZone createFromTableEntry(final String zone, final String min_day_overflow, final String max_day_overflow) {
- return new VegetationZone(zone, Integer.valueOf(min_day_overflow), Integer.valueOf(max_day_overflow)); // Error-Handling?
+ public static VegetationZone createFromTableEntry(final String zone, final String min_day_overflow, final String max_day_overflow, final String hexColor) {
+ return new VegetationZone(zone, Integer.valueOf(min_day_overflow), Integer.valueOf(max_day_overflow), hexColor); // Error-Handling?
}
- private VegetationZone(final String zone, final Integer min_day_overflow, final Integer max_day_overflow) {
+ private VegetationZone(final String zone, final Integer min_day_overflow, final Integer max_day_overflow, final String hexColor) {
this.zoneName = zone;
this.min_day_overflow = min_day_overflow;
this.max_day_overflow = max_day_overflow;
+ this.hexColor = hexColor;
}
public int getMax_day_overflow() {
@@ -62,9 +67,22 @@
}
public String getZoneName() {
+ if (this.zoneName == null || this.zoneName.equals("")) {
+ return "---";
+ }
return this.zoneName;
}
+ public String getHexColor() {
+ try {
+ final int test = Integer.decode(this.hexColor);
+ return this.hexColor;
+ }
+ catch (final NumberFormatException e) {
+ return "#ffffff";
+ }
+ }
+
public int getMin_day_overflow() {
return this.min_day_overflow;
}
@@ -72,15 +90,15 @@
public static final List<VegetationZone> getStandardList() {
final List<VegetationZone> list = new ArrayList<>();
- list.add(new VegetationZone("Zonaler Wald", 0, 5));
- list.add(new VegetationZone("Hartholzaue, trocken", 5, 40));
- list.add(new VegetationZone("Hartholzaue, feucht", 40, 80));
- list.add(new VegetationZone("Silberweidenwald", 80, 140));
- list.add(new VegetationZone("Weidengebüsch", 140, 200));
- list.add(new VegetationZone("Uferröhricht", 200, 260));
- list.add(new VegetationZone("Uferpioniere", 260, 320));
- list.add(new VegetationZone("Vegetationslos", 320, 365));
- list.add(new VegetationZone("Wasserfläche", 365, 365));
+ list.add(new VegetationZone("Zonaler Wald", 0, 5, "#336600"));
+ list.add(new VegetationZone("Hartholzaue, trocken", 6, 40, "#00cc00"));
+ list.add(new VegetationZone("Hartholzaue, feucht", 41, 80, "#66ff33"));
+ list.add(new VegetationZone("Silberweidenwald", 81, 140, "#008080"));
+ list.add(new VegetationZone("Weidengebüsch", 141, 200, "#33cccc"));
+ list.add(new VegetationZone("Uferröhricht", 201, 260, "#ffa8ff"));
+ list.add(new VegetationZone("Uferpioniere", 261, 320, "#ff0000"));
+ list.add(new VegetationZone("Vegetationslos", 321, 364, "#b2b2b2"));
+ list.add(new VegetationZone("Wasserfläche", 365, 365, "#0066ff"));
return list;
}
@@ -95,6 +113,8 @@
builder.append(zone.getMin_day_overflow());
builder.append(TABLE_CELL_SEPARATOR);
builder.append(zone.getMax_day_overflow());
+ builder.append(TABLE_CELL_SEPARATOR);
+ builder.append(zone.getHexColor());
builder.append(TABLE_ROW_SEPARATOR);
}
return builder.toString();
@@ -105,8 +125,73 @@
public int compareTo(final VegetationZone o) {
final int basicCompare = Integer.valueOf(this.getMin_day_overflow()).compareTo(o.getMin_day_overflow());
if (basicCompare == 0)
- return Integer.compare(this.getMax_day_overflow(), o.getMax_day_overflow()); // wenn min==min && max==max, alphabetisch sortieren?
+ return Integer.valueOf(this.getMax_day_overflow()).compareTo(o.getMax_day_overflow()); // wenn min==min && max==max, alphabetisch sortieren?
+
+ if (basicCompare == 0) {
+ return 1; // for treeSet
+ }
+
return basicCompare;
}
+ public static final boolean zonesAreOverlapping(final List<VegetationZone> list) {
+ for (final VegetationZone zone : list) {
+ for (final VegetationZone zoneOther : list) {
+ if (zone != zoneOther) {
+ final boolean overlaps = zone.overlaps(zoneOther);
+ if (overlaps) {
+ return overlaps; // cancel. only one zone has to overlap
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public static final boolean hasGaps(final List<VegetationZone> list, final int lower, final int upper) {
+
+ if ((upper - lower) == 0)
+ return true;
+
+ final TreeSet<VegetationZone> treeList = new TreeSet<>();
+ treeList.addAll(list);
+ int lowerCompare = lower;
+ for (final VegetationZone zone : treeList) {
+ if (zone.getLowerFromTo() > (lowerCompare + 1)) { // nicht inklusiv
+ return true;
+ }
+ lowerCompare = zone.getUpperFromTo();
+ }
+ if ((lowerCompare) < upper)
+ return true; // am Ende nicht geschlossen
+
+ return false;
+ }
+
+ private boolean overlaps(final VegetationZone otherZone) {
+ final int otherLower = otherZone.getLowerFromTo();
+ final int otherUpper = otherZone.getUpperFromTo();
+
+ final int upper = getUpperFromTo();
+ final int lower = getLowerFromTo();
+ final int otherSchwerpunkt = (otherLower + otherUpper) / 2;
+ if ((otherUpper <= upper && otherUpper >= lower)) {
+ return true;
+ } else if (otherLower >= lower && otherLower <= upper) {
+ return true;
+ } else if (otherSchwerpunkt >= (lower) && otherSchwerpunkt <= (upper)) {
+ return true;
+ }
+ return false;
+ }
+
+ public Integer getLowerFromTo() {
+ return this.min_day_overflow < this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow; // Math. is forbidden :-(
+ }
+
+ public Integer getUpperFromTo() {
+ return this.min_day_overflow > this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow;// Math. is forbidden :-(
+ }
+
}
diff -r 66b003701546 -r b570b6fcc052 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculation.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculation.java Mon Jul 16 08:43:07 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculation.java Tue Jul 17 10:59:27 2018 +0200
@@ -57,7 +57,8 @@
final ResultRow row2 = ResultRow.create().//
putValue(UInfoResultType.vegname, zone.getZoneName()).//
putValue(UInfoResultType.vegdauervon, zone.getMin_day_overflow()).//
- putValue(UInfoResultType.vegdauerbis, zone.getMax_day_overflow());
+ putValue(UInfoResultType.vegdauerbis, zone.getMax_day_overflow()).//
+ putValue(UInfoResultType.vegzone_color, zone.getHexColor());
rows.add(row2);
}
diff -r 66b003701546 -r b570b6fcc052 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java Mon Jul 16 08:43:07 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java Tue Jul 17 10:59:27 2018 +0200
@@ -41,7 +41,8 @@
header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegname));
header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegdauervon));
header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegdauerbis));
-
+ if (VegetationZone.HAS_COLORS_EDITABLE)
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegzone_color));
exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
}
@@ -74,7 +75,7 @@
exportContextPDF.addJRMetadata(source, "veg_name", UInfoResultType.vegname);
exportContextPDF.addJRMetadata(source, "veg_dauervon", UInfoResultType.vegdauervon);
exportContextPDF.addJRMetadata(source, "veg_dauerbis", UInfoResultType.vegdauerbis);
-
+ // TODO add color to jasper-template and here
}
protected String[] formatRow(final IExportContext context, final ResultRow row) {
@@ -84,7 +85,8 @@
lines.add(context.formatRowValue(row, UInfoResultType.vegname));
lines.add(context.formatRowValue(row, UInfoResultType.vegdauervon));
lines.add(context.formatRowValue(row, UInfoResultType.vegdauerbis));
-
+ if (VegetationZone.HAS_COLORS_EDITABLE)
+ lines.add(context.formatRowValue(row, UInfoResultType.vegzone_color));
return lines.toArray(new String[lines.size()]);
}
diff -r 66b003701546 -r b570b6fcc052 artifacts/src/main/resources/messages.properties
--- a/artifacts/src/main/resources/messages.properties Mon Jul 16 08:43:07 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties Tue Jul 17 10:59:27 2018 +0200
@@ -1110,6 +1110,7 @@
uinfo.export.csv.meta.header.veg.name = Vegetationszonen
uinfo.export.csv.meta.header.veg.dauervon = \u00dcberflutungsdauer von [d/a]
uinfo.export.csv.meta.header.veg.dauerbis = \u00dcberflutungsdauer bis [d/a]
+uinfo.export.csv.meta.header.veg.color = Farbe
uinfo.export.url.inundationduration.inundationduration = \u00dcberflutungsdauer ({0})
uinfo.export.url.inundationduration.vegetation = Vegetationszonen ({0})
uinfo.export.url.inundationduration.vegetation_scenario= Vegetationszonen Szenario ({0}, {1}cm)
diff -r 66b003701546 -r b570b6fcc052 artifacts/src/main/resources/messages_de.properties
--- a/artifacts/src/main/resources/messages_de.properties Mon Jul 16 08:43:07 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties Tue Jul 17 10:59:27 2018 +0200
@@ -1110,6 +1110,7 @@
uinfo.export.csv.meta.header.veg.name = Vegetationszonen
uinfo.export.csv.meta.header.veg.dauervon = \u00dcberflutungsdauer von [d/a]
uinfo.export.csv.meta.header.veg.dauerbis = \u00dcberflutungsdauer bis [d/a]
+uinfo.export.csv.meta.header.veg.color = Farbe
uinfo.export.url.inundationduration.inundationduration = \u00dcberflutungsdauer ({0})
uinfo.export.url.inundationduration.vegetation = Vegetationszonen ({0})
uinfo.export.url.inundationduration.vegetation_scenario= Vegetationszonen Szenario ({0}, {1}cm)
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Mon Jul 16 08:43:07 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Tue Jul 17 10:59:27 2018 +0200
@@ -1525,8 +1525,6 @@
String uinfo_vegetation_zones_validation_from_greater_to();
- String uinfo_vegetation_zones_invalid_integer();
-
String chart_settings_export_metadata();
String sinfo_flow_depth_development_twin_panel_max_count_msg();
@@ -1561,8 +1559,6 @@
String uinfo_salix_dmwspl_short();
- String uinfo_salix_invalid_double();
-
String uinfo_salix_km_limit_exceed();
String uinfo_salix_km_overlap();
@@ -1574,4 +1570,14 @@
String uinfo_salix_input_complete();
String common_input_hint_year();
+
+ String error_invalid_integer();
+
+ String error_invalid_double();
+
+ String uinfo_vegetation_zone_color();
+
+ String uinfo_vegetation_zone_overlap();
+
+ String uinfo_vegetation_zone_has_gaps();
}
\ No newline at end of file
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Mon Jul 16 08:43:07 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Tue Jul 17 10:59:27 2018 +0200
@@ -326,6 +326,8 @@
ele_window_save_error = Error while saving elevations.
ele_window_geometry_error = The geometry is not supported:
+error_invalid_integer = Nur Ganzzahlen erlaubt.
+error_invalid_double = Nur Zahlen erlaubt.
error_limit_exceeded_salix = Die Eingabe ist auf 5 Werte beschr\u00e4nkt.
error_no_data_for_river = F\u00fcr das gew\u00e4hlte Gew\u00e4sser liegen keine Daten vor.
unexpected_exception = There occured an unexpected exception
@@ -824,6 +826,9 @@
uinfo_salix_line_export = Salix-Linie Export
uinfo_vegetation_zones_export = Vegetationszonen Export
+uinfo_vegetation_zone_overlap = Bereiche \u00fcberlappen.
+uinfo_vegetation_zone_has_gaps = Die Wertebelegung (0-365) weist L\u00fccken auf.
+uinfo_vegetation_zone_color = Farbe
uinfo_vegetation_zone_label = Vegetationszone
uinfo_vegetation_zones_label = Vegetationszonen
uinfo_vegetation_zones_from = \u00dcfd von [d/a]
@@ -831,8 +836,6 @@
uinfo_vegetation_zones_validation_empty = Eingabefeld leer.
uinfo_vegetation_zones_validation_range = Werte m\u00fcssen zwischen 0 und 365 liegen.
uinfo_vegetation_zones_validation_from_greater_to = Der Wert f\u00fcr "\u00dcfd von" muss kleiner als "\u00dcfd bis".
-uinfo_vegetation_zones_invalid_integer = Nur Ganzzahlen erlaubt.
-uinfo_salix_invalid_double = Nur Zahlen erlaubt.
uinfo_salix_km_limit_exceed = Die Zahl ist au\u00dferhalb des g\u00fcltigen km-Bereichs.
uinfo_salix_km_overlap = Km-Bereiche \u00fcberlappen.
uinfo_salix_km_has_gaps = Der Km-Bereich ist nicht vollst. belegt.
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Mon Jul 16 08:43:07 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Tue Jul 17 10:59:27 2018 +0200
@@ -326,6 +326,8 @@
ele_window_save_error = Fehler beim Speichern der H\u00f6hen.
ele_window_geometry_error = Die Geometrie wird nicht unterst\u00fctzt:
+error_invalid_integer = Nur Ganzzahlen erlaubt.
+error_invalid_double = Nur Zahlen erlaubt.
error_limit_exceeded_salix = Die Eingabe ist auf 5 Werte beschr\u00e4nkt.
error_no_data_for_river = F\u00fcr das gew\u00e4hlte Gew\u00e4sser liegen keine Daten vor.
unexpected_exception = Ein unerwarteter Fehler ist aufgetreten
@@ -824,15 +826,16 @@
uinfo_salix_line_export = Salix-Linie Export
uinfo_vegetation_zones_export = Vegetationszonen Export
+uinfo_vegetation_zone_overlap = Bereiche \u00fcberlappen.
+uinfo_vegetation_zone_has_gaps = Die Wertebelegung (0-365) weist L\u00fccken auf.
+uinfo_vegetation_zone_color = Farbe
uinfo_vegetation_zone_label = Vegetationszone
uinfo_vegetation_zones_label = Vegetationszonen
uinfo_vegetation_zones_from = \u00dcfd von [d/a]
uinfo_vegetation_zones_to = \u00dcfd bis [d/a]
uinfo_vegetation_zones_validation_empty = Eingabefeld leer.
uinfo_vegetation_zones_validation_range = Werte m\u00fcssen zwischen 0 und 365 liegen.
-uinfo_vegetation_zones_validation_from_greater_to = Der Wert f\u00fcr "\u00dcfd von" muss kleiner als "\u00dcfd bis".
-uinfo_vegetation_zones_invalid_integer = Nur Ganzzahlen erlaubt.
-uinfo_salix_invalid_double = Nur Zahlen erlaubt.
+uinfo_vegetation_zones_validation_from_greater_to = Der Wert f\u00fcr "\u00dcfd von" muss kleiner als "\u00dcfd bis".
uinfo_salix_km_limit_exceed = Die Zahl ist au\u00dferhalb des g\u00fcltigen km-Bereichs.
uinfo_salix_km_overlap = Km-Bereiche \u00fcberlappen.
uinfo_salix_km_has_gaps = Der Km-Bereich ist nicht vollst. belegt.
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Mon Jul 16 08:43:07 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Tue Jul 17 10:59:27 2018 +0200
@@ -118,7 +118,6 @@
final List<String> errors = this.validate();
if (errors.size() > 0) {
showErrors(errors); // TODO: do not allow advance state
- // return null;
}
if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) {
final List<Data> data = new ArrayList<Data>();
@@ -136,16 +135,6 @@
return this.inputItem;
}
- private final List<String> checkForEmpty() {
- final List<String> errors = new ArrayList<String>();
-
- if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) {
- errors.add(this.MSG.empty_filter());
- return errors;
- }
- return errors;
- }
-
protected abstract String errorForItemMsg();
protected final void appendValue(final String value) {
@@ -155,7 +144,7 @@
@Override
public final List<String> validate() {
final List<String> errors = new ArrayList<String>();
- errors.addAll(this.checkForEmpty());
+ errors.addAll(ValidationHelper.checkForEmpty(this.inputItem, this.MSG));
final String sValue = this.inputItem.getValueAsString();
return this.behaviour.validate(errors, sValue);
}
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ValidationHelper.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ValidationHelper.java Tue Jul 17 10:59:27 2018 +0200
@@ -0,0 +1,33 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.client.client.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dive4elements.river.client.client.FLYSConstants;
+
+import com.smartgwt.client.widgets.form.fields.TextItem;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public class ValidationHelper {
+ public static final List<String> checkForEmpty(final TextItem inputItem, final FLYSConstants MSG) {
+ final List<String> errors = new ArrayList<String>();
+
+ if (inputItem.getValueAsString() == null || inputItem.getValueAsString().trim().isEmpty()) {
+ errors.add(MSG.empty_filter());
+ return errors;
+ }
+ return errors;
+ }
+}
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/VegZonePanelHelper.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/VegZonePanelHelper.java Tue Jul 17 10:59:27 2018 +0200
@@ -0,0 +1,49 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.client.client.ui;
+
+import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.SortNormalizer;
+import com.smartgwt.client.widgets.grid.events.CellSavedEvent;
+import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public class VegZonePanelHelper {
+
+ public VegZonePanelHelper() {
+
+ }
+
+ public static ListGridField createIntTableField(final String key, final String msg, final boolean canSort, final SortNormalizer normalizer,
+ final IntegerRangeValidator validators) {
+ final ListGridField intField = PanelHelper.createIntTableField(key, msg, canSort, normalizer, validators);
+ intField.addCellSavedHandler(new CellSavedHandler() { // wirkungslos, wenn int-validator bereits vorhanden ist..
+ @Override
+ public void onCellSaved(final CellSavedEvent event) {
+ final Object value = event.getNewValue();
+ event.getRecord().setAttribute(key, event.getOldValue());
+ try {
+ final int intValue = Integer.valueOf(String.valueOf(value));
+ event.getRecord().setAttribute(key, intValue);
+ }
+ catch (final NumberFormatException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ return intField;
+
+ }
+
+}
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/AbstractVegZonesTablePanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/AbstractVegZonesTablePanel.java Mon Jul 16 08:43:07 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/AbstractVegZonesTablePanel.java Tue Jul 17 10:59:27 2018 +0200
@@ -14,6 +14,7 @@
import org.dive4elements.river.client.client.ui.AbstractUIProvider;
import org.dive4elements.river.client.client.ui.PanelHelper;
+import org.dive4elements.river.client.client.ui.VegZonePanelHelper;
import org.dive4elements.river.client.shared.model.Data;
import org.dive4elements.river.client.shared.model.DataItem;
import org.dive4elements.river.client.shared.model.DataList;
@@ -22,16 +23,20 @@
import org.dive4elements.river.client.shared.model.VegetationZone;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Label;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.form.fields.ColorItem;
import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.SortNormalizer;
+import com.smartgwt.client.widgets.grid.events.CellSavedEvent;
+import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
@@ -46,8 +51,31 @@
private static final long serialVersionUID = 1L;
private static final String datakey = "vegzones";
+ final protected List<ListGridRecord> records = new ArrayList<ListGridRecord>();
+ private final Label validationLabel = new Label();
+ private final ListGrid elements = new ListGrid() {
- private final ListGrid elements = new ListGrid();
+ @Override
+ protected String getCellCSSText(final ListGridRecord record, final int rowNum, final int colNum) {
+ if (record != null) {
+ if (getFieldName(colNum).equals("color")) {
+ final String color = record.getAttribute("color");
+ return "background-color:" + color + ";";
+ }
+ }
+ return super.getCellCSSText(record, rowNum, colNum); // is null...
+ }
+
+ @Override
+ protected Canvas getCellHoverComponent(final Record record, final java.lang.Integer rowNum, final java.lang.Integer colNum) {
+ if (record != null) {
+ if (getFieldName(colNum).equals("color")) {
+ return null;// "background-color:" + color + ";";
+ }
+ }
+ return super.getCellHoverComponent(record, rowNum, colNum); // is null...
+ }
+ };
protected final ListGrid createTable(final Layout root, final DataList data, final String width, final boolean editable) {
@@ -59,33 +87,131 @@
this.elements.setShowHeaderContextMenu(false);
this.elements.setCanReorderFields(false);
this.elements.setCanSort(true);
- this.elements.setSortField(1);
+ this.elements.setSortField("to");
this.elements.setCanResizeFields(false);
this.elements.setCanEdit(editable);
+ final ListGridField internalNumber = new ListGridField("number", "number"); // valid only if no data is to be added
+ internalNumber.setCanSort(false);
+ internalNumber.setHidden(true);
+
final ListGridField vegzoneField = new ListGridField("vegzone", this.MSG.uinfo_vegetation_zones_label());
vegzoneField.setType(ListGridFieldType.TEXT);
vegzoneField.setWidth("*"); // 245
vegzoneField.setCanSort(false);
vegzoneField.setCanDragResize(true);
+ vegzoneField.setCanEdit(true); // neue Anforderung - doch nicht? ???
- final ListGridField fromField = createIntTableField("from", this.MSG.uinfo_vegetation_zones_from(), true);
- final ListGridField toField = createIntTableField("to", this.MSG.uinfo_vegetation_zones_to(), false);// nicht sortierbar nach "ÜFDauer bis"
+ final ListGridField fromField = VegZonePanelHelper.createIntTableField("from", this.MSG.uinfo_vegetation_zones_from(), true, getNormalizer(),
+ getValidator());
+ fromField.addCellSavedHandler(new CellSavedHandler() {
+ @Override
+ public void onCellSaved(final CellSavedEvent event) {
+ validateRangeOverlap();
+ }
+ });
+ // war mal ne anforderung, dass sich die Werte anderer Zellen ändern, sodass keine lücken entstehen... mach das jetzt
+ // aber über die Validierung. es sei denn, es soll doch wieder erwünscht sein, dass sihc die werte andere Zellen ändern
+ // fromField.addCellSavedHandler(new CellSavedHandler() {
+ //
+ // @Override
+ // public void onCellSaved(final CellSavedEvent event) {
+ //
+ // final ListGridRecord r = event.getRecord();
+ //
+ // final int from = Integer.valueOf(r.getAttribute("from"));
+ // final int to = Integer.valueOf(r.getAttribute("to"));
+ // final String message = validate(r.getAttribute("from"), r.getAttribute("to"), r.getAttribute("zone"),
+ // r.getAttribute("color"));
+ //
+ // final int key = Integer.valueOf(r.getAttribute("number"));
+ // final int lowerKey = key - 1;
+ // final int higherKey = key + 1;
+ //
+ // final ListGridRecord lower = lowerKey > -1 ? AbstractVegZonesTablePanel.this.records.get(lowerKey) : null;
+ // final ListGridRecord higher = higherKey < AbstractVegZonesTablePanel.this.records.size()
+ // ? AbstractVegZonesTablePanel.this.records.get(higherKey)
+ // : null;
+ //
+ // // primary
+ // if (lower != null) {
+ // lower.setAttribute("to", r.getAttribute("from"));
+ //
+ // // additional:
+ // final int lowerFrom = Integer.valueOf(lower.getAttribute("from"));
+ // if (lowerFrom > from) {
+ // lower.setAttribute("from", from);
+ // }
+ // }
+ //
+ // if (from > to) {
+ // r.setAttribute("to", from);
+ // if (higher != null) {
+ // // higher.setAttribute("from", from); //ist vermutlich too much
+ // final int higherTo = Integer.valueOf(higher.getAttribute("to"));
+ // if (from > higherTo) {
+ // // higher.setAttribute("to", from); //ist vermutlich too much
+ // }
+ // }
+ // }
+ // }
+ // });
+
+ final ListGridField toField = VegZonePanelHelper.createIntTableField("to", this.MSG.uinfo_vegetation_zones_to(), false, getNormalizer(),
+ getValidator());
+ toField.addCellSavedHandler(new CellSavedHandler() {
+ @Override
+ public void onCellSaved(final CellSavedEvent event) {
+ validateRangeOverlap();
+ }
+ });
+ // nicht
+ // sortierbar nach
+ // "ÜFDauer bis"
+ toField.setCanEdit(true);// neue Anforderung - doch nicht?
+
+ final ListGridField colorField = new ListGridField("color", this.MSG.uinfo_vegetation_zone_color());
+ colorField.setHidden(VegetationZone.HAS_COLORS_EDITABLE ? false : true);
+ final ColorItem item = new ColorItem();
+ colorField.setEditorProperties(item);
+
+ colorField.setWidth(80); // 25 too small
+ colorField.setAlign(Alignment.LEFT);
+ colorField.setCanSort(false);
+ colorField.setCanDragResize(false);
+
+ // sortierbar nach
+ // "ÜFDauer bis"
+ toField.setCanEdit(true);// neue Anforderung
if (editable) {
- final ListGridField removeField = createRemoveField();
- this.elements.setFields(vegzoneField, fromField, toField, removeField);
+ final ListGridField removeField = PanelHelper.createRemoveField(this.elements, GWT.getHostPageBaseURL() + this.MSG.removeFeature());
+ this.elements.addRecordClickHandler(new RecordClickHandler() { // adding another custom record-Remove-Handler which is not included in the
+ // Panelhelper TODO: MERGE WITH SupraRegionalPanel!!
+ @Override
+ public void onRecordClick(final RecordClickEvent event) {
+ if (event.getField().getName().equals(removeField.getName())) {
+ validateRangeOverlap();
+ }
+ }
+ });
+ this.elements.setFields(vegzoneField, fromField, toField, colorField, removeField);
} else {
- this.elements.setFields(vegzoneField, fromField, toField);
+ this.elements.setFields(internalNumber, vegzoneField, fromField, toField, colorField);
}
+ this.elements.sort("from", SortDirection.ASCENDING);
+ this.validationLabel.setHeight("10px");
+ this.validationLabel.getElement().getStyle().setColor("red");
addDataInit(data);
root.setWidth(width);
root.addMember(title);
root.addMember(this.elements);
- root.addMember(PanelHelper.getSpacer(10));
+ root.addMember(PanelHelper.getSpacer(3));
+ root.addMember(this.validationLabel);
+ root.addMember(PanelHelper.getSpacer(3));
return this.elements;
}
@@ -110,50 +236,6 @@
return normalizer;
}
- private ListGridField createIntTableField(final String key, final String msg, final boolean canSort) {
- final ListGridField intField = new ListGridField(key, msg);
- intField.setType(ListGridFieldType.INTEGER);
- intField.setValidators(getValidator());
- intField.setWidth(90);
- intField.setAlign(Alignment.RIGHT);
- intField.setSortNormalizer(getNormalizer());
- intField.setCanSort(canSort);
- intField.setCanDragResize(false);
-
- return intField;
- }
-
- private ListGridField createRemoveField() {
-
- final ListGridField removeField = new ListGridField("_removeRecord", "Remove Record") {
- {
- setType(ListGridFieldType.ICON);
- setIcon(GWT.getHostPageBaseURL() + AbstractVegZonesTablePanel.this.MSG.removeFeature());
- setCanEdit(false);
- setCanFilter(false);
- setCanSort(false);
- setCanGroupBy(false);
- setCanFreeze(false);
- setWidth(25);
- setCanDragResize(false);
- super.setCanToggle(false);
- }
- };
-
- this.elements.addRecordClickHandler(new RecordClickHandler() {
- @Override
- public void onRecordClick(final RecordClickEvent event) {
- // Just handle remove-clicks
- if (!event.getField().getName().equals(removeField.getName())) {
- return;
- }
- event.getViewer().removeData(event.getRecord());
- }
- });
-
- return removeField;
- }
-
public abstract void createWidget(final Layout root, final DataList data);
private final void addDataInit(final DataList data) {
@@ -189,6 +271,8 @@
layout.addMember(root);
layout.addMember(submit);
+ validateRangeOverlap();// init Text
+
return layout;
}
@@ -200,7 +284,7 @@
vLayout.setWidth(130);
final Label label = new Label(dataList.getLabel());
label.setWidth("200px");
- label.setHeight(25);
+ label.setHeight("25px");
final List<Data> items = dataList.getAll();
final Data str = getData(items, datakey);
@@ -210,7 +294,7 @@
for (final VegetationZone entry : entries) {
final Label dateLabel = new Label(entry.getZoneName() + " (" + entry.getMin_day_overflow() + "-" + entry.getMax_day_overflow() + ")");
- dateLabel.setHeight(20);
+ dateLabel.setHeight("20px");
vLayout.addMember(dateLabel);
}
final Canvas back = getBackButton(dataList.getState());
@@ -229,16 +313,21 @@
if (lgr.length == 0) {
return new Data[0]; // TODO: Klären, ob Vegetationszonen-Auswahl Pflicht ist, ob es ein Fallback geben soll usw.
}
+
+ final DataItem item = new DefaultDataItem(datakey, null, VegetationZone.parseListToDataString(getZones(lgr))); // DATA-key
+ data.add(new DefaultData(datakey, null, null, new DataItem[] { item }));
+ return data.toArray(new Data[data.size()]);
+ }
+
+ protected final List<VegetationZone> getZones(final ListGridRecord[] lgr) {
final List<VegetationZone> zoneList = new ArrayList<VegetationZone>();
for (final ListGridRecord element : lgr) {
final Record r = element;
- final VegetationZone zone = VegetationZone.createFromTableEntry(r.getAttribute("vegzone"), r.getAttribute("from"), r.getAttribute("to"));
+ final VegetationZone zone = VegetationZone.createFromTableEntry(r.getAttribute("vegzone"), r.getAttribute("from"), r.getAttribute("to"),
+ r.getAttribute("color"));
zoneList.add(zone);
}
-
- final DataItem item = new DefaultDataItem(datakey, null, VegetationZone.parseListToDataString(zoneList)); // DATA-key
- data.add(new DefaultData(datakey, null, null, new DataItem[] { item }));
- return data.toArray(new Data[data.size()]);
+ return zoneList;
}
public final ListGridRecord createEntry(final VegetationZone row) {
@@ -246,7 +335,7 @@
final String vegzone = row.getZoneName();
final Integer from = row.getMin_day_overflow();
final Integer to = row.getMax_day_overflow();
-
+ final String colorStr = row.getHexColor();
if (vegzone == null || from == null || to == null) {
return null;
}
@@ -255,7 +344,51 @@
r.setAttribute("vegzone", vegzone);
r.setAttribute("from", from);
r.setAttribute("to", to);
+ r.setAttribute("color", colorStr);
+ r.setAttribute("number", this.records.size());
+ this.records.add(r);
return r;
}
+
+ protected String validate(final String fromInput, final String toInput, final String zoneName, final String hexColor) {
+
+ if (fromInput == null || toInput == null || zoneName == null || hexColor == null || fromInput.trim().isEmpty() || toInput.trim().isEmpty()
+ || zoneName.trim().isEmpty() || hexColor.trim().isEmpty())
+ return this.MSG.uinfo_vegetation_zones_validation_empty();
+
+ try {
+ final Integer from = Integer.valueOf(fromInput);
+ final Integer to = Integer.valueOf(toInput);
+
+ if (from < 0 || from > 365)
+ return this.MSG.uinfo_vegetation_zones_validation_range();
+
+ if (to < 0 || to > 365)
+ return this.MSG.uinfo_vegetation_zones_validation_range();
+
+ if (from > to)
+ return this.MSG.uinfo_vegetation_zones_validation_from_greater_to();
+
+ return null;
+ }
+ catch (final NumberFormatException e) {
+ return this.MSG.error_invalid_integer();
+ }
+ }
+
+ @Override
+ public List<String> validate() {
+ final List<String> errors = new ArrayList<String>();
+
+ if (VegetationZone.zonesAreOverlapping(this.getZones(this.elements.getRecords())))
+ errors.add(this.MSG.uinfo_vegetation_zone_overlap());
+ if (VegetationZone.hasGaps(this.getZones(this.elements.getRecords()), 0, 365))
+ errors.add(this.MSG.uinfo_vegetation_zone_has_gaps());
+ return errors;
+ }
+
+ protected final void validateRangeOverlap() {
+ this.validationLabel.setText(validate().toString().replace("[", "").replace("]", "").replace(",", ""));
+ }
}
\ No newline at end of file
diff -r 66b003701546 -r b570b6fcc052 gwt-client/src/main/java/org/dive4elements/river/client/shared/model/VegetationZone.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/shared/model/VegetationZone.java Mon Jul 16 08:43:07 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/shared/model/VegetationZone.java Tue Jul 17 10:59:27 2018 +0200
@@ -12,6 +12,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.TreeSet;
/**
* @author Domenico Nardi Tironi
@@ -20,11 +21,14 @@
public class VegetationZone implements Comparable<VegetationZone> {
// IMMER ABGLEICHEN MIT VegetationZone.class IM SERVER
+ public static final boolean HAS_COLORS_EDITABLE = false;
+
private static final String TABLE_CELL_SEPARATOR = "TABLE_CELL_SEPARATOR";
private static final String TABLE_ROW_SEPARATOR = "TABLE_ROW_SEPARATOR";
private final String zoneName;
private final int min_day_overflow;
private final int max_day_overflow;
+ private final String hexColor;
public static List<VegetationZone> parse(final String zonesRaw) {
final List<VegetationZone> resultList = new ArrayList<VegetationZone>();
@@ -41,21 +45,22 @@
}
for (final String[] zone : results) {
- final VegetationZone helper = new VegetationZone(zone[0], Integer.valueOf(zone[1]), Integer.valueOf(zone[2]));
+ final VegetationZone helper = new VegetationZone(zone[0], Integer.valueOf(zone[1]), Integer.valueOf(zone[2]), zone[3]);
resultList.add(helper);
}
return resultList;
}
- public static VegetationZone createFromTableEntry(final String zone, final String min_day_overflow, final String max_day_overflow) {
- return new VegetationZone(zone, Integer.valueOf(min_day_overflow), Integer.valueOf(max_day_overflow)); // Error-Handling?
+ public static VegetationZone createFromTableEntry(final String zone, final String min_day_overflow, final String max_day_overflow, final String hexColor) {
+ return new VegetationZone(zone, Integer.valueOf(min_day_overflow), Integer.valueOf(max_day_overflow), hexColor); // Error-Handling?
}
- private VegetationZone(final String zone, final Integer min_day_overflow, final Integer max_day_overflow) {
+ private VegetationZone(final String zone, final Integer min_day_overflow, final Integer max_day_overflow, final String hexColor) {
this.zoneName = zone;
this.min_day_overflow = min_day_overflow;
this.max_day_overflow = max_day_overflow;
+ this.hexColor = hexColor;
}
public int getMax_day_overflow() {
@@ -63,9 +68,22 @@
}
public String getZoneName() {
+ if (this.zoneName == null || this.zoneName.equals("")) {
+ return "---";
+ }
return this.zoneName;
}
+ public String getHexColor() {
+ try {
+ final int test = Integer.decode(this.hexColor);
+ return this.hexColor;
+ }
+ catch (final NumberFormatException e) {
+ return "#ffffff";
+ }
+ }
+
public int getMin_day_overflow() {
return this.min_day_overflow;
}
@@ -73,15 +91,15 @@
public static final List<VegetationZone> getStandardList() {
final List<VegetationZone> list = new ArrayList<VegetationZone>();
- list.add(new VegetationZone("Zonaler Wald", 0, 5));
- list.add(new VegetationZone("Hartholzaue, trocken", 5, 40));
- list.add(new VegetationZone("Hartholzaue, feucht", 40, 80));
- list.add(new VegetationZone("Silberweidenwald", 80, 140));
- list.add(new VegetationZone("Weidengebüsch", 140, 200));
- list.add(new VegetationZone("Uferröhricht", 200, 260));
- list.add(new VegetationZone("Uferpioniere", 260, 320));
- list.add(new VegetationZone("Vegetationslos", 320, 365));
- list.add(new VegetationZone("Wasserfläche", 365, 365));
+ list.add(new VegetationZone("Zonaler Wald", 0, 5, "#336600"));
+ list.add(new VegetationZone("Hartholzaue, trocken", 6, 40, "#00cc00"));
+ list.add(new VegetationZone("Hartholzaue, feucht", 41, 80, "#66ff33"));
+ list.add(new VegetationZone("Silberweidenwald", 81, 140, "#008080"));
+ list.add(new VegetationZone("Weidengebüsch", 141, 200, "#33cccc"));
+ list.add(new VegetationZone("Uferröhricht", 201, 260, "#ffa8ff"));
+ list.add(new VegetationZone("Uferpioniere", 261, 320, "#ff0000"));
+ list.add(new VegetationZone("Vegetationslos", 321, 364, "#b2b2b2"));
+ list.add(new VegetationZone("Wasserfläche", 365, 365, "#0066ff"));
return list;
}
@@ -96,6 +114,8 @@
builder.append(zone.getMin_day_overflow());
builder.append(TABLE_CELL_SEPARATOR);
builder.append(zone.getMax_day_overflow());
+ builder.append(TABLE_CELL_SEPARATOR);
+ builder.append(zone.getHexColor());
builder.append(TABLE_ROW_SEPARATOR);
}
return builder.toString();
@@ -107,7 +127,72 @@
final int basicCompare = Integer.valueOf(this.getMin_day_overflow()).compareTo(o.getMin_day_overflow());
if (basicCompare == 0)
return Integer.valueOf(this.getMax_day_overflow()).compareTo(o.getMax_day_overflow()); // wenn min==min && max==max, alphabetisch sortieren?
+
+ if (basicCompare == 0) {
+ return 1; // for treeSet
+ }
+
return basicCompare;
}
-}
+ public static final boolean zonesAreOverlapping(final List<VegetationZone> list) {
+ for (final VegetationZone zone : list) {
+ for (final VegetationZone zoneOther : list) {
+ if (zone != zoneOther) {
+ final boolean overlaps = zone.overlaps(zoneOther);
+ if (overlaps) {
+ return overlaps; // cancel. only one zone has to overlap
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public static final boolean hasGaps(final List<VegetationZone> list, final int lower, final int upper) {
+
+ if ((upper - lower) == 0)
+ return true;
+
+ final TreeSet<VegetationZone> treeList = new TreeSet<VegetationZone>();
+ treeList.addAll(list);
+ int lowerCompare = lower;
+ for (final VegetationZone zone : treeList) {
+ if (zone.getLowerFromTo() > (lowerCompare + 1)) { // nicht inklusiv
+ return true;
+ }
+ lowerCompare = zone.getUpperFromTo();
+ }
+ if ((lowerCompare) < upper)
+ return true; // am Ende nicht geschlossen
+
+ return false;
+ }
+
+ private boolean overlaps(final VegetationZone otherZone) {
+ final int otherLower = otherZone.getLowerFromTo();
+ final int otherUpper = otherZone.getUpperFromTo();
+
+ final int upper = getUpperFromTo();
+ final int lower = getLowerFromTo();
+ final int otherSchwerpunkt = (otherLower + otherUpper) / 2;
+ if ((otherUpper <= upper && otherUpper >= lower)) {
+ return true;
+ } else if (otherLower >= lower && otherLower <= upper) {
+ return true;
+ } else if (otherSchwerpunkt >= (lower) && otherSchwerpunkt <= (upper)) {
+ return true;
+ }
+ return false;
+ }
+
+ public Integer getLowerFromTo() {
+ return this.min_day_overflow < this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow; // Math. is forbidden :-(
+ }
+
+ public Integer getUpperFromTo() {
+ return this.min_day_overflow > this.max_day_overflow ? this.min_day_overflow : this.max_day_overflow;// Math. is forbidden :-(
+ }
+
+}
\ No newline at end of file
More information about the Dive4Elements-commits
mailing list