[PATCH] uinfo.salix regional workflow

Wald Commits scm-commit at wald.intevation.org
Wed Jul 4 13:06:37 CEST 2018


# HG changeset patch
# User gernotbelger
# Date 1530702388 -7200
# Node ID 5a0e8d76582ed45aa2f9eba1a777d450c8cf15e9
# Parent  5c34fe17ef15ebee5e5ce6187771a65c4a907d33
uinfo.salix regional workflow

diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/doc/conf/artifacts/sinfo.xml
--- a/artifacts/doc/conf/artifacts/sinfo.xml	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/doc/conf/artifacts/sinfo.xml	Wed Jul 04 13:06:28 2018 +0200
@@ -455,7 +455,7 @@
           </facets>
         </outputmode>
 
-        <outputmode name="sinfo_tkh_report" description="output.sinfo_flowdepth_report" mime-type="text/xml" type="report">
+        <outputmode name="sinfo_tkh_report" description="output.sinfo_tkh_report" mime-type="text/xml" type="report">
           <facets>
             <facet name="report" description="facet.sinfo_tkh_report" />
           </facets>
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/doc/conf/artifacts/uinfo.xml
--- a/artifacts/doc/conf/artifacts/uinfo.xml	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/doc/conf/artifacts/uinfo.xml	Wed Jul 04 13:06:28 2018 +0200
@@ -62,7 +62,7 @@
 
     <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
       <from state="state.uinfo.use_scenario" />
-      <to state="state.uinfo.distance_only_part" />
+      <to state="state.uinfo.salix_line" />
       <condition data="use_scenario" value="false" operator="equal" />
     </transition>
 
@@ -72,25 +72,33 @@
 
     <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
       <from state="state.uinfo.scenario_type" />
-      <to state="state.uinfo.distance_only_part" />
-      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal" />
+      <to state="state.uinfo.distance_only_part.from_regional" />
+      <condition data="scenario_selection" value="scenarioType.option1" operator="equal" />
     </transition>
 
-    <state id="state.uinfo.distance_only_part" description="state.uinfo.distance_only_part" state="org.dive4elements.river.artifacts.states.DistanceOnlyPartSelect" helpText="help.state.uinfo.distance_only">
+    <state id="state.uinfo.inundation.scenario.regional" description="state.uinfo.inundation.scenario.regional" state="org.dive4elements.river.artifacts.uinfo.salix.LoadScenarioSelectLimit5" helpText="help.state.uinfo.use_scenario">
+      <data name="sedimentheight" type="String" /> <!-- mittelwasserlage in cm! -->
+    </state>
+
+    <state id="state.uinfo.distance_only_part.from_regional" description="state.uinfo.distance_only_part.from_regional" state="org.dive4elements.river.artifacts.states.DistanceOnlyPartSelect" helpText="help.state.uinfo.distance_only">
       <data name="ld_from_part" type="Double" />
       <data name="ld_to_part" type="Double" />
     </state>
 
     <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-      <from state="state.uinfo.distance_only_part" />
+      <from state="state.uinfo.distance_only_part.from_regional" />
+      <to state="state.uinfo.inundation.scenario.regional" />
+      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal" />
+    </transition>
+
+
+<transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.inundation.scenario.regional" />
       <to state="state.uinfo.salix_line" />
       <condition data="calculation_mode" value="uinfo_salix_line" operator="equal" />
     </transition>
 
 
