Mercurial > dive4elements > river
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). |