Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java @ 2330:594885703687
Picked changes r4015:4026 from trunk.
flys-artifacts/tags/2.6@4028 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 10 Feb 2012 11:18:27 +0000 |
parents | 61b32380ffdb |
children | 177b0c91928d |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java Fri Feb 10 08:28:17 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java Fri Feb 10 11:18:27 2012 +0000 @@ -903,11 +903,28 @@ return relateWs(km1, km2, RELATE_WS_SAMPLES, errors); } + private static class ErrorHandler { + + boolean hasErrors; + Calculation errors; + + ErrorHandler(Calculation errors) { + this.errors = errors; + } + + void error(double km, String key, Object ... args) { + if (errors != null && !hasErrors) { + hasErrors = true; + errors.addProblem(km, key, args); + } + } + } // class ErrorHandler + + /* TODO: Add optimized methods of relateWs to relate one * start km to many end kms. The index generation/spline stuff for * the start km is always the same. */ - public double [][] relateWs( double km1, double km2, @@ -951,31 +968,51 @@ TDoubleArrayList qs1 = new TDoubleArrayList(numSamples); TDoubleArrayList qs2 = new TDoubleArrayList(numSamples); - boolean hadErrors = false; + ErrorHandler err = new ErrorHandler(errors); int i = 0; for (double p = 0d; p <= N-1; p += stepWidth, ++i) { + + double q1; try { - double q1 = iQ1.value(p); - double w1 = qW1.value(q1); - double q2 = iQ2.value(p); - double w2 = qW2.value(q2); - ws1.add(w1); - ws2.add(w2); - qs1.add(q1); - qs2.add(q2); + q1 = iQ1.value(p); } catch (ArgumentOutsideDomainException aode) { - if (!hadErrors) { - // XXX: I'm not sure if this really can happen - // and if we should report this more than once. - hadErrors = true; - if (errors != null) { - errors.addProblem("relating.w.w.failed"); - log.warn("W~W failed", aode); - } - } + err.error(km1, "w.w.qkm1.failed", p); + continue; } + + double w1; + try { + w1 = qW1.value(q1); + } + catch (ArgumentOutsideDomainException aode) { + err.error(km1, "w.w.wkm1.failed", p); + continue; + } + + double q2; + try { + q2 = iQ2.value(p); + } + catch (ArgumentOutsideDomainException aode) { + err.error(km2, "w.w.qkm2.failed", p); + continue; + } + + double w2; + try { + w2 = qW2.value(q2); + } + catch (ArgumentOutsideDomainException aode) { + err.error(km2, "w.w.wkm2.failed", p); + continue; + } + + ws1.add(w1); + ws2.add(w2); + qs1.add(q1); + qs2.add(q2); } return new double [][] {