-
-
-
     <state id="state.uinfo.salix_line" description="state.uinfo.salix_line" state="org.dive4elements.river.artifacts.uinfo.salix.SalixLineState" helpText="help.state.uinfo.salix_line">
       <outputmodes>
 
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/LoadScenarioSelect.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/LoadScenarioSelect.java	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/LoadScenarioSelect.java	Wed Jul 04 13:06:28 2018 +0200
@@ -66,14 +66,7 @@
     @Override
     public boolean validate(final Artifact artifact) throws IllegalArgumentException {
         return true;
-        // final CollisionLoadYearEpochAccess access = new CollisionLoadYearEpochAccess((D4EArtifact) artifact);
-        //
-        // // Second year should be later than first.
-        // if (access.getYears() == null || access.getYears().length == 0)
-        // return true; // TODO: richtig in CollisionLoadYear... implementieren
-        // // throw new IllegalArgumentException("error_years_wrong");
-        //
-        // return true;
+
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadScenarioSelectLimit5.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadScenarioSelectLimit5.java	Wed Jul 04 13:06:28 2018 +0200
@@ -0,0 +1,73 @@
+/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
+ * Software engineering by Intevation GmbH
+ *
+ * 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.artifacts.uinfo.salix;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
+import org.dive4elements.river.artifacts.states.AddTableDataHelper;
+import org.dive4elements.river.artifacts.states.DefaultState;
+import org.w3c.dom.Element;
+
+/** State in which to fetch years for sedminent load calculation. */
+public class LoadScenarioSelectLimit5 extends DefaultState {
+    private static final long serialVersionUID = 1L;
+    /** The log used in this class. */
+    private static Logger log = Logger.getLogger(LoadScenarioSelectLimit5.class);
+
+    /**
+     * The default constructor that initializes an empty State object.
+     */
+    public LoadScenarioSelectLimit5() {
+    }
+
+    /** Year Select Widget. */
+    @Override
+    protected String getUIProvider() {
+        return "uinfo.sedimentheight_select.limit5";
+    }
+
+    @Override
+    protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) {
+        final String datakey = "sedimentheight";
+
+        try {
+            if (datakey.equals(name)) {
+
+                final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "cm", context.getMeta());
+                // no input help wanted
+                // helper.addColumn(0, "pinfrom", "40", "common.client.ui.from", "ICON", "CENTER", "from");
+                // helper.addColumn(1, "pinto", "40", "common.client.ui.to", "ICON", "CENTER", "to");
+                // helper.addColumn(1, "cm", "60", "Delta [cm]", "INTEGER", "RIGHT", null);
+
+                for (int i = -200; i < 210; i = i + 10) {
+                    final Map<String, String> row = new HashMap<>();
+                    row.put("cm", Integer.toString(i));
+                    helper.addRow(row);
+
+                }
+                helper.submitMapToXml();
+            }
+        }
+        catch (final IllegalArgumentException iae) {
+            iae.printStackTrace();
+        }
+    }
+
+    @Override
+    public boolean validate(final Artifact artifact) throws IllegalArgumentException {
+        return true;
+
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java	Wed Jul 04 13:06:28 2018 +0200
@@ -51,11 +51,11 @@
         return null;
     }
 
-    public double getFromPart() {
-        return super.getDouble("ld_from_part");
+    public Double getFromPart() {
+        return getDouble("ld_from_part");
     }
 
-    public double getToPart() {
-        return super.getDouble("ld_to_part");
+    public Double getToPart() {
+        return getDouble("ld_to_part");
     }
 }
\ No newline at end of file
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java	Wed Jul 04 13:06:28 2018 +0200
@@ -51,8 +51,8 @@
         final DoubleRange range = accessSalix.getRange();
         final boolean useScenario = accessSalix.getUseScenario();
         final String selectedScenario = accessSalix.getScenario();
-        final double fromPart = accessSalix.getFromPart();
-        final double toPart = accessSalix.getToPart();
+        final Double fromPart = accessSalix.getFromPart();
+        final Double toPart = accessSalix.getToPart();
         // calculation_mode
         // ld_from , ld_to
         // use_scenario (boolean)
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/src/main/resources/messages.properties
--- a/artifacts/src/main/resources/messages.properties	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties	Wed Jul 04 13:06:28 2018 +0200
@@ -1051,6 +1051,7 @@
 
 state.uinfo.inundation.vegetation=Einteilung der Vegetationszonen und \u00dcberflutunsgdauern
 state.uinfo.inundation.use_scenario=Szenariobetrachtung
+state.uinfo.inundation.scenario.regional = Eingabe der \u00c4nderung der Mittelwasserspiegellage (bis zu 5 Werte m\u00f6glich)
 state.uinfo.inundation.scenario = Werte f\u00fcr \u00c4nderung der Sohl- bzw. Mittelwasserlage eingeben
 state.uinfo.use_scenario=Szenariobetrachtung
 useScenario.option = Zus\u00e4tzlich Szenariobetrachtung miteinbeziehen?
@@ -1064,6 +1065,7 @@
 scenarioType.option3 = Historische Betrachtung 
 help.state.uinfo.scenario_type=${help.url}/OnlineHilfe/UINFO#help.state.uinfo.scenario_type
 
+state.uinfo.distance_only_part.from_regional= Teilabschnitt
 state.uinfo.distance_only_part = Teilabschnitt
 help.state.uinfo.distance_only_part = ${help.url}/OnlineHilfe/SINFO#help.state.sinfo.distance_only_part 
 
diff -r 5c34fe17ef15 -r 5a0e8d76582e artifacts/src/main/resources/messages_de.properties
--- a/artifacts/src/main/resources/messages_de.properties	Wed Jul 04 12:00:57 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties	Wed Jul 04 13:06:28 2018 +0200
@@ -1051,6 +1051,7 @@
 
 state.uinfo.inundation.vegetation=Einteilung der Vegetationszonen und \u00dcberflutunsgdauern
 state.uinfo.inundation.use_scenario=Szenariobetrachtung
+state.uinfo.inundation.scenario.regional = Eingabe der \u00c4nderung der Mittelwasserspiegellage (bis zu 5 Werte m\u00f6glich)
 state.uinfo.inundation.scenario = Werte f\u00fcr \u00c4nderung der Sohl- bzw. Mittelwasserlage eingeben
 state.uinfo.use_scenario=Szenariobetrachtung
 useScenario.option = Zus\u00e4tzlich Szenariobetrachtung miteinbeziehen?
@@ -1063,7 +1064,8 @@
 scenarioType.option2 = \u00dcberregional wirkende Eingriffe
 scenarioType.option3 = Historische Betrachtung 
 help.state.uinfo.scenario_type=${help.url}/OnlineHilfe/UINFO#help.state.uinfo.scenario_type
- 
+
+state.uinfo.distance_only_part.from_regional= Teilabschnitt 
 state.uinfo.distance_only_part = Teilabschnitt
 help.state.uinfo.distance_only_part = ${help.url}/OnlineHilfe/SINFO#help.state.sinfo.distance_only_part 
 
diff -r 5c34fe17ef15 -r 5a0e8d76582e 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	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java	Wed Jul 04 13:06:28 2018 +0200
@@ -1548,4 +1548,6 @@
     String sinfo_columnlabel_soundings();
 
     String sinfo_columnlabel_waterlevels();
+
+    String error_limit_exceeded_salix();
 }
