comparison 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
comparison
equal deleted inserted replaced
361:3e3ec9613883 362:d79a51fc4f1d
18 import de.intevation.artifactdatabase.state.StateEngine; 18 import de.intevation.artifactdatabase.state.StateEngine;
19 import de.intevation.artifactdatabase.transition.TransitionEngine; 19 import de.intevation.artifactdatabase.transition.TransitionEngine;
20 20
21 import de.intevation.artifacts.common.utils.XMLUtils; 21 import de.intevation.artifacts.common.utils.XMLUtils;
22 22
23 import de.intevation.flys.model.River;
24
23 import de.intevation.flys.artifacts.states.DefaultState; 25 import de.intevation.flys.artifacts.states.DefaultState;
24 import de.intevation.flys.artifacts.context.FLYSContext; 26 import de.intevation.flys.artifacts.context.FLYSContext;
27 import de.intevation.flys.artifacts.model.WQKms;
28 import de.intevation.flys.artifacts.model.WstValueTable;
25 29
26 30
27 /** 31 /**
28 * The default WINFO artifact. 32 * The default WINFO artifact.
29 * 33 *
213 DefaultState state = (DefaultState) engine.getState(stateId); 217 DefaultState state = (DefaultState) engine.getState(stateId);
214 state = (DefaultState) fillState(state); 218 state = (DefaultState) fillState(state);
215 219
216 ui.appendChild(state.describeStatic(doc, ui, context, uuid)); 220 ui.appendChild(state.describeStatic(doc, ui, context, uuid));
217 } 221 }
218 222 }
223
224
225 //
226 // METHODS FOR RETRIEVING COMPUTED DATA FOR DIFFERENT CHART TYPES
227 //
228
229 /**
230 * Returns the data that is computed by a waterlevel computation.
231 *
232 * @return an array of data triples that consist of W, Q and Kms.
233 */
234 public WQKms[] getWaterlevelData()
235 throws NullPointerException
236 {
237 logger.debug("WINFOArtifact.getWaterlevelData");
238
239 River river = getRiver();
240 if (river == null) {
241 throw new NullPointerException("No river selected.");
242 }
243
244 double[] kms = getKms();
245 if (kms == null) {
246 throw new NullPointerException("No Kms selected.");
247 }
248
249 double[] qs = getQs();
250 if (qs == null) {
251 // TODO Use DischargeTableValue.getQForW() to compute the Qs.
252 }
253
254 WstValueTable wst = WstValueTable.getTable(river);
255 if (wst == null) {
256 throw new NullPointerException("No Wst found for selected river.");
257 }
258
259 // TODO Introduce a caching mechanism here!
260
261 return computeWaterlevelData(kms, qs, wst);
262 }
263
264
265 /**
266 * Computes the data of a waterlevel computation based on the interpolation
267 * in WstValueTable.
268 *
269 * @param kms The kilometer values.
270 * @param qa The discharge values.
271 * @param wst The WstValueTable used for the interpolation.
272 *
273 * @return an array of data triples that consist of W, Q and Kms.
274 */
275 public static WQKms[] computeWaterlevelData(
276 double[] kms,
277 double[] qs,
278 WstValueTable wst)
279 {
280 logger.info("WINFOArtifact.computeWaterlevelData");
281
282 WQKms[] wqkms = new WQKms[qs.length];
283 for (int i = 0; i < wqkms.length; i++) {
284 wqkms[i] = new WQKms();
285 }
286
287 for (double km: kms) {
288 double[] interpolatedW = wst.interpolateW(km, qs);
289
290 // TODO Modify the interpolation to return a better formed data
291 // structure.
292 for (int i = 0; i < interpolatedW.length; i++) {
293 wqkms[i].add(interpolatedW[i], qs[i], km);
294 }
295 }
296
297 return wqkms;
219 } 298 }
220 } 299 }
221 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 300 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org