# HG changeset patch # User Ingo Weinzierl # Date 1323264996 0 # Node ID 1558ef7b0e7b64d0141fac0aeff843d95b0da9b5 # Parent b6431052a694be8cfed055e1f34361fdd8fd3106 Picked rev3357, rev3359 and rev3360 from trunk. flys-artifacts/tags/pre2.6-2011-12-05@3362 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r b6431052a694 -r 1558ef7b0e7b flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon Dec 05 10:51:15 2011 +0000 +++ b/flys-artifacts/ChangeLog Wed Dec 07 13:36:36 2011 +0000 @@ -1,3 +1,40 @@ +2011-12-06 Felix Wolfsteller + + Further flys/issue420 fix (No Discharge Curves for Mosel). + + * src/main/java/de/intevation/flys/exports/XYChartGenerator.java: + (includeYRange, mergeRanges): Moved NaN-guard to lowest level. + (combineXRanges): Also NaN guard the X Axis extent. + +2011-12-06 Felix Wolfsteller + + Partial fix for flys/issue420 (Berechnete Abflusskurve: Kein Diagramm für + Mosel). Protect axis extent calculation from empty or invalid + datasets. + + * src/main/java/de/intevation/flys/exports/XYChartGenerator.java: + (includeRange, includeYRange): Renamed, updated callers. + (includeYRange): Protect from merging extent with NaNs. + (debugDatasets): Be more verbose on the datasets. + (zoom): Doc. + +2011-12-06 Felix Wolfsteller + + Fix flys/issue423 (Diagramm: Hauptwerte bei Abflusskurve am Pegel + werden an Y-Achse nicht angezeigt) - show not "raw" (vs interpolated) + values at Gauge. + + * src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java, + src/main/java/de/intevation/flys/artifacts/model/MainValuesWFacet.java: + Add parameterization to let facet know whether to fetch data at + Gauges or at Artifacts position. + + * src/main/java/de/intevation/flys/artifacts/MainValuesArtifact.java: + Let the MainValueFacets know whether to ask for interpolated + MainValues; (do not interpolate for Gauges Main Values). + (getMainValuesQ, getMainValuesW): Added parameter to control + interpolation. + 2011-12-05 Ingo Weinzierl * src/main/java/de/intevation/flys/utils/MapfileGenerator.java: Modified @@ -14,6 +51,7 @@ not. In addition, the scenario parameter used by WSPLGEN is now set correctly. +>>>>>>> .r3356 2011-12-05 Felix Wolfsteller Allow longitudinal_section.q facets in wdiff states output. diff -r b6431052a694 -r 1558ef7b0e7b flys-artifacts/src/main/java/de/intevation/flys/artifacts/MainValuesArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/MainValuesArtifact.java Mon Dec 05 10:51:15 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/MainValuesArtifact.java Wed Dec 07 13:36:36 2011 +0000 @@ -83,25 +83,29 @@ Resources.getMsg( callMeta, "facet.discharge_curves.mainvalues.q", - "facet.discharge_curves.mainvalues.q")); + "facet.discharge_curves.mainvalues.q"), + false); Facet qfacet2 = new MainValuesQFacet( MAINVALUES_Q, Resources.getMsg( callMeta, "facet.discharge_curves.mainvalues.q", - "facet.discharge_curves.mainvalues.q")); + "facet.discharge_curves.mainvalues.q"), + true); Facet wfacet1 = new MainValuesWFacet( COMPUTED_DISCHARGE_MAINVALUES_W, Resources.getMsg( callMeta, "facet.discharge_curves.mainvalues.w", - "facet.discharge_curves.mainvalues.w")); + "facet.discharge_curves.mainvalues.w"), + false); Facet wfacet2 = new MainValuesWFacet( MAINVALUES_W, Resources.getMsg( callMeta, "facet.discharge_curves.mainvalues.w", - "facet.discharge_curves.mainvalues.w")); + "facet.discharge_curves.mainvalues.w"), + true); List fs = new ArrayList(); fs.add(qfacet1); @@ -233,7 +237,7 @@ * Get a list of "Q" main values. * @return list of Q main values. */ - public List getMainValuesQ() { + public List getMainValuesQ(boolean atGauge) { List filteredList = new ArrayList(); Gauge gauge = getGauge(); WstValueTable interpolator = WstValueTableFactory.getTable(FLYSUtils.getRiver(this)); @@ -246,8 +250,13 @@ List orig = gauge.getMainValues(); for (MainValue mv : orig) { if (mv.getMainValue().getType().getName().equals("Q")) { - interpolator.interpolate(mv.getValue().doubleValue(), + if (atGauge) { + q_out[0] = mv.getValue().doubleValue(); + } + else { + interpolator.interpolate(mv.getValue().doubleValue(), gaugeStation, kms, w_out, q_out, c); + } filteredList.add(new NamedDouble( mv.getMainValue().getName(), q_out[0] @@ -261,9 +270,10 @@ /** * Get a list of "W" main values. + * @param atGauge if true, do not interpolate * @return list of W main values. */ - public List getMainValuesW() { + public List getMainValuesW(boolean atGauge) { List filteredList = new ArrayList(); Gauge gauge = getGauge(); WstValueTable interpolator = WstValueTableFactory.getTable(FLYSUtils.getRiver(this)); @@ -276,6 +286,13 @@ if (gauge != null) { List orig = gauge.getMainValues(); for (MainValue mv : orig) { + if (atGauge) { + if (mv.getMainValue().getType().getName().equals("W")) { + filteredList.add(new NamedDouble(mv.getMainValue().getName(), + mv.getValue().doubleValue())); + + } + } else // We cannot interpolate the W values, so derive them // from given Q values. if (mv.getMainValue().getType().getName().equals("Q")) { diff -r b6431052a694 -r 1558ef7b0e7b flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java Mon Dec 05 10:51:15 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java Wed Dec 07 13:36:36 2011 +0000 @@ -22,11 +22,15 @@ extends DefaultFacet implements FacetTypes { + /** Do we want MainValues at Gauge (not interpolated)? */ + protected boolean isAtGauge; + /** Trivial Constructor. */ - public MainValuesQFacet(String name, String description) { + public MainValuesQFacet(String name, String description, boolean atGauge) { this.description = description; this.name = name; - index = 0; + this.index = 0; + this.isAtGauge = atGauge; } @@ -42,7 +46,7 @@ public Object getData(Artifact artifact, CallContext context) { MainValuesArtifact mvArtifact = (MainValuesArtifact) artifact; - List qs = mvArtifact.getMainValuesQ(); + List qs = mvArtifact.getMainValuesQ(isAtGauge); List xy = new ArrayList(); for (NamedDouble q: qs) { @@ -62,7 +66,8 @@ */ @Override public MainValuesQFacet deepCopy() { - MainValuesQFacet copy = new MainValuesQFacet(this.name, description); + MainValuesQFacet copy = new MainValuesQFacet(this.name, + description, this.isAtGauge); copy.set(this); return copy; } diff -r b6431052a694 -r 1558ef7b0e7b flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesWFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesWFacet.java Mon Dec 05 10:51:15 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesWFacet.java Wed Dec 07 13:36:36 2011 +0000 @@ -22,11 +22,15 @@ extends DefaultFacet implements FacetTypes { + /** Do we want MainValues at Gauge (not interpolated)? */ + protected boolean isAtGauge; + /** Trivial Constructor. */ - public MainValuesWFacet(String name, String description) { + public MainValuesWFacet(String name, String description, boolean atGauge) { this.description = description; this.name = name; - index = 0; + this.index = 0; + this.isAtGauge = atGauge; } @@ -42,7 +46,7 @@ public Object getData(Artifact artifact, CallContext context) { MainValuesArtifact mvArtifact = (MainValuesArtifact) artifact; - List ws = mvArtifact.getMainValuesW(); + List ws = mvArtifact.getMainValuesW(isAtGauge); List xy = new ArrayList(); for (NamedDouble w: ws) { @@ -50,7 +54,6 @@ w.getName(), (float) w.getValue(), StickyAxisAnnotation.SimpleAxis.Y_AXIS)); - } return new FLYSAnnotation(description, xy); @@ -63,7 +66,8 @@ */ @Override public MainValuesWFacet deepCopy() { - MainValuesWFacet copy = new MainValuesWFacet(this.name, description); + MainValuesWFacet copy = new MainValuesWFacet(this.name, + description, this.isAtGauge); copy.set(this); return copy; } diff -r b6431052a694 -r 1558ef7b0e7b flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Mon Dec 05 10:51:15 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Wed Dec 07 13:36:36 2011 +0000 @@ -78,6 +78,12 @@ /** Merge (or create given range with range so far (if any). */ private void mergeRanges(Range subRange) { + // Avoid merging NaNs, as they take min/max place forever. + if (subRange == null || + Double.isNaN(subRange.getLowerBound()) || + Double.isNaN(subRange.getUpperBound())) { + return; + } if (range == null) { range = subRange; return; @@ -88,11 +94,11 @@ /** Add a dataset, include its range. */ public void addDataset(XYSeries dataset) { this.datasets.add(new XYSeriesCollection(dataset)); - includeRange(dataset); + includeYRange(dataset); } /** Adjust range to include given dataset. */ - public void includeRange(XYSeries dataset) { + public void includeYRange(XYSeries dataset) { mergeRanges(new Range(dataset.getMinY(), dataset.getMaxY())); } @@ -258,6 +264,11 @@ continue; } logger.debug("Dataset #" + i + ":" + plot.getDataset(i)); + XYSeriesCollection series = (XYSeriesCollection) plot.getDataset(i); + logger.debug("X-Extend of Dataset: " + series.getSeries(0).getMinX() + + " " + series.getSeries(0).getMaxX()); + logger.debug("Y-Extend of Dataset: " + series.getSeries(0).getMinY() + + " " + series.getSeries(0).getMaxY()); } } @@ -335,13 +346,16 @@ datasets.put(index, axisDataset); } + logger.debug("Series-extent x " + series.getMinX() + " : " + series.getMaxX() + + " extend y " + series.getMinY() + " : " + series.getMaxY()); + if (visible) { axisDataset.addDataset(series); } else { // Do this also when not visible to have axis scaled by default such // that every data-point could be seen (except for annotations). - axisDataset.includeRange(series); + axisDataset.includeYRange(series); } combineXRanges(new Range(series.getMinX(), series.getMaxX()), 0); @@ -355,6 +369,12 @@ */ private void combineXRanges(Range range, int index) { + if (range == null + || Double.isNaN(range.getLowerBound()) + || Double.isNaN(range.getUpperBound())) { + return; + } + Range old = xRanges.get(index); if (old != null) { @@ -491,10 +511,10 @@ /** * Zooms the x axis to the range specified in the attribute document. * - * @param plot The XYPlot. - * @param axis The axis the shoud be modified. + * @param plot The XYPlot. + * @param axis The axis the shoud be modified. * @param range The whole range specified by a dataset. - * @param x A user defined range (null permitted). + * @param x A user defined range (null permitted). * * @return true, if a zoom range was specified, otherwise false. */