changeset 9062:5198066492a9

Teilabschnitt Salix State
author gernotbelger
date Mon, 07 May 2018 17:25:53 +0200
parents 41ec5095506f
children b6919e3c2d86
files artifacts/doc/conf/artifacts/uinfo.xml artifacts/src/main/java/org/dive4elements/river/artifacts/states/DistanceOnlyPartSelect.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/ScenarioTypeState.java gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java gwt-client/src/main/java/org/dive4elements/river/client/client/artifacthelper/ArtifactHelper.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistanceOnlyPartPanel.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java
diffstat 8 files changed, 324 insertions(+), 182 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/doc/conf/artifacts/uinfo.xml	Mon May 07 10:51:36 2018 +0200
+++ b/artifacts/doc/conf/artifacts/uinfo.xml	Mon May 07 17:25:53 2018 +0200
@@ -1,103 +1,136 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <artifact name="uinfo">
 
-	<states>
-		<state id="state.uinfo.river" description="state.uinfo.river"
-			state="org.dive4elements.river.artifacts.states.RiverSelect"
-			helpText="help.state.uinfo.river">
-			<data name="river" type="String" />
-		</state>
+  <states>
+    <state id="state.uinfo.river" description="state.uinfo.river" state="org.dive4elements.river.artifacts.states.RiverSelect" helpText="help.state.uinfo.river">
+      <data name="river" type="String" />
+    </state>
 
-		<transition
-			transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-			<from state="state.uinfo.river" />
-			<to state="state.uinfo.calculation_mode" />
-		</transition>
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.uinfo.river" />
+      <to state="state.uinfo.calculation_mode" />
+    </transition>
 
-		<state id="state.uinfo.calculation_mode"
-			description="state.uinfo.calculation_mode"
-			state="org.dive4elements.river.artifacts.uinfo.CalculationSelectUinfo"
-			helpText="help.state.uinfo.calculation_mode">
-			<data name="calculation_mode" type="String" />
-		</state>
+    <state id="state.uinfo.calculation_mode" description="state.uinfo.calculation_mode" state="org.dive4elements.river.artifacts.uinfo.CalculationSelectUinfo" helpText="help.state.uinfo.calculation_mode">
+      <data name="calculation_mode" type="String" />
+    </state>
 
-	<state id="state.uinfo.distance_only" description="state.uinfo.distance_only" state="org.dive4elements.river.artifacts.states.DistanceOnlySelect" helpText="help.state.uinfo.distance_only">
-      <data name="ld_from" type="Double"/>
-      <data name="ld_to" type="Double"/>
+    <state id="state.uinfo.distance_only" description="state.uinfo.distance_only" state="org.dive4elements.river.artifacts.states.DistanceOnlySelect" helpText="help.state.uinfo.distance_only">
+      <data name="ld_from" type="Double" />
+      <data name="ld_to" type="Double" />
     </state>
-    
 
 
-		<!-- Calculation Mode: Salix Linie  -->
-		
 
-	<transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-      <from state="state.uinfo.calculation_mode"/>
-      <to state="state.uinfo.distance_only"/>
-      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal"/>
+    <!-- Calculation Mode: Salix Linie -->
+
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.calculation_mode" />
+      <to state="state.uinfo.distance_only" />
+      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal" />
     </transition>
+
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.distance_only" />
+      <to state="state.uinfo.use_scenario" />
+      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal" />
+    </transition>
+
+
+    <state id="state.uinfo.use_scenario" description="state.uinfo.use_scenario" state="org.dive4elements.river.artifacts.uinfo.salix.UseScenarioChoice" helpText="help.state.uinfo.use_scenario">
+      <data name="use_scenario" type="Boolean" />
+    </state>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.use_scenario" />
+      <to state="state.uinfo.scenario_type" />
+      <condition data="use_scenario" value="true" operator="equal" />
+    </transition>
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.use_scenario" />
+      <to state="state.uinfo.distance_only_part" />
+      <condition data="use_scenario" value="false" operator="equal" />
+    </transition>
+
+    <state id="state.uinfo.scenario_type" description="state.uinfo.scenario_type" state="org.dive4elements.river.artifacts.uinfo.salix.ScenarioTypeState" helpText="help.state.uinfo.scenario_type">
+      <data name="scenario_selection" type="String" />
+    </state>
+
+    <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" />
+    </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">
+      <data name="ld_from_part" type="Double" />
+      <data name="ld_to_part" type="Double" />
+    </state>
+
+
+    <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
+      <from state="state.uinfo.distance_only_part" />
+      <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>
+
+        <!-- FIXME: i01n name in FLYSConstants -->
+        <outputmode name="uinfo_salix_line_export" description="output.uinfo_salix_line_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="csv" description="facet.uinfo_salix_line_export.csv" />
+            <facet name="pdf" description="facet.uinfo_salix_line_export.pdf" />
+          </facets>
+        </outputmode>
+
+        <!-- FIXME: i01n name in FLYSConstants -->
+        <outputmode name="uinfo_salix_line_report" description="output.uinfo_salix_line_report" mime-type="text/xml" type="report">
+          <facets>
+            <facet name="report" description="facet.uinfo_salix_line_report" />
+          </facets>
+        </outputmode>
+      </outputmodes>
+    </state>
  
 
-	<transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-      <from state="state.uinfo.distance_only"/>
-      <to state="state.uinfo.use_scenario"/>
-      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal"/>
-    </transition>
-		
-		
- 	<state id="state.uinfo.use_scenario" description="state.uinfo.use_scenario" state="org.dive4elements.river.artifacts.uinfo.salix.UseScenarioChoice" helpText="help.state.uinfo.use_scenario">
-      <data name="use_scenario" type="Boolean"/>
-    </state>
-    
- 	<transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-      <from state="state.uinfo.use_scenario"/>
-      <to state="state.uinfo.scenario_type"/>
-      <condition data="calculation_mode" value="uinfo_salix_line" operator="equal"/>
-    </transition>
-			<!-- FIXME: der State soll nur angezeigt werden, wenn zuvor bei Szenario-Betrachtung "Ja" angeklickt wurde...  -->
- 	<state id="state.uinfo.scenario_type" description="state.uinfo.scenario_type" state="org.dive4elements.river.artifacts.uinfo.salix.ScenarioTypeState" helpText="help.state.uinfo.scenario_type">
-    <!--Probleme, wenn, der DefaultState genommen wird!  <data name="scenario_type" type="Integer"/> -->
-   	<data name ="test" type ="String" />
-    </state>
-    
-  
-		 
- 	<transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition">
-      <from state="state.uinfo.scenario_type"/>
-      <to state="state.uinfo.salix_line"/>
-      <!-- condition data="calculation_mode" value="uinfo_salix_line" operator="equal"/> -->
+ 
+
+
+
+
+    <!-- Calculation Mode: Vegetation Zones -->
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.calculation_mode" />
+      <to state="state.uinfo.vegetation_zones" />
+      <condition data="calculation_mode" value="uinfo_vegetation_zones" 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>
 
-				<!-- FIXME: i01n name in FLYSConstants -->
-				<outputmode name="uinfo_salix_line_export"
-					description="output.uinfo_salix_line_export" mime-type="text/plain"
-					type="export">
-					<facets>
-						<facet name="csv"
-							description="facet.uinfo_salix_line_export.csv" />
-						<facet name="pdf"
-							description="facet.uinfo_salix_line_export.pdf" />
-					</facets>
-				</outputmode>
+    <state id="state.uinfo.vegetation_zones" description="state.uinfo.vegetation_zones" state="org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZonesState" helpText="help.state.uinfo.vegetation_zones">
+      <outputmodes>
 
