comparison artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java @ 6603:90756201c488

Factor out filtering code in WaterlevelExporter
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 18 Jul 2013 13:26:33 +0200
parents 5ecc6d4d73f2
children ddef735db96a
comparison
equal deleted inserted replaced
6602:244beb29418e 6603:90756201c488
358 } 358 }
359 } 359 }
360 } 360 }
361 /* Append the official fixing at the bottom */ 361 /* Append the official fixing at the bottom */
362 for (WQKms wqkms: officalFixings) { 362 for (WQKms wqkms: officalFixings) {
363 logger.debug("Exporting official fixing fromKM: " + first + 363 wQKms2CSV(writer, filterWQKms(wqkms, first, last), atGauge, isQ);
364 " toKM: " + last); 364 }
365 /* To handle upstream / downstream and to limit 365 }
366 * the officialFixings to the calculation distance 366
367 * we create a new wqkms object here and fill it only 367
368 * with the relevant data. */ 368 /** Filter a wqkms object to a distance.
369 if (first.isNaN() || last.isNaN()) { 369 *
370 logger.warn("Exporting official fixing without valid first/last."); 370 * To handle upstream / downstream and to limit
371 wQKms2CSV(writer, wqkms, atGauge, isQ); 371 * the officialFixings to the calculation distance
372 return; 372 * we create a new wqkms object here and fill it only
373 } 373 * with the relevant data.
374 int firstIdx = first > last ? wqkms.size() - 1 : 0; 374 *
375 int lastIdx = first > last ? 0 : wqkms.size() -1; 375 * @param wqkms: The WQKms Object to filter
376 WQKms filtered = new WQKms (wqkms.size()); 376 * @param first: The fist kilometer of the range
377 filtered.setReferenceSystem(wqkms.getReferenceSystem()); 377 * @param last: The last kilometer of the range
378 filtered.setName(wqkms.getName()); 378 *
379 double [] dp = new double [3]; 379 * @return A new WQKms with the relevant data sorted by direction
380 380 */
381 if (first > last) { 381 private WQKms filterWQKms(WQKms wqkms, Double first, Double last) {
382 for (int i = wqkms.size() - 1; i >= 0; i--) { 382 if (first.isNaN() || last.isNaN()) {
383 dp = wqkms.get(i, dp); 383 logger.warn("Filtering official fixing without valid first/last.");
384 if (dp[2] < first && dp[2] > last) { 384 return wqkms;
385 filtered.add(dp[0], dp[1], dp[2]); 385 }
386 } 386 int firstIdx = first > last ? wqkms.size() - 1 : 0;
387 } 387 int lastIdx = first > last ? 0 : wqkms.size() -1;
388 } else { 388 WQKms filtered = new WQKms (wqkms.size());
389 for (int i = 0; i < wqkms.size(); i++) { 389 filtered.setReferenceSystem(wqkms.getReferenceSystem());
390 dp = wqkms.get(i, dp); 390 filtered.setName(wqkms.getName());
391 if (dp[2] < last && dp[2] > first) { 391 double [] dp = new double [3];
392 filtered.add(dp[0], dp[1], dp[2]); 392
393 } 393 if (first > last) {
394 } 394 for (int i = wqkms.size() - 1; i >= 0; i--) {
395 } 395 dp = wqkms.get(i, dp);
396 wQKms2CSV(writer, filtered, atGauge, isQ); 396 if (dp[2] < first && dp[2] > last) {
397 } 397 filtered.add(dp[0], dp[1], dp[2]);
398 } 398 }
399 /* 399 }
400 private WQKms filterWQKms (wkqm 400 } else {
401 */ 401 for (int i = 0; i < wqkms.size(); i++) {
402 dp = wqkms.get(i, dp);
403 if (dp[2] < last && dp[2] > first) {
404 filtered.add(dp[0], dp[1], dp[2]);
405 }
406 }
407 }
408 return filtered;
409 }
410
402 411
403 protected void writeCSVMeta(CSVWriter writer) { 412 protected void writeCSVMeta(CSVWriter writer) {
404 logger.info("WaterlevelExporter.writeCSVMeta"); 413 logger.info("WaterlevelExporter.writeCSVMeta");
405 414
406 // TODO use Access instead of RiverUtils 415 // TODO use Access instead of RiverUtils

http://dive4elements.wald.intevation.org