\ No newline at end of file
diff -r 5c34fe17ef15 -r 5a0e8d76582e 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	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties	Wed Jul 04 13:06:28 2018 +0200
@@ -324,6 +324,7 @@
 ele_window_save_error = Error while saving elevations.
 ele_window_geometry_error = The geometry is not supported:
 
+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
 error_years_wrong = The second year needs to be bigger than the first year.
diff -r 5c34fe17ef15 -r 5a0e8d76582e 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	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties	Wed Jul 04 13:06:28 2018 +0200
@@ -324,6 +324,7 @@
 ele_window_save_error = Fehler beim Speichern der H\u00f6hen.
 ele_window_geometry_error = Die Geometrie wird nicht unterst\u00fctzt:
 
+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
 error_years_wrong = Das zweite Jahr muss gr\u00f6\u00dfer als das erste sein.
diff -r 5c34fe17ef15 -r 5a0e8d76582e 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	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java	Wed Jul 04 13:06:28 2018 +0200
@@ -19,6 +19,7 @@
 import org.dive4elements.river.client.shared.model.DefaultData;
 import org.dive4elements.river.client.shared.model.DefaultDataItem;
 
+import com.smartgwt.client.util.SC;
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.Label;
 import com.smartgwt.client.widgets.form.fields.TextItem;
@@ -33,10 +34,11 @@
 
     private static final long serialVersionUID = 1L;
 