-				<!-- FIXME: i01n name in FLYSConstants -->
-				<outputmode name="uinfo_salix_line_report"
-					description="output.uinfo_salix_line_report" mime-type="text/xml"
-					type="report">
-					<facets>
-						<facet name="report"
-							description="facet.uinfo_salix_line_report" />
-					</facets>
-				</outputmode>
-			</outputmodes>
-		</state>
+        <!-- FIXME: i01n name in FLYSConstants -->
+        <outputmode name="uinfo_vegetation_zones_export" description="output.uinfo_vegetation_zones_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="csv" description="facet.uinfo_vegetation_zones_export.csv" />
+            <facet name="pdf" description="facet.uinfo_vegetation_zones_export.pdf" />
+          </facets>
+        </outputmode>
+
+        <!-- FIXME: i01n name in FLYSConstants -->
+        <outputmode name="uinfo_vegetation_zones_report" description="output.uinfo_vegetation_zones_report" mime-type="text/xml" type="report">
+          <facets>
+            <facet name="report" description="facet.uinfo_vegetation_zones_report" />
+          </facets>
+        </outputmode>
+      </outputmodes>
+    </state>
 
 
 
@@ -105,100 +138,33 @@
 
 
 
-
-
-
-
-
-
-
-
-
-		<!-- Calculation Mode: Vegetation Zones -->
-		<transition
-			transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-			<from state="state.uinfo.calculation_mode" />
-			<to state="state.uinfo.vegetation_zones" />
-			<condition data="calculation_mode"
-				value="uinfo_vegetation_zones" operator="equal" />
-			 
-		</transition>
-
-		<state id="state.uinfo.vegetation_zones"
-			description="state.uinfo.vegetation_zones"
-			state="org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZonesState"
-			helpText="help.state.uinfo.vegetation_zones">
-			<outputmodes>
-
-				<!-- FIXME: i01n name in FLYSConstants -->
-				<outputmode name="uinfo_vegetation_zones_export"
-					description="output.uinfo_vegetation_zones_export"
-					mime-type="text/plain" type="export">
-					<facets>
-						<facet name="csv"
-							description="facet.uinfo_vegetation_zones_export.csv" />
-						<facet name="pdf"
-							description="facet.uinfo_vegetation_zones_export.pdf" />
-					</facets>
-				</outputmode>
+    <!-- Calculation Mode: Inundation Duration -->
+    <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
+      <from state="state.uinfo.calculation_mode" />
+      <to state="state.uinfo.inundation_duration" />
+      <condition data="calculation_mode" value="uinfo_inundation_duration" operator="equal" />
 
-				<!-- FIXME: i01n name in FLYSConstants -->
-				<outputmode name="uinfo_vegetation_zones_report"
-					description="output.uinfo_vegetation_zones_report"
-					mime-type="text/xml" type="report">
-					<facets>
-						<facet name="report"
-							description="facet.uinfo_vegetation_zones_report" />
-					</facets>
-				</outputmode>
-			</outputmodes>
-		</state>
-
-
-
-
-
-
-
-		<!-- Calculation Mode: Inundation Duration -->
-		<transition
-			transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition">
-			<from state="state.uinfo.calculation_mode" />
-			<to state="state.uinfo.inundation_duration" />
-			<condition data="calculation_mode"
-				value="uinfo_inundation_duration" operator="equal" />
-			 
-		</transition>
+    </transition>
 
-		<state id="state.uinfo.inundation_duration"
-			description="state.uinfo.inundation_duration"
-			state="org.dive4elements.river.artifacts.uinfo.inundationduration.InundationDurationState"
-			helpText="help.state.uinfo.inundation_duration">
-			<outputmodes>
+    <state id="state.uinfo.inundation_duration" description="state.uinfo.inundation_duration" state="org.dive4elements.river.artifacts.uinfo.inundationduration.InundationDurationState" helpText="help.state.uinfo.inundation_duration">
+      <outputmodes>
 
