# HG changeset patch # User Sascha L. Teichmann # Date 1306747197 0 # Node ID a9bde508824a6d61adfb61e17e58611cf399ec1c # Parent 2dbbb5be30a14737dd244df2afdceb084dfd8c19 flys/issue82: Only successful interpolations are named. flys-artifacts/trunk@2027 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 2dbbb5be30a1 -r a9bde508824a flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri May 27 16:52:37 2011 +0000 +++ b/flys-artifacts/ChangeLog Mon May 30 09:19:57 2011 +0000 @@ -1,3 +1,10 @@ +2011-05-30 Sascha L. Teichmann + + flys/issue82 + + * src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java: + Only successful interpolations are named. + 2011-05-27 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/math/BackJumpCorrector.java: diff -r 2dbbb5be30a1 -r a9bde508824a flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Fri May 27 16:52:37 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Mon May 30 09:19:57 2011 +0000 @@ -1,6 +1,8 @@ package de.intevation.flys.artifacts; import java.util.List; +import java.util.Set; +import java.util.HashSet; import java.util.Vector; import java.util.ArrayList; @@ -277,11 +279,15 @@ throw new NullPointerException("No Wst found for selected river."); } - WQKms[] results = computeWaterlevelData(kms, qs, wst, river.getKmUp()); + HashSet failed = new HashSet(); + + WQKms[] results = computeWaterlevelData( + kms, qs, wst, river.getKmUp(), failed); // TODO Introduce a caching mechanism here! - setWaterlevelNames(results, qSel ? qs : ws, qSel ? "Q" : "W"); + setWaterlevelNames( + results, qSel ? qs : ws, qSel ? "Q" : "W", failed); return results; } @@ -295,9 +301,17 @@ * @param v The input values of the computations. * @param wq The WQ mode - can be one of "W" or "Q". */ - public static void setWaterlevelNames(WQKms[] r, double[] v, String wq) { + public static void setWaterlevelNames( + WQKms[] r, + double[] v, + String wq, + Set failed + ) { + int pos = 0; for (int i = 0; i < v.length; i++) { - r[i].setName(wq + "=" + Double.toString(v[i])); + if (!failed.contains(i)) { + r[pos++].setName(wq + "=" + v[i]); + } } } @@ -316,7 +330,8 @@ double[] kms, double[] qs, WstValueTable wst, - boolean up + boolean up, + Set failed ) { logger.info("WINFOArtifact.computeWaterlevelData"); @@ -336,6 +351,7 @@ } else { logger.warn("interpolation failed for q = " + qs[i]); + failed.add(i); } } @@ -567,7 +583,12 @@ } if (qs.length == 1) { double [] kms = getKms(segments[0]); - return computeWaterlevelData(kms, qs, wst, kmUp); + HashSet failed = new HashSet(); + WQKms [] results = computeWaterlevelData + (kms, qs, wst, kmUp, failed); + setWaterlevelNames( + results, qs, isQ() ? "Q" : "W", failed); + return results; } } @@ -652,6 +673,8 @@ int referenceIndex = kmUp ? 0 : boundKms.length-1; + HashSet failed = new HashSet(); + for (int i = 0; i < iqs.length; ++i) { double [] iqsi = iqs[i]; @@ -662,6 +685,7 @@ if (qPosition == null) { logger.warn("interpolation failed for " + iqsi[i]); + failed.add(i); continue; } @@ -691,7 +715,8 @@ WQKms [] wqkms = results.toArray(new WQKms[results.size()]); - setDischargeLongitudinalSectionNames(wqkms, iqs, isQ() ? "Q" : "W"); + setDischargeLongitudinalSectionNames( + wqkms, iqs, isQ() ? "Q" : "W", failed); return wqkms; } @@ -724,15 +749,21 @@ * in r represents a column. */ public static void setDischargeLongitudinalSectionNames( - WQKms [] wqkms, - double [][] iqs, - String wq + WQKms [] wqkms, + double [][] iqs, + String wq, + Set failed ) { logger.debug("WINFOArtifact.setDischargeLongitudinalSectionNames"); // TODO: I18N - for (int j = 0; j < wqkms.length; ++j) { + int pos = 0; + + for (int j = 0; j < iqs.length; ++j) { + if (failed.contains(j)) { + continue; + } StringBuilder sb = new StringBuilder(wq) .append(" benutzerdefiniert ("); @@ -745,7 +776,7 @@ } sb.append(")"); - wqkms[j].setName(sb.toString()); + wqkms[pos++].setName(sb.toString()); } } }