-    protected enum Type {
-        single, multi // "SingleItem" (Klassenname) meint, dass es nur ein einziges Eingabefeld gibt (nicht from-to; epoch)
+    public enum Type {
+        single, multi, limit5 // "SingleItem" (Klassenname) meint, dass es nur ein einziges Eingabefeld gibt (nicht from-to; epoch)
         // Type multi: append (year): es können mehrere Werte eingegeben werden; Leerzeichen-getrennt
         // Type single: append (year, sohlhöhendifferenz): nur ein Wert ist zulässig
+        // Type limit5 TODO: generalize, if needed
     }
 
     private final Type type;
@@ -140,14 +142,7 @@
         final List<String> errors = new ArrayList<String>();
         // String filtered = "";
         // int goodValues = 0;
-
-        try {
-            Integer.parseInt(sValue);
-        }
-        catch (final NumberFormatException e) {
-            errors.add(this.MSG.wrongFormat() + ": " + sValue);
-
-        }
+        errors.addAll(validateNumber(sValue));
         boolean isGood = false;
         for (final String validYear : this.validInputs) {
             /* No list contains for strings? */
@@ -171,6 +166,19 @@
         return errors;
     }
 
+    private final List<String> validateNumber(final String sValue) {
+        final List<String> errors = new ArrayList<String>();
+
+        try {
+            Integer.parseInt(sValue);
+        }
+        catch (final NumberFormatException e) {
+            errors.add(this.MSG.wrongFormat() + ": " + sValue);
+
+        }
+        return errors;
+    }
+
     protected abstract String errorForItemMsg();
 
     protected final void appendValue(final String value) {
@@ -186,6 +194,24 @@
 
             break;
 
+        case limit5:
+            // APPEND = ADD to existing -> MULTI YEAR
+            final String oldValues = this.inputItem.getValueAsString();
+            if (oldValues != null && !oldValues.isEmpty()) {
+                final String[] oldVals = oldValues.split(" ");
+                if (oldVals.length < 5)// TODO: generalize, if needed
+                    this.inputItem.setValue(oldValues.trim() + " " + value);
+                else {
+                    // msg TODO: generalize, if needed
+                    SC.warn(this.MSG.error_limit_exceeded_salix());
+                }
+            }
+
+            else
+                this.inputItem.setValue(value);
+
+            break;
+
         case single:
             this.inputItem.setValue(value);
             break;
@@ -205,12 +231,22 @@
 
         switch (this.type) {
         case multi:
+
             final String[] sValues = sValue.trim().split(" ");
             for (final String value : sValues) {
                 errors.addAll(this.validateSingleInput(value));
             }
             break;
-
+        case limit5:
+            final String[] values = sValue.trim().split(" ");
+            if (values.length > 5) {
+                errors.add(this.MSG.error_limit_exceeded_salix());// TODO generalize if needed
+            }
+            for (int i = 0; i < values.length; i++) {
+                if (i < 5)
+                    errors.addAll(this.validateNumber(values[i]));
+            }
+            break;
         case single:
             errors.addAll(this.validateSingleInput(sValue));
             break;
diff -r 5c34fe17ef15 -r 5a0e8d76582e gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FromToTableHelperPanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FromToTableHelperPanel.java	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FromToTableHelperPanel.java	Wed Jul 04 13:06:28 2018 +0200
@@ -95,6 +95,7 @@
             this.table.setEmptyMessage(flys.error_feed_no_data());
             return;
         }
+
         for (final DataItem dataItem : mData.opts) {
             final MultiDataItem item = (MultiDataItem) dataItem;
 
@@ -112,7 +113,7 @@
 
             this.table.addData(newRecord);
         }
-
+        this.table.setEmptyMessage("");
         this.table.setFields(fields.values().toArray(new ListGridField[fields.size()]));
     }
 
diff -r 5c34fe17ef15 -r 5a0e8d76582e gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java	Wed Jul 04 13:06:28 2018 +0200
@@ -9,6 +9,7 @@
 package org.dive4elements.river.client.client.ui;
 
 import org.dive4elements.river.client.client.FLYSConstants;
+import org.dive4elements.river.client.client.ui.AbstractSingleItemPanel.Type;
 import org.dive4elements.river.client.client.ui.fixation.FixEventSelect;
 import org.dive4elements.river.client.client.ui.fixation.FixFunctionSelect;
 import org.dive4elements.river.client.client.ui.fixation.FixGaugeSelectPanel;
@@ -169,7 +170,9 @@
         } else if (uiProvider.equals("minfo.sedimentload_sqti_select")) {
             return new SedLoadSQTiPanel();
         } else if (uiProvider.equals("uinfo.sedimentheight_select")) {
-            return new LoadSedimentHeightPanel();
+            return new LoadSedimentHeightPanel(Type.single);
+        } else if (uiProvider.equals("uinfo.sedimentheight_select.limit5")) {
+            return new LoadSedimentHeightPanel(Type.limit5);
         } else if (uiProvider.equals("hws_datacage_panel")) {
             return new HWSDatacagePanel(user);
         } else if (uiProvider.equals("user_rgd_panel")) {
diff -r 5c34fe17ef15 -r 5a0e8d76582e gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSedimentHeightPanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSedimentHeightPanel.java	Wed Jul 04 12:00:57 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSedimentHeightPanel.java	Wed Jul 04 13:06:28 2018 +0200
@@ -21,8 +21,8 @@
 public class LoadSedimentHeightPanel extends AbstractSingleItemPanel {
     private static final long serialVersionUID = 1L;
 
-    public LoadSedimentHeightPanel() {
-        super(Type.single);
+    public LoadSedimentHeightPanel(final Type type) {
+        super(type);
     }
 
     @Override
@@ -40,13 +40,14 @@
         final VLayout layout = new VLayout();
 
         final Label title = new Label(data.get(0).getDescription());
-        title.setHeight("25px");
+        title.setHeight("35px");
 
         final DynamicForm form = new DynamicForm();
 
         form.setNumCols(4);
         final TextItem inputItem = createInputItem("waterlevelDifference_Name_to_prevent_errorMsg");
         inputItem.setShowTitle(false);
+        inputItem.setWidth(200);
         final StaticTextItem textItem = new StaticTextItem("IRRELEVANT_NAME");
 
         textItem.setValue("cm");


More information about the Dive4Elements-commits mailing list