-				<!-- FIXME: i01n name in FLYSConstants -->
-				<outputmode name="uinfo_inundation_duration_export"
-					description="output.uinfo_inundation_duration_export"
-					mime-type="text/plain" type="export">
-					<facets>
-						<facet name="csv"
-							description="facet.uinfo_inundation_duration_export.csv" />
-						<facet name="pdf"
-							description="facet.uinfo_inundation_duration_export.pdf" />
-					</facets>
-				</outputmode>
+        <!-- FIXME: i01n name in FLYSConstants -->
+        <outputmode name="uinfo_inundation_duration_export" description="output.uinfo_inundation_duration_export" mime-type="text/plain" type="export">
+          <facets>
+            <facet name="csv" description="facet.uinfo_inundation_duration_export.csv" />
+            <facet name="pdf" description="facet.uinfo_inundation_duration_export.pdf" />
+          </facets>
+        </outputmode>
 
-				<!-- FIXME: i01n name in FLYSConstants -->
-				<outputmode name="uinfo_inundation_duration_report"
-					description="output.uinfo_inundation_duration_report"
-					mime-type="text/xml" type="report">
-					<facets>
-						<facet name="report"
-							description="facet.uinfo_inundation_duration_report" />
-					</facets>
-				</outputmode>
-			</outputmodes>
-		</state>
+        <!-- FIXME: i01n name in FLYSConstants -->
+        <outputmode name="uinfo_inundation_duration_report" description="output.uinfo_inundation_duration_report" mime-type="text/xml" type="report">
+          <facets>
+            <facet name="report" description="facet.uinfo_inundation_duration_report" />
+          </facets>
+        </outputmode>
+      </outputmodes>
+    </state>
 
-	</states>
+  </states>
 </artifact>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/DistanceOnlyPartSelect.java	Mon May 07 17:25:53 2018 +0200
@@ -0,0 +1,21 @@
+/* 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.states;
+
+import org.apache.log4j.Logger;
+
+public class DistanceOnlyPartSelect extends DistanceOnlySelect {
+
+    private static Logger log = Logger.getLogger(DistanceOnlyPartSelect.class);
+
+    @Override
+    protected String getUIProvider() {
+        return "distance_only_part_panel";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineAccess.java	Mon May 07 17:25:53 2018 +0200
@@ -0,0 +1,45 @@
+/* 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.artifacts.uinfo.salix;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.river.artifacts.access.RangeAccess;
+import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
+import org.dive4elements.river.artifacts.uinfo.UinfoCalcMode;
+
+/**
+ * Access to the flow depth calculation type specific SInfo artifact data.
+ * REMARK: this class is NOT intended to be hold in the results (or anywhere else), in order to avoid a permanent
+ * reference to the artifact instance.
+ * Hence we do NOT cache any data.
+ *
+ * @author Gernot Belger
+ */
+final class SalixLineAccess extends RangeAccess {
+
+    static final String FIELD_DIFFID_CURRENT = "diffid_current";
+    static final String FIELD_DIFFID_HIST = "diffid_historical";
+
+    public SalixLineAccess(final UINFOArtifact artifact) {
+        super(artifact);
+
+        /* assert calculation mode */
+        final UinfoCalcMode calculationMode = artifact.getCalculationMode();
+        assert (calculationMode == UinfoCalcMode.uinfo_salix_line);
+    }
+
+    public DoubleRange getRange() {
+        final double from = getFrom();
+        final double to = getTo();
+        return new DoubleRange(from, to);
+    }
+
+}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/ScenarioTypeState.java	Mon May 07 10:51:36 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/ScenarioTypeState.java	Mon May 07 17:25:53 2018 +0200
@@ -1,17 +1,28 @@
 
 package org.dive4elements.river.artifacts.uinfo.salix;
 
-import org.dive4elements.river.artifacts.states.BooleanChoiceState;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dive4elements.river.artifacts.states.RadioSelect;
 
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
  */
-public class ScenarioTypeState extends BooleanChoiceState {
-
+public class ScenarioTypeState extends RadioSelect {
     private static final long serialVersionUID = 1L;
 
     public ScenarioTypeState() {
-        super("activeMsg1", "activeMsg2", "activeMsg3"); // kriege den state irgendwie nicht selbst hin
+        super();
     }
 
+    @Override
+    protected List<String> makeEntries() {
+        final List<String> entries = new ArrayList<>();
+        entries.add("scenarioType.option1");
+        entries.add("scenarioType.option2");
+        entries.add("scenarioType.option3");
+        return entries;
+
+    }
 }
\ No newline at end of file
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java	Mon May 07 10:51:36 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java	Mon May 07 17:25:53 2018 +0200
@@ -10,7 +10,6 @@
 
 import com.google.gwt.i18n.client.ConstantsWithLookup;
 
-
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
  */
@@ -40,7 +39,7 @@
 
     String clone_project();
 
-    String copy_of ();
+    String copy_of();
 
     String manage_projects();
 
@@ -180,6 +179,8 @@
 
     String distance_state();
 
+    String distance_part_state();
+
     String waterlevel_ground_state();
 
     String location();
@@ -236,7 +237,7 @@
 
     String missingInput();
 
-    String too_many_values ();
+    String too_many_values();
 
     String from();
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/artifacthelper/ArtifactHelper.java	Mon May 07 17:25:53 2018 +0200
@@ -0,0 +1,39 @@
+/** 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.artifacthelper;
+
+import org.dive4elements.river.client.shared.model.Artifact;
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataList;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public class ArtifactHelper {
+
+    private final Artifact artifact;
+
+    public ArtifactHelper(final Artifact artifact) {
+        this.artifact = artifact;
+    }
+
+    public Data getOldDataByKey(final String keyLabel) {
+        final DataList[] oldData = this.artifact.getArtifactDescription().getOldData();
+        for (final DataList dataList : oldData) {
+            for (final Data data : dataList.getAll()) {
+                if (data.getLabel().equals(keyLabel)) {
+                    return data;
+                }
+            }
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistanceOnlyPartPanel.java	Mon May 07 17:25:53 2018 +0200
@@ -0,0 +1,57 @@
+/* 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.client.client.ui;
+
+import org.dive4elements.river.client.client.artifacthelper.ArtifactHelper;
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataItem;
+import org.dive4elements.river.client.shared.model.DataList;
+
+public class DistanceOnlyPartPanel extends DistanceOnlyPanel {
+
+    private static final long serialVersionUID = -5794138573892656947L;
+
+    public DistanceOnlyPartPanel() {
+        super();
+    }
+
+    @Override
+    protected String getLabel() {
+        return this.MSG.distance_part_state();
+    }
+
+    @Override
+    protected String getLowerField() {
+        return "ld_from_part";
+    }
+
+    @Override
+    protected String getUpperField() {
+        return "ld_to_part";
+    }
+
+    @Override
+    protected void initMinMaxValues(final DataList data) {
+        final ArtifactHelper helper = new ArtifactHelper(super.artifact);
+
+        final Data f = helper.getOldDataByKey("ld_from");
+        final Data t = helper.getOldDataByKey("ld_to");
+        try {
+            final DataItem[] fItems = f.getItems();
+            final DataItem[] tItems = t.getItems();
+
+            this.min = Double.valueOf(fItems[0].getStringValue());
+            this.max = Double.valueOf(tItems[0].getStringValue());
+        }
+        catch (final NumberFormatException nfe) {
+            this.min = -Double.MAX_VALUE;
+            this.max = Double.MAX_VALUE;
+        }
+    }
+}
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java	Mon May 07 10:51:36 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java	Mon May 07 17:25:53 2018 +0200
@@ -57,6 +57,8 @@
             return new DistancePanel();
         } else if (uiProvider.equals("distance_only_panel")) {
             return new DistanceOnlyPanel();
+        } else if (uiProvider.equals("distance_only_part_panel")) {
+            return new DistanceOnlyPartPanel();
         } else if (uiProvider.equals("waterlevel_ground_panel")) {
             return new WaterlevelGroundPanel();
         } else if (uiProvider.equals("wq_panel")) {

http://dive4elements.wald.intevation.org