comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 4812:65bfb6faa538

Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
author Sascha L. Teichmann <teichmann@intevation.de>
date Fri, 18 Jan 2013 19:33:26 +0100
parents cf5ac1097d6a
children 298d540f7b70
comparison
equal deleted inserted replaced
4811:a06e443f159a 4812:65bfb6faa538
7 7
8 import de.intevation.artifacts.Artifact; 8 import de.intevation.artifacts.Artifact;
9 import de.intevation.artifacts.CallContext; 9 import de.intevation.artifacts.CallContext;
10 10
11 import de.intevation.artifacts.common.utils.StringUtils; 11 import de.intevation.artifacts.common.utils.StringUtils;
12
13 import de.intevation.flys.artifacts.access.Calculation4Access;
12 14
13 import de.intevation.flys.artifacts.geom.Lines; 15 import de.intevation.flys.artifacts.geom.Lines;
14 16
15 import de.intevation.flys.artifacts.model.Calculation1; 17 import de.intevation.flys.artifacts.model.Calculation1;
16 import de.intevation.flys.artifacts.model.Calculation2; 18 import de.intevation.flys.artifacts.model.Calculation2;
20 import de.intevation.flys.artifacts.model.Calculation6; 22 import de.intevation.flys.artifacts.model.Calculation6;
21 import de.intevation.flys.artifacts.model.Calculation; 23 import de.intevation.flys.artifacts.model.Calculation;
22 import de.intevation.flys.artifacts.model.CalculationResult; 24 import de.intevation.flys.artifacts.model.CalculationResult;
23 import de.intevation.flys.artifacts.model.DischargeTables; 25 import de.intevation.flys.artifacts.model.DischargeTables;
24 import de.intevation.flys.artifacts.model.FacetTypes; 26 import de.intevation.flys.artifacts.model.FacetTypes;
25 import de.intevation.flys.artifacts.model.Segment;
26 import de.intevation.flys.artifacts.model.WQCKms; 27 import de.intevation.flys.artifacts.model.WQCKms;
27 import de.intevation.flys.artifacts.model.WQKms; 28 import de.intevation.flys.artifacts.model.WQKms;
28 import de.intevation.flys.artifacts.model.WW; 29 import de.intevation.flys.artifacts.model.WW;
29 import de.intevation.flys.artifacts.model.WstValueTable; 30 import de.intevation.flys.artifacts.model.WstValueTable;
30 import de.intevation.flys.artifacts.model.WstValueTableFactory; 31 import de.intevation.flys.artifacts.model.WstValueTableFactory;
32
31 import de.intevation.flys.artifacts.model.extreme.ExtremeResult; 33 import de.intevation.flys.artifacts.model.extreme.ExtremeResult;
32 34
33 import de.intevation.flys.artifacts.states.DefaultState.ComputeType; 35 import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
36
34 import de.intevation.flys.artifacts.states.LocationDistanceSelect; 37 import de.intevation.flys.artifacts.states.LocationDistanceSelect;
35 38
36 import de.intevation.flys.model.DischargeTable; 39 import de.intevation.flys.model.DischargeTable;
37 import de.intevation.flys.model.FastCrossSectionLine; 40 import de.intevation.flys.model.FastCrossSectionLine;
38 import de.intevation.flys.model.Gauge; 41 import de.intevation.flys.model.Gauge;
45 48
46 import java.awt.geom.Point2D; 49 import java.awt.geom.Point2D;
47 50
48 import java.util.Arrays; 51 import java.util.Arrays;
49 import java.util.Calendar; 52 import java.util.Calendar;
50 import java.util.Collections;
51 import java.util.GregorianCalendar; 53 import java.util.GregorianCalendar;
52 import java.util.List; 54 import java.util.List;
53 import java.util.Map; 55 import java.util.Map;
54 56
55 import org.apache.log4j.Logger; 57 import org.apache.log4j.Logger;
167 */ 169 */
168 public CalculationResult getWaterlevelData() { 170 public CalculationResult getWaterlevelData() {
169 return this.getWaterlevelData(null); 171 return this.getWaterlevelData(null);
170 } 172 }
171 173
174 // THIS IS FREAKY BULLSHIT! Felix, why do you call the calculation directly????
175 protected CalculationResult getDischargeLongitudinalSectionData() {
176 // XXX: THIS AN _EXPENSIVE_ CALCULATION! CACHE IT!
177 return new Calculation4(new Calculation4Access(this)).calculate();
178 }
179
172 /** 180 /**
173 * Returns the data that is computed by a waterlevel computation. 181 * Returns the data that is computed by a waterlevel computation.
174 * 182 *
175 * @return an array of data triples that consist of W, Q and Kms. 183 * @return an array of data triples that consist of W, Q and Kms.
176 */ 184 */
403 return new CalculationResult(data, new Calculation(msg)); 411 return new CalculationResult(data, new Calculation(msg));
404 } 412 }
405 413
406 414
407 /** 415 /**
408 * Returns the data computed by the discharge longitudinal section
409 * computation.
410 *
411 * @return an array of WQKms object - one object for each given Q value.
412 */
413 public CalculationResult getDischargeLongitudinalSectionData() {
414
415 logger.debug("WINFOArtifact.getDischargeLongitudinalSectionData");
416
417 River river = FLYSUtils.getRiver(this);
418 if (river == null) {
419 logger.debug("No river selected.");
420 return error(new WQKms[0], "no.river.selected");
421 }
422
423 WstValueTable table = WstValueTableFactory.getTable(river);
424 if (table == null) {
425 logger.debug("No wst found for selected river.");
426 return error(new WQKms[0], "no.wst.for.river");
427 }
428
429 List<Segment> segments = getSegments();
430
431 if (segments == null) {
432 logger.debug("Cannot create segments.");
433 return error(new WQKms[0], "cannot.create.segments");
434 }
435
436 double [] range = getFromToStep();
437
438 if (range == null) {
439 logger.debug("Cannot figure out range.");
440 return error(new WQKms[0], "no.range.found");
441 }
442
443 Calculation4 calc4 = new Calculation4(segments, river, isQ());
444
445 return calc4.calculate(table, range[0], range[1], range[2]);
446 }
447
448
449 /**
450 * Returns the data that is computed by a reference curve computation. 416 * Returns the data that is computed by a reference curve computation.
451 * 417 *
452 * @return the data computed by a reference curve computation. 418 * @return the data computed by a reference curve computation.
453 */ 419 */
454 public CalculationResult getReferenceCurveData(CallContext context) { 420 public CalculationResult getReferenceCurveData(CallContext context) {
569 mode, 535 mode,
570 new long[] { start.getTimeInMillis(), end.getTimeInMillis() }, 536 new long[] { start.getTimeInMillis(), end.getTimeInMillis() },
571 values); 537 values);
572 538
573 return calc.calculate(gauge); 539 return calc.calculate(gauge);
574 }
575
576
577 public List<Segment> getSegments() {
578 StateData wqValues = getData("wq_values");
579 if (wqValues == null) {
580 logger.warn("no wq_values given");
581 return Collections.<Segment>emptyList();
582 }
583 String input = (String) wqValues.getValue();
584 if (input == null || (input = input.trim()).length() == 0) {
585 logger.warn("wq_values are empty");
586 return Collections.<Segment>emptyList();
587 }
588 return Segment.parseSegments(input);
589 } 540 }
590 541
591 542
592 /** 543 /**
593 * Get corrected waterline against surface/profile. 544 * Get corrected waterline against surface/profile.

http://dive4elements.wald.intevation.org