Mercurial > dive4elements > river
changeset 9639:df668014016e
Merge
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Tue, 12 Nov 2019 09:24:07 +0100 |
parents | 6c1ebf2220f5 (diff) eb32f75c65c3 (current diff) |
children | 68d7b09a47b7 |
files | |
diffstat | 12 files changed, 33 insertions(+), 895 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/doc/conf/artifacts/winfo.xml Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/doc/conf/artifacts/winfo.xml Tue Nov 12 09:24:07 2019 +0100 @@ -56,13 +56,6 @@ <to state="state.winfo.historicalq.reference_gauge"/> <condition data="calculation_mode" value="calc.historical.discharge.curve" operator="equal"/> </transition> - - <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition"> - <from state="state.winfo.calculation_mode"/> - <to state="state.winfo.location_distance"/> - <condition data="calculation_mode" value="calc.extreme.curve" operator="equal"/> - </transition> - <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition"> <from state="state.winfo.distance_only"/> <to state="state.winfo.waterlevel_pair_select"/> @@ -152,16 +145,12 @@ <to state="state.winfo.wq_adapted"/> </transition> - <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition"> - <from state="state.winfo.location_distance"/> - <to state="state.winfo.function_select"/> - <condition data="calculation_mode" value="calc.extreme.curve" operator="equal"/> - </transition> + <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition"> <from state="state.winfo.location_distance"/> <to state="state.winfo.wq"/> - <condition data="calculation_mode" value="calc.extreme.curve" operator="notequal"/> + <condition data="calculation_mode" value="always_go_on_this_condition_is_mandatory" operator="notequal"/> </transition> <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition"> @@ -176,23 +165,6 @@ <condition data="calculation_mode" value="calc.discharge.curve" operator="equal"/> </transition> - <transition transition="org.dive4elements.river.artifacts.transitions.ValueCompareTransition"> - <from state="state.winfo.function_select"/> - <to state="state.winfo.extreme.percent"/> - <condition data="calculation_mode" value="calc.extreme.curve" operator="equal"/> - </transition> - - <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition"> - <from state="state.winfo.extreme.percent"/> - <to state="state.winfo.extreme.qinput"/> - </transition> - - <transition transition="org.dive4elements.river.artifacts.transitions.DefaultTransition"> - <from state="state.winfo.extreme.qinput"/> - <to state="state.winfo.extreme.curve"/> - </transition> - - <state id="state.winfo.wq" description="state.winfo.wq" state="org.dive4elements.river.artifacts.states.WQSelect" helpText="help.state.winfo.wq"> <data name="wq_isq" type="Boolean" /> <data name="wq_isfree" type="Boolean" /> @@ -672,79 +644,5 @@ </outputmode> </outputmodes> </state> - - <state id="state.winfo.function_select" - description="state.winfo.function_select" - state="org.dive4elements.river.artifacts.states.fixation.FunctionSelect" - helpText="help.state.winfo.function_select"> - <data name="function" type="String"/> - </state> - - <state id="state.winfo.extreme.percent" - description="state.winfo.extreme.percent" - state="org.dive4elements.river.artifacts.states.extreme.PercentInput" - helpText="help.state.winfo.extreme.percent"> - <data name="percent" type="Double"/> - </state> - - <state id="state.winfo.extreme.qinput" - description="state.winfo.extreme.qinput" - state="org.dive4elements.river.artifacts.states.extreme.ExtremeQInput" - helpText="help.state.winfo.extreme.qinput"> - <data name="ranges" type="Double[]"/> - </state> - - <state id="state.winfo.extreme.curve" description="state.winfo.extreme.curve" state="org.dive4elements.river.artifacts.states.extreme.ExtremeCompute" helpText="help.state.winfo.extreme.curve"> - <outputmodes> - <outputmode name="longitudinal_section" description="output.longitudinal_section" mime-type="image/png" type="chart"> - <facets> - <facet name="longitudinal_section.w" description="facet.longitudinal_section.w"/> - <facet name="longitudinal_section.q" description="facet.longitudinal_section.q"/> - <facet name="w_differences" description="facet.w_differences"/> - <facet name="w_differences.filtered" description="facet.w_differences"/> - <facet name="other.wqkms.w" description="W-Type of data" /> - <facet name="other.wq" description="WQ-Type of data" /> - <facet name="other.wqkms.q" description="Q-Type of data" /> - <facet name="other.wkms" description="facet.other.wkms"/> - <facet name="longitudinal_section.manualpoints" description="Manuelle Punkte"/> - <facet name="other.wqkms" description="facet.other.wqkms"/> - <facet name="heightmarks_points" description="facet.other.wkms.heightmarks_points"/> - <facet name="longitudinal_section.area" description="an area"/> - <facet name="longitudinal_section.annotations" description="facet.longitudinal_section.annotations"/> - </facets> - </outputmode> - <outputmode name="cross_section" description="output.cross_section" mime-type="image/png" type="chart"> - <facets> - <facet name="cross_section_water_line" description="facet.cross_section_water_line"/> - <facet name="cross_section" description="facet.cross_section"/> - <facet name="area" description="an area"/> - <facet name="cross_section.area" description="an area"/> - <facet name="cross_section.manualpoints" description="points"/> - <facet name="cross_section.manualline" description="line"/> - <facet name="hyk" description="hyks"/> - </facets> - </outputmode> - <outputmode name="extreme_wq_curve" description="output.extreme_wq_curve" mine-type="image/png" type="chart"> - <facets> - <facet name="extreme_wq_curve" description="Extreme WQ curve"/> - <facet name="extreme_wq_curve_base" description="Extreme WQ curve base points"/> - <facet name="extreme_wq_curve.manualpoints" description="Manuelle Punkte"/> - </facets> - </outputmode> - <outputmode name="extreme_curve_report" description="output.extreme_reference_curve_report" mime-type="text/xml" type="report"> - <facets> - <facet name="report" description="facet.extreme_curve.report" /> - </facets> - </outputmode> - <outputmode name="extreme_curve_export" mime-type="text/plain" type="export"> - <facets> - <facet name="csv" description="facet.reference_curve_export.csv" /> - <facet name="pdf" description="facet.waterlevel_export.pdf" /> - <facet name="wst" description="facet.waterlevel_export.wst" /> - </facets> - </outputmode> - </outputmodes> - </state> - </states> </artifact>
--- a/artifacts/doc/conf/generators/generators.xml Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/doc/conf/generators/generators.xml Tue Nov 12 09:24:07 2019 +0100 @@ -12,12 +12,6 @@ <output-generator names="historical_discharge_chartinfo" class="org.dive4elements.river.exports.HistoricalDischargeCurveInfoGenerator" /> <output-generator names="historical_discharge" class="org.dive4elements.river.exports.HistoricalDischargeCurveGenerator" /> - <!-- This is deactivated. - <output-generator names="extreme_wq_curve" class="org.dive4elements.river.exports.extreme.ExtremeWQCurveGenerator"/> - <output-generator names="extreme_curve_export" class="org.dive4elements.river.exports.WaterlevelExporter"/> - <output-generator names="extreme_wq_curve_chartinfo" class="org.dive4elements.river.exports.extreme.ExtremeWQCurveInfoGenerator"/> - --> - <output-generator names="durationcurve_export" class="org.dive4elements.river.exports.DurationCurveExporter" /> <output-generator names="computed_dischargecurve_export" class="org.dive4elements.river.exports.ComputedDischargeCurveExporter" /> <output-generator names="discharge_longitudinal_section_export" class="org.dive4elements.river.exports.DischargeLongitudinalSectionExporter" />
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java Tue Nov 12 09:24:07 2019 +0100 @@ -158,9 +158,6 @@ if (calculationMode.equals("calc.discharge.longitudinal.section")) return getDischargeLongitudinalSectionData(context.getMeta()); - if (calculationMode.equals("calc.extreme.curve")) - return (CalculationResult) this.compute(context, ComputeType.ADVANCE, false); - if (calculationMode.equals("calc.w.differences")) return (CalculationResult) this.compute(context, ComputeType.ADVANCE, true);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/CalculationSelect.java Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/CalculationSelect.java Tue Nov 12 09:24:07 2019 +0100 @@ -9,19 +9,14 @@ package org.dive4elements.river.artifacts.states; import org.apache.log4j.Logger; - -import org.w3c.dom.Element; - +import org.dive4elements.artifactdatabase.data.StateData; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.CallMeta; - import org.dive4elements.artifacts.common.utils.XMLUtils; - -import org.dive4elements.artifactdatabase.data.StateData; - import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.resources.Resources; +import org.w3c.dom.Element; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> @@ -35,103 +30,68 @@ public static final String FIELD_MODE = "calculation_mode"; /** Constant value for the reference line calculation. */ - public static final String CALCULATION_SURFACE_CURVE = - "calc.surface.curve"; + public static final String CALCULATION_SURFACE_CURVE = "calc.surface.curve"; /** Constant value for the differences calculation. */ - public static final String CALCULATION_DURATION_CURVE = - "calc.duration.curve"; + public static final String CALCULATION_DURATION_CURVE = "calc.duration.curve"; /** Constant value for the flood map calculation. */ - public static final String CALCULATION_FLOOD_MAP = - "calc.flood.map"; + public static final String CALCULATION_FLOOD_MAP = "calc.flood.map"; /** Constant value for the profile calculation. */ - public static final String CALCULATION_DISCHARGE_LONGITUDINAL_CURVE = - "calc.discharge.longitudinal.section"; + public static final String CALCULATION_DISCHARGE_LONGITUDINAL_CURVE = "calc.discharge.longitudinal.section"; /** Constant value for the state discharge curve calculation. */ - public static final String CALCULATION_DISCHARGE_CURVE = - "calc.discharge.curve"; + public static final String CALCULATION_DISCHARGE_CURVE = "calc.discharge.curve"; /** Constant value for the state w differences calculation. */ - public static final String CALCULATION_W_DIFFERENCES = - "calc.w.differences"; + public static final String CALCULATION_W_DIFFERENCES = "calc.w.differences"; /** Constant value for the state reference curve calculation. */ - public static final String CALCULATION_REFERENCE_CURVE = - "calc.reference.curve"; + public static final String CALCULATION_REFERENCE_CURVE = "calc.reference.curve"; /** Constant value for the historical discharge curve calculation. */ - public static final String CALCULATION_HISTORICAL_DISCHARGE_CURVE = - "calc.historical.discharge.curve"; - - /** Constant value for the extreme W curve calculation. */ - public static final String CALCULATION_EXTREME = - "calc.extreme.curve"; + public static final String CALCULATION_HISTORICAL_DISCHARGE_CURVE = "calc.historical.discharge.curve"; /** An array that holds all available calculation modes. */ - public static final String[] CALCULATIONS = { - CALCULATION_SURFACE_CURVE, - CALCULATION_FLOOD_MAP, - CALCULATION_DISCHARGE_CURVE, - CALCULATION_HISTORICAL_DISCHARGE_CURVE, - CALCULATION_DURATION_CURVE, - CALCULATION_DISCHARGE_LONGITUDINAL_CURVE, - CALCULATION_W_DIFFERENCES, - CALCULATION_REFERENCE_CURVE //, -// CALCULATION_EXTREME - }; - + public static final String[] CALCULATIONS = { CALCULATION_SURFACE_CURVE, CALCULATION_FLOOD_MAP, CALCULATION_DISCHARGE_CURVE, + CALCULATION_HISTORICAL_DISCHARGE_CURVE, CALCULATION_DURATION_CURVE, CALCULATION_DISCHARGE_LONGITUDINAL_CURVE, CALCULATION_W_DIFFERENCES, + CALCULATION_REFERENCE_CURVE }; /** Error message that is thrown if no mode has been chosen. */ - public static final String ERROR_NO_CALCULATION_MODE = - "error_feed_no_calculation_mode"; + public static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode"; - /** Error message that is thrown if an invalid calculation mode has been - * chosen. */ - public static final String ERROR_INVALID_CALCULATION_MODE = - "error_feed_invalid_calculation_mode"; - + /** + * Error message that is thrown if an invalid calculation mode has been + * chosen. + */ + public static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode"; public CalculationSelect() { } - /** Create choices (i18ned). */ @Override - protected Element[] createItems( - XMLUtils.ElementCreator cr, - Artifact artifact, - String name, - CallContext context) - { - CallMeta meta = context.getMeta(); - Element[] calcs = new Element[CALCULATIONS.length]; + protected Element[] createItems(final XMLUtils.ElementCreator cr, final Artifact artifact, final String name, final CallContext context) { + final CallMeta meta = context.getMeta(); + final Element[] calcs = new Element[CALCULATIONS.length]; for (int i = 0; i < CALCULATIONS.length; ++i) { - String calc = CALCULATIONS[i]; - calcs[i] = createItem( - cr, new String[] { - Resources.getMsg(meta, calc, calc), - calc - }); + final String calc = CALCULATIONS[i]; + calcs[i] = createItem(cr, new String[] { Resources.getMsg(meta, calc, calc), calc }); } return calcs; } - /** Validate the chosen calculation. */ @Override - public boolean validate(Artifact artifact) - throws IllegalArgumentException - { + public boolean validate(final Artifact artifact) throws IllegalArgumentException { log.debug("CalculationSelect.validate"); - D4EArtifact flys = (D4EArtifact) artifact; + final D4EArtifact flys = (D4EArtifact) artifact; - StateData data = getData(flys, FIELD_MODE); - String calc = (data != null) ? (String) data.getValue() : null; + final StateData data = getData(flys, FIELD_MODE); + String calc = (data != null) ? (String) data.getValue() : null; if (calc == null) { throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE); @@ -139,7 +99,7 @@ calc = calc.trim().toLowerCase(); - for (String mode: CALCULATIONS) { + for (final String mode : CALCULATIONS) { if (mode.equals(calc)) { return true; }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/extreme/ExtremeCompute.java Mon Nov 11 16:35:56 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* 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.extreme; - -import org.dive4elements.artifactdatabase.state.Facet; - -import org.dive4elements.artifacts.CallContext; - -import org.dive4elements.river.artifacts.D4EArtifact; - -import org.dive4elements.river.artifacts.access.ExtremeAccess; - -import org.dive4elements.river.artifacts.model.CalculationResult; -import org.dive4elements.river.artifacts.model.CrossSectionWaterLineFacet; -import org.dive4elements.river.artifacts.model.DataFacet; -import org.dive4elements.river.artifacts.model.FacetTypes; -import org.dive4elements.river.artifacts.model.ReportFacet; -import org.dive4elements.river.artifacts.model.WaterlevelFacet; -import org.dive4elements.river.artifacts.model.WQKms; - -import org.dive4elements.river.artifacts.model.extreme.ExtremeCurveFacet; -import org.dive4elements.river.artifacts.model.extreme.ExtremeCalculation; -import org.dive4elements.river.artifacts.model.extreme.ExtremeResult; - -import org.dive4elements.river.artifacts.resources.Resources; -import org.dive4elements.river.artifacts.states.DefaultState; - -import java.util.List; - -import org.apache.log4j.Logger; - - -/** State in which to deliver extreme value analysis result. */ -public class ExtremeCompute -extends DefaultState -implements FacetTypes -{ - /** Private log. */ - private static Logger log = Logger.getLogger(ExtremeCompute.class); - - - public ExtremeCompute() { - } - - - @Override - public Object computeAdvance( - D4EArtifact artifact, - String hash, - CallContext context, - List<Facet> facets, - Object old - ) { - log.debug("ExtremeCompute.computeAdvance"); - - CalculationResult res; - - ExtremeAccess access = new ExtremeAccess(artifact); - - if (old instanceof CalculationResult) { - res = (CalculationResult)old; - } - else { - ExtremeCalculation calc = new ExtremeCalculation(access); - res = calc.calculate(); - } - - if (facets == null) { - return res; - } - - if (res.getReport().hasProblems()) { - facets.add(new ReportFacet()); - } - - ExtremeResult eres = (ExtremeResult) res.getData(); - WQKms [] wqkms = eres.getWQKms(); - - if (wqkms == null) { - log.error("No computation result!"); - return res; - } - - for (int i = 0; i < wqkms.length; i++) { - String name = wqkms[i].getName(); - // The name already contains "W(...)". - String qname = name.replace("W(","Q="); - qname = qname.substring(0,qname.length()-1); - - Facet w = new WaterlevelFacet( i, LONGITUDINAL_W, name, ComputeType.ADVANCE, id, hash ); - Facet q = new WaterlevelFacet( i, LONGITUDINAL_Q, qname, ComputeType.ADVANCE, id, hash ); - Facet csFacet = new CrossSectionWaterLineFacet( i, name, ComputeType.ADVANCE, hash, getID(), Integer.valueOf(i) ); - - facets.add(w); - facets.add(q); - facets.add(csFacet); - } - - - facets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); - facets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); - facets.add(new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id)); - - facets.add(new ExtremeCurveFacet(Resources.getMsg(context.getMeta(), "extreme_wq_curve", "extreme_wq_curve"))); - facets.add(new ExtremeCurveFacet(Resources.getMsg(context.getMeta(), "extreme_wq_base_curve", "extreme_wq_base_curve"), true)); - - return res; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/extreme/ExtremeQInput.java Mon Nov 11 16:35:56 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,256 +0,0 @@ -/* 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.extreme; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import org.w3c.dom.Element; - -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.CallContext; - -import org.dive4elements.river.artifacts.access.ExtremeAccess; - -import org.dive4elements.artifactdatabase.ProtocolUtils; -import org.dive4elements.artifactdatabase.data.StateData; - -import org.dive4elements.artifacts.common.utils.XMLUtils; - -import org.dive4elements.river.artifacts.model.WstValueTable; -/* -import org.dive4elements.river.model.Gauge; -import org.dive4elements.river.model.Wst; -import org.dive4elements.river.utils.RiverUtils; -*/ -import org.dive4elements.river.artifacts.model.Range; -import org.dive4elements.river.model.River; - -import org.dive4elements.river.artifacts.D4EArtifact; - -import org.dive4elements.river.artifacts.model.RangeWithValues; -import org.dive4elements.river.artifacts.states.DefaultState; -import org.dive4elements.river.artifacts.model.WstValueTableFactory; - - -/** TODO Subclass WQAdapted. */ - -/** - * State to input Q data in segments for extreme value calculations.. - * The data item ranges is expected to have this format - * <from1>;<to1>;<value1>:<from2>;<to2>;<value2>:... - * (;;;:;;;:;;;:...) - */ -public class ExtremeQInput extends DefaultState { - - /** The log used in this state.*/ - private static Logger log = Logger.getLogger(ExtremeQInput.class); - - - /** Trivial, empty constructor. */ - public ExtremeQInput() { - } - - - /** - * Create one element for each 'segment' of the selected river that - * is within the given kilometer range (TODO). Each element is a tuple of - * (from;to) where <i>from</i> is the lower bounds of the segment or the - * lower kilometer range. <i>to</i> is the upper bounds of the segment or - * the upper kilometer range. - * - * @param cr The ElementCreator. - * @param artifact The FLYS artifact. - * @param name The name of the data item. - * @param context The CallContext. - * - * @return a list of elements that consist of tuples of the intersected - * segments of the selected river. - */ - @Override - protected Element[] createItems( - XMLUtils.ElementCreator cr, - Artifact artifact, - String name, - CallContext context) - { - log.debug("ExtremeQInput.createItems: " + name); - - D4EArtifact flysArtifact = (D4EArtifact) artifact; - - ExtremeAccess access = new ExtremeAccess(flysArtifact); - River river = access.getRiver(); - WstValueTable wstValueTable = WstValueTableFactory.getTable(river); - - List<Range> ranges = wstValueTable.findSegments(access.getFrom(), - access.getTo()); - - int num = ranges != null ? ranges.size() : 0; - - if (num == 0) { - log.warn("Selected distance matches no segments."); - return null; - } - - List<Element> elements = new ArrayList<Element>(); - - for (Range range: ranges) { - elements.add(createItem( - cr, - new String[] { range.getStart() + ";" + range.getEnd(), - ""}, - new double[] {0,100000})); - } - - Element[] els = new Element[elements.size()]; - - return elements.toArray(els); - } - - - /** Create sub-item ('row') of data thing. */ - protected Element createItem( - XMLUtils.ElementCreator cr, - Object obj, - double[] q - ) - { - Element item = ProtocolUtils.createArtNode(cr, "item", null, null); - Element label = ProtocolUtils.createArtNode(cr, "label", null, null); - Element value = ProtocolUtils.createArtNode(cr, "value", null, null); - - String[] arr = (String[]) obj; - - label.setTextContent(arr[0]); - value.setTextContent(arr[1]); - - item.appendChild(label); - item.appendChild(value); - - if (q != null) { - Element qRange = createRangeElement(cr, q, "Q"); - item.appendChild(qRange); - } - - return item; - } - - - /** - * Create elements to set min and max values of segments q (just min makes - * sense for extremes. - */ - protected Element createRangeElement( - XMLUtils.ElementCreator cr, - double[] mm, - String type) - { - Element range = ProtocolUtils.createArtNode( - cr, "range", - new String[] {"type"}, - new String[] {type}); - - Element min = ProtocolUtils.createArtNode(cr, "min", null, null); - min.setTextContent(String.valueOf(mm[0])); - - Element max = ProtocolUtils.createArtNode(cr, "max", null, null); - max.setTextContent(String.valueOf(mm[1])); - - range.appendChild(min); - range.appendChild(max); - - return range; - } - - - @Override - protected String getUIProvider() { - return "q_segmented_panel"; - } - - - /** Validate given data (return true). */ - @Override - public boolean validate(Artifact artifact) - throws IllegalArgumentException - { - log.debug("ExtremeQInput.validate"); - - D4EArtifact flys = (D4EArtifact) artifact; - log.debug("ExtremeQInput: " + getData(flys, "ranges")); - - /* - // TODO sort out what has to be validated (prevent negative values?). - RangeWithValues[] rwvs = extractInput(getData(flys, "ranges")); - - if (rwvs == null) { - throw new IllegalArgumentException("error_missing_wq_data"); - } - - List<Gauge> gauges = RiverUtils.getGauges(flys); - River river = RiverUtils.getRiver(flys); - Wst wst = WstFactory.getWst(river); - - for (Gauge gauge: gauges) { - Range range = gauge.getRange(); - double lower = range.getA().doubleValue(); - double upper = range.getB().doubleValue(); - - for (RangeWithValues rwv: rwvs) { - if (lower <= rwv.getStart() && upper >= rwv.getEnd()) { - compareQsWithGauge(wst, gauge, rwv.getValues()); - } - } - } - */ - - return true; - } - - - /** Form RangeWithValue-Array from state data. */ - protected RangeWithValues[] extractInput(StateData data) { - if (data == null) { - return null; - } - - String dataString = (String) data.getValue(); - String[] ranges = dataString.split(":"); - - List<RangeWithValues> rwv = new ArrayList<RangeWithValues>(); - - for (String range: ranges) { - String[] parts = range.split(";"); - - double lower = Double.parseDouble(parts[0]); - double upper = Double.parseDouble(parts[1]); - - String[] values = parts[2].split(","); - - int num = values.length; - double[] res = new double[num]; - - for (int i = 0; i < num; i++) { - try { - res[i] = Double.parseDouble(values[i]); - } - catch (NumberFormatException nfe) { - log.warn(nfe, nfe); - } - } - - rwv.add(new RangeWithValues(lower, upper, res)); - } - - return rwv.toArray(new RangeWithValues[rwv.size()]); - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/extreme/PercentInput.java Mon Nov 11 16:35:56 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* 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.extreme; - -import org.apache.log4j.Logger; - -import org.dive4elements.artifactdatabase.data.StateData; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.river.artifacts.states.DefaultState; - - -/** - * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> - */ -public class PercentInput extends DefaultState { - - /** The log used in this class. */ - private static Logger log = Logger.getLogger(PercentInput.class); - - public static final String PARAMETER_NAME = "percent"; - - - /** - * The default constructor that initializes an empty State object. - */ - public PercentInput () { - } - - - /** Tell UI what to display for input. */ - @Override - protected String getUIProvider() { - return "percent_input"; - } - - - @Override - protected String[] getDefaultsFor(CallContext context, StateData data) { - if (data != null && data.getName().equals(PARAMETER_NAME)) { - return new String[] {"5", "5"}; - } - - return null; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java Tue Nov 12 09:24:07 2019 +0100 @@ -1119,14 +1119,12 @@ final String key = gauge != null ? gauge.getName() + String.valueOf(q) : null; if (!this.gaugeQ_W_Map.containsKey(key) && key != null) { - final DischargeTable dt = gauge.fetchMasterDischargeTable(); + // (Pos 19.1 b) + final DischargeTable dt = gauge.fetchRecentDischargeTable(); final double[][] table = DischargeTables.loadDischargeTableValues(dt); final double[] qs = DischargeTables.getWsForQ(table, q); - // final DischargeTables dct = new DischargeTables(gauge.getRiver().getName(), gauge.getName()); - // final double[] qs = DischargeTables.getWsForQ(dct.getFirstTable(), q); // TODO: KLÄREN, welche Abflusstabelle - // genommen werden soll! if (qs != null && qs.length > 0) { this.gaugeQ_W_Map.put(key, qs[0]); }
--- a/artifacts/src/main/java/org/dive4elements/river/exports/extreme/ExtremeWQCurveGenerator.java Mon Nov 11 16:35:56 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,260 +0,0 @@ -/* 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.exports.extreme; - -import java.awt.Color; - -import org.apache.log4j.Logger; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.plot.Marker; -import org.jfree.chart.plot.ValueMarker; -import org.jfree.chart.plot.XYPlot; -import org.jfree.chart.title.TextTitle; -import org.jfree.data.xy.XYSeries; - -import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.river.artifacts.access.FixAnalysisAccess; -import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.model.DateRange; -import org.dive4elements.river.artifacts.model.FacetTypes; -import org.dive4elements.river.artifacts.model.extreme.Curve; -import org.dive4elements.river.artifacts.model.extreme.ExtremeCurveFacet; -import org.dive4elements.river.artifacts.resources.Resources; -import org.dive4elements.river.exports.fixings.FixWQCurveGenerator; -import org.dive4elements.river.exports.StyledSeriesBuilder; -import org.dive4elements.river.jfree.JFreeUtil; -import org.dive4elements.river.jfree.StyledXYSeries; - -import org.dive4elements.river.themes.ThemeDocument; -import org.dive4elements.river.utils.RiverUtils; - - -/** - * Generator for WQ fixing charts. - * @author <a href="mailto:christian.lins@intevation.de">Christian Lins</a> - */ -public class ExtremeWQCurveGenerator -extends FixWQCurveGenerator -implements FacetTypes -{ - /** Private log. */ - private static Logger log = - Logger.getLogger(ExtremeWQCurveGenerator.class); - - public static final String I18N_CHART_TITLE = - "chart.extreme.wq.title"; - - public static final String I18N_CHART_SUBTITLE = - "chart.extreme.wq.subtitle"; - - public static final String I18N_CHART_SUBTITLE1 = - "chart.extreme.wq.subtitle1"; - - public static final String I18N_XAXIS_LABEL = - "chart.extreme.wq.xaxis.label"; - - public static final String I18N_YAXIS_LABEL = - "chart.extreme.wq.yaxis.label"; - - public static final String I18N_CHART_TITLE_DEFAULT = - "Extremkurvenanalyse"; - - public static final String I18N_XAXIS_LABEL_DEFAULT = - "Q [m\u00B3/s]"; - - public static final String I18N_YAXIS_LABEL_DEFAULT = - "W [NN + m]"; - - - /** First, ask parent to add data, then handle extreme_wq_curve(_base) - * data.*/ - @Override - public boolean prepareChartData( - ArtifactAndFacet aaf, - ThemeDocument theme, - boolean visible - ) { - if (super.prepareChartData(aaf, theme, visible)) { - return true; - } - - String name = aaf.getFacetName(); - if (name.equals(EXTREME_WQ_CURVE)) { - doExtremeCurveOut(aaf, theme, visible); - return true; - } - else if (name.equals(EXTREME_WQ_CURVE_BASE)) { - doExtremeCurveBaseOut(aaf, theme, visible); - return true; - } - return false; - } - - /** Overriden to show second axis also if no visible data present. */ - @Override - protected void adjustAxes(XYPlot plot) { - super.adjustAxes(plot); - if (getCurrentGaugeDatum() != 0d) { - // Show the W[*m] axis even if there is no data. - plot.setRangeAxis(1, createYAxis(YAXIS.W.idx)); - } - } - - /** Do Extreme Curve nonextrapolated points out. */ - protected void doExtremeCurveBaseOut( - ArtifactAndFacet aaf, - ThemeDocument theme, - boolean visible - ) { - log.debug("doExtremeCurveBaseOut"); - ExtremeCurveFacet facet = (ExtremeCurveFacet) aaf.getFacet(); - Curve curve = (Curve) facet.getData(aaf.getArtifact(), getContext()); - if (curve == null) { - log.warn("doExtremeCurveBaseOut: Facet does not contain Curve"); - return; - } - - XYSeries qwseries = new StyledXYSeries(aaf.getFacetName(), - aaf.getFacetDescription(), theme); - - double gaugeDatum = getCurrentGaugeDatum(); - - if (gaugeDatum == 0d) { - StyledSeriesBuilder.addPointsQW( - qwseries, curve.getQs(), curve.getWs()); - addAxisSeries(qwseries, YAXIS.W.idx, visible); - } - else { - XYSeries series2 = - new StyledXYSeries(aaf.getFacetName(), aaf.getFacetDescription(), theme); - StyledSeriesBuilder.addPointsQW( - series2, curve.getQs(), curve.getWs()); - addAxisSeries(series2, YAXIS.W.idx, false); - - StyledSeriesBuilder.addPointsQW( - qwseries, curve.getQs(), curve.getWs(), -gaugeDatum, 100d); - - addAxisSeries(qwseries, YAXIS.WCm.idx, visible); - } - - //addAxisSeries(qwseries, YAXIS.W.idx, visible); - } - - - /** Do Extreme Curve out */ - protected void doExtremeCurveOut( - ArtifactAndFacet aaf, - ThemeDocument theme, - boolean visible - ) { - log.debug("doExtremeCurveOut"); - ExtremeCurveFacet facet = (ExtremeCurveFacet) aaf.getFacet(); - Curve curve = (Curve) facet.getData(aaf.getArtifact(), getContext()); - if (curve == null) { - log.warn("doExtremeCurveOut: Facet does not contain Curve"); - return; - } - - double maxQ = curve.getSuggestedMaxQ(); - if (maxQ == Double.MAX_VALUE) { - maxQ = 8000; - } - - StyledXYSeries series = JFreeUtil.sampleFunction2D( - aaf.getFacetName(), - curve, - theme, - aaf.getFacetDescription(), - 500, // number of samples - 0.0 , // start - maxQ); // end - - // Add marker from where on its extrapolated. - if (theme.parseShowExtraMark()) { - double[] qs = curve.getQs(); - double extrapolateFrom = qs[qs.length-1]; - - Marker m = new ValueMarker(extrapolateFrom); - m.setPaint(Color.black); - addDomainMarker(m); - } - - addAxisSeries(series, YAXIS.W.idx, visible); - } - - - @Override - protected String getChartTitle(final CallContext context) { - return Resources.format( - getContext().getMeta(), - I18N_CHART_TITLE, - I18N_CHART_TITLE_DEFAULT, - getContext().getContextValue(CURRENT_KM)); - } - - - @Override - protected String getDefaultChartTitle(final CallContext context) { - return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); - } - - @Override - protected String getDefaultChartSubtitle(final CallContext context) { - FixAnalysisAccess access = new FixAnalysisAccess(artifact); - DateRange dateRange = access.getDateRange(); - DateRange refRange = access.getReferencePeriod(); - - if (dateRange != null && refRange != null) { - return Resources.format( - getContext().getMeta(), - I18N_CHART_SUBTITLE, - "", - access.getRiverName(), - dateRange.getFrom(), - dateRange.getTo(), - refRange.getFrom(), - refRange.getTo()); - } - - return null; - } - - @Override - protected void addSubtitles(final CallContext context, JFreeChart chart) { - String defaultSubtitle = getDefaultChartSubtitle(context); - - if (defaultSubtitle == null || defaultSubtitle.length() == 0) { - return; - } - - chart.addSubtitle(new TextTitle(defaultSubtitle)); - } - - @Override - protected String getDefaultXAxisLabel(final CallContext context) { - return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); - } - - @Override - protected String getDefaultYAxisLabel(int pos) { - D4EArtifact flys = getArtifact(); - - String unit = RiverUtils.getRiver(flys).getWstUnit().getName(); - if (pos == 0) { - unit = "cm"; - } - - return msg( - I18N_YAXIS_LABEL, - I18N_YAXIS_LABEL_DEFAULT, - new Object[] { unit }); - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/exports/extreme/ExtremeWQCurveInfoGenerator.java Mon Nov 11 16:35:56 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* 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.exports.extreme; - -import org.dive4elements.river.exports.ChartInfoGenerator; - -/** - * A ChartInfoGenerator that generates meta information for specific extreme - * analysis W/Q curves. - */ -public class ExtremeWQCurveInfoGenerator extends ChartInfoGenerator { - - public ExtremeWQCurveInfoGenerator() { - super(new ExtremeWQCurveGenerator()); - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/resources/messages.properties Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/src/main/resources/messages.properties Tue Nov 12 09:24:07 2019 +0100 @@ -124,7 +124,6 @@ calc.w.differences = Differences calc.historical.discharge.curve = Historical Discharge Rating Curve calc.reference.curve = Reference Curve -calc.extreme.curve = Extreme Curves calc.fixation.default = Fixation calc.bed.middle = Mean Bed Level calc.bed.diff = Bed Level Difference
--- a/artifacts/src/main/resources/messages_de.properties Mon Nov 11 16:35:56 2019 +0100 +++ b/artifacts/src/main/resources/messages_de.properties Tue Nov 12 09:24:07 2019 +0100 @@ -124,7 +124,6 @@ calc.w.differences = Differenzen calc.historical.discharge.curve = Hist. Abflusskurven calc.reference.curve = Bezugslinie -calc.extreme.curve = Auslagerung extremer Wasserspiegellagen calc.fixation.default = Fixierung calc.bed.middle = Mittlere Sohlh\u00f6he calc.bed.diff = Sohlh\u00f6hendifferenz