comparison artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java @ 8755:30b1ddadf275

(issue1801) Unify reference gauge finding code The basic way as described in the method comment of the determineRefGauge method is now used in the WINFOArtifact, MainValuesService and RiverUtils.getGauge method. RiverUtils.getGauge previously just returned the first gauge found. While this is now a behavior change I believe that it is always more correct then the undeterministic behavior of the previous implmenentation.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 24 Jun 2015 14:07:26 +0200
parents 787dff3fd634
children 26dedebbe39f
comparison
equal deleted inserted replaced
8754:574f8b80799f 8755:30b1ddadf275
256 if (isFreeQ() || isFreeW()) { 256 if (isFreeQ() || isFreeW()) {
257 refKm = range[0]; 257 refKm = range[0];
258 log.debug("'free' calculation (km " + refKm + ")"); 258 log.debug("'free' calculation (km " + refKm + ")");
259 } 259 }
260 else { 260 else {
261 Gauge gauge = determineRefGauge(range, river); 261 Gauge gauge = river.determineRefGauge(range, rangeAccess.isRange());
262 262
263 if (gauge == null) { 263 if (gauge == null) {
264 return error( 264 return error(
265 new WQKms[0], "no.gauge.found.for.km", range[0]); 265 new WQKms[0], "no.gauge.found.for.km", range[0]);
266 } 266 }
728 728
729 if (debug) { 729 if (debug) {
730 log.debug("range: " + Arrays.toString(range)); 730 log.debug("range: " + Arrays.toString(range));
731 } 731 }
732 732
733 Gauge g = determineRefGauge(range, rangeAccess.getRiver()); 733 Gauge g = rangeAccess.getRiver().determineRefGauge(range, rangeAccess.isRange());
734 if (g == null) { 734 if (g == null) {
735 log.warn("no gauge found for km: " + range[0]); 735 log.warn("no gauge found for km: " + range[0]);
736 return null; 736 return null;
737 } 737 }
738 738
780 }; 780 };
781 } 781 }
782 782
783 783
784 /** 784 /**
785 * Determine reference gauge dependent on direction of calculation
786 * for a range calculation, otherwise dependent on flow direction.
787 */
788 public Gauge determineRefGauge(double[] range, River river) {
789 if (isRange()) {
790 return river.determineGaugeByPosition(
791 range[0],
792 range[0] > range[1]);
793 }
794 else {
795 return river.determineGaugeByPosition(range[0]);
796 }
797 }
798
799 /**
800 * Determines the selected mode of distance/range input. 785 * Determines the selected mode of distance/range input.
801 * 786 *
787 * Compatibility wrapper around RangeAccess.
788 *
802 * @return true, if the range mode is selected otherwise false. 789 * @return true, if the range mode is selected otherwise false.
803 */ 790 */
804 public boolean isRange() { 791 public boolean isRange() {
805 StateData mode = getData("ld_mode"); 792 RangeAccess rangeAccess = new RangeAccess(this);
806 793 return rangeAccess.isRange();
807 if (mode == null) {
808 log.warn("No mode location/range chosen. Defaults to range.");
809 return true;
810 }
811
812 String value = (String) mode.getValue();
813
814 return value.equals("distance");
815 } 794 }
816 795
817 796
818 /** 797 /**
819 * Returns the selected distance based on a given range (from, to). 798 * Returns the selected distance based on a given range (from, to).

http://dive4elements.wald.intevation.org