# HG changeset patch # User Sascha L. Teichmann # Date 1306420026 0 # Node ID acf3b49ec31ff9fe0527ca54147f1f51ea758591 # Parent d8c47520c7265a99245622d482b0a7ce3f7d4248 Take the flow direction into account. flys-artifacts/trunk@2010 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r d8c47520c726 -r acf3b49ec31f flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Thu May 26 09:41:57 2011 +0000 +++ b/flys-artifacts/ChangeLog Thu May 26 14:27:06 2011 +0000 @@ -1,3 +1,17 @@ +2011-05-26 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java: + Take the flow direction into account. + + * src/main/java/de/intevation/flys/artifacts/states/DefaultState.java: + Prevent NPE. + + * src/main/java/de/intevation/flys/artifacts/states/RangeState.java: + Allow to be 'from' greater than 'to' in ranges. + + * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: Negate + step if 'from' is greater than 'to'. + 2011-05-26 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: diff -r d8c47520c726 -r acf3b49ec31f flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Thu May 26 09:41:57 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Thu May 26 14:27:06 2011 +0000 @@ -930,6 +930,10 @@ double [] values = new double[num]; + if (from > to) { + step = -step; + } + for (int idx = 0; idx < num; idx++) { values[idx] = Math.round(lower * precision)/precision; lower += step; diff -r d8c47520c726 -r acf3b49ec31f flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Thu May 26 09:41:57 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Thu May 26 14:27:06 2011 +0000 @@ -277,7 +277,7 @@ throw new NullPointerException("No Wst found for selected river."); } - WQKms[] results = computeWaterlevelData(kms, qs, wst); + WQKms[] results = computeWaterlevelData(kms, qs, wst, river.getKmUp()); // TODO Introduce a caching mechanism here! @@ -315,8 +315,9 @@ public static WQKms[] computeWaterlevelData( double[] kms, double[] qs, - WstValueTable wst) - { + WstValueTable wst, + boolean up + ) { logger.info("WINFOArtifact.computeWaterlevelData"); WQKms[] wqkms = new WQKms[qs.length]; @@ -326,7 +327,7 @@ for (int i = 0; i < qs.length; i++) { double [] oqs = new double[kms.length]; double [] ows = new double[kms.length]; - int referenceIndex = 0; // TODO: Make depend on the flow direction + int referenceIndex = up ? 0 : kms.length-1; WstValueTable.QPosition qPosition = wst.interpolate(qs[i], referenceIndex, kms, ows, oqs); if (qPosition != null) { @@ -511,6 +512,8 @@ return new WQKms[0]; } + boolean kmUp = river.getKmUp(); + WstValueTable wst = WstValueTableFactory.getTable(river); if (wst == null) { logger.error("No wst found for selected river."); @@ -533,7 +536,7 @@ } if (qs.length == 1) { double [] kms = getKms(segments[0]); - return computeWaterlevelData(kms, qs, wst); + return computeWaterlevelData(kms, qs, wst, kmUp); } } @@ -617,7 +620,9 @@ double [] iqsi = iqs[i]; QPosition qPosition = wst.interpolate( - iqsi[0], 0, boundKms, boundWs, boundQs); + iqsi[0], + kmUp ? 0 : boundKms.length-1, + boundKms, boundWs, boundQs); if (qPosition == null) { logger.warn("interpolation failed for " + iqsi[i]); diff -r d8c47520c726 -r acf3b49ec31f flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DefaultState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DefaultState.java Thu May 26 09:41:57 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DefaultState.java Thu May 26 14:27:06 2011 +0000 @@ -160,8 +160,10 @@ ui.appendChild(select); Element[] items = createItems(creator, artifact, name, context); - for (Element item: items) { - choices.appendChild(item); + if (items != null) { + for (Element item: items) { + choices.appendChild(item); + } } } diff -r d8c47520c726 -r acf3b49ec31f flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RangeState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RangeState.java Thu May 26 09:41:57 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RangeState.java Thu May 26 14:27:06 2011 +0000 @@ -44,9 +44,11 @@ "Invalid 'to'. " + to + " is bigger than " + toValid); throw new IllegalArgumentException("error_feed_to_out_of_range"); } + /* else if (from > to) { throw new IllegalArgumentException("error_feed_from_bigger_to"); } + */ return true; }