Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 362:d79a51fc4f1d
Added necessary methods to start the computation of waterlevel data.
flys-artifacts/trunk@1770 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 29 Apr 2011 07:46:27 +0000 |
parents | d97982627596 |
children | 0ccf7200fc51 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Fri Apr 29 07:27:05 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Fri Apr 29 07:46:27 2011 +0000 @@ -20,8 +20,12 @@ import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.model.River; + import de.intevation.flys.artifacts.states.DefaultState; import de.intevation.flys.artifacts.context.FLYSContext; +import de.intevation.flys.artifacts.model.WQKms; +import de.intevation.flys.artifacts.model.WstValueTable; /** @@ -215,7 +219,82 @@ ui.appendChild(state.describeStatic(doc, ui, context, uuid)); } + } + + // + // METHODS FOR RETRIEVING COMPUTED DATA FOR DIFFERENT CHART TYPES + // + + /** + * Returns the data that is computed by a waterlevel computation. + * + * @return an array of data triples that consist of W, Q and Kms. + */ + public WQKms[] getWaterlevelData() + throws NullPointerException + { + logger.debug("WINFOArtifact.getWaterlevelData"); + + River river = getRiver(); + if (river == null) { + throw new NullPointerException("No river selected."); + } + + double[] kms = getKms(); + if (kms == null) { + throw new NullPointerException("No Kms selected."); + } + + double[] qs = getQs(); + if (qs == null) { + // TODO Use DischargeTableValue.getQForW() to compute the Qs. + } + + WstValueTable wst = WstValueTable.getTable(river); + if (wst == null) { + throw new NullPointerException("No Wst found for selected river."); + } + + // TODO Introduce a caching mechanism here! + + return computeWaterlevelData(kms, qs, wst); + } + + + /** + * Computes the data of a waterlevel computation based on the interpolation + * in WstValueTable. + * + * @param kms The kilometer values. + * @param qa The discharge values. + * @param wst The WstValueTable used for the interpolation. + * + * @return an array of data triples that consist of W, Q and Kms. + */ + public static WQKms[] computeWaterlevelData( + double[] kms, + double[] qs, + WstValueTable wst) + { + logger.info("WINFOArtifact.computeWaterlevelData"); + + WQKms[] wqkms = new WQKms[qs.length]; + for (int i = 0; i < wqkms.length; i++) { + wqkms[i] = new WQKms(); + } + + for (double km: kms) { + double[] interpolatedW = wst.interpolateW(km, qs); + + // TODO Modify the interpolation to return a better formed data + // structure. + for (int i = 0; i < interpolatedW.length; i++) { + wqkms[i].add(interpolatedW[i], qs[i], km); + } + } + + return wqkms; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :