Mercurial > dive4elements > river
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. |