# HG changeset patch # User Ingo Weinzierl # Date 1304340430 0 # Node ID 0ccf7200fc518c4e9ca70b9a9b0b95c4fe5c4633 # Parent aa0889141b15f272875797af8a26ddfb3cd77d9a Enabled the server to handle longitudinal section chart requests with inserted W data - Ws are transformed into Qs then. flys-artifacts/trunk@1789 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r aa0889141b15 -r 0ccf7200fc51 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon May 02 12:41:24 2011 +0000 +++ b/flys-artifacts/ChangeLog Mon May 02 12:47:10 2011 +0000 @@ -1,3 +1,13 @@ +2011-05-02 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: New + methods for retrieving selected W values (getWs()). + + * src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java: The + method for retrieving waterlevel data takes care on selected Ws, now. + The selected Ws are transformed using the DischargeTables.getQForW() + into Q values. + 2011-05-02 Ingo Weinzierl * src/main/java/de/intevation/flys/artifacts/model/DischargeTables.java: diff -r aa0889141b15 -r 0ccf7200fc51 flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Mon May 02 12:41:24 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Mon May 02 12:47:10 2011 +0000 @@ -32,6 +32,7 @@ import de.intevation.flys.model.River; import de.intevation.flys.artifacts.context.FLYSContext; +import de.intevation.flys.artifacts.model.DischargeTables; import de.intevation.flys.artifacts.model.RiverFactory; import de.intevation.flys.artifacts.states.DefaultState; @@ -533,6 +534,76 @@ * @return the selected Q values or null, if no Q values are selected. */ public double[] getQs() { + StateData dMode = getData("wq_mode"); + + String mode = dMode != null ? (String) dMode.getValue() : ""; + + if (mode.equals("Q")) { + return getWQTriple(); + } + else { + logger.warn("You try to get Qs, but W has been inserted."); + return null; + } + } + + + /** + * This method returns the W values. + * + * @return the selected W values or null, if no W values are selected. + */ + public double[] getWs() { + StateData dMode = getData("wq_mode"); + + String mode = dMode != null ? (String) dMode.getValue() : ""; + + if (mode.equals("W")) { + return getWQTriple(); + } + else { + logger.warn("You try to get Qs, but W has been inserted."); + return null; + } + } + + + /** + * Returns the Qs for a number of Ws. This method makes use of + * DischargeTables.getQForW(). + * + * @param ws An array of W values. + * + * @return an array of Q values. + */ + public double[] getQsForWs(double[] ws) { + logger.debug("FLYSArtifact.getQsForWs"); + + River r = getRiver(); + Gauge g = getGauge(); + + DischargeTables dt = new DischargeTables(r.getName(), g.getName()); + Map tmp = dt.getValues(); + + double[][] values = tmp.get(g.getName()); + double[] qs = new double[ws.length]; + + for (int i = 0; i < ws.length; i++) { + qs[i] = dt.getQForW(values, ws[i]); + logger.debug("Q for " + ws[i] + " = " + qs[i]); + } + + return qs; + } + + + /** + * This method returns an array of inserted WQ triples that consist of from, + * to and the step width. + * + * @return an array of from, to and step width. + */ + protected double[] getWQTriple() { StateData dFrom = getData("wq_from"); StateData dTo = getData("wq_to"); diff -r aa0889141b15 -r 0ccf7200fc51 flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Mon May 02 12:41:24 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Mon May 02 12:47:10 2011 +0000 @@ -248,7 +248,10 @@ double[] qs = getQs(); if (qs == null) { - // TODO Use DischargeTableValue.getQForW() to compute the Qs. + logger.debug("Determine Q values based on a set of W values."); + + double[] ws = getWs(); + qs = getQsForWs(ws); } WstValueTable wst = WstValueTable.getTable(river);