annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java @ 8883:a536e1aacf0f

Further work on SINFO-FlowDepth
author gernotbelger
date Fri, 09 Feb 2018 18:07:22 +0100
parents 6b93a2498e06
children d9dbf0b74bc2
rev   line source
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
2 * Software engineering by
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
5 *
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
9 */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.states;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
11
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
12 import org.dive4elements.river.artifacts.model.WKms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
13 import org.dive4elements.river.model.Gauge;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
14 import org.dive4elements.river.model.River;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
15
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
16 /**
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
17 * Represents a waterlevel fetched with the {@link WaterlevelFetcher}.
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
18 *
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
19 * @author Gernot Belger
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
20 */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
21 public class WaterlevelData {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
22 private final WKms wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
23
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
24 private final String name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
25
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
26 private final int year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
27
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
28 /** If <code>true</code>, tabular export will show gauges for every station, else only for the first gauge */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
29 private final boolean showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
30
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
31 public WaterlevelData(final WKms wkms, final int year) {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
32 this(wkms, year, false);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
33 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
34
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
35 public WaterlevelData(final WKms wkms, final int year, final boolean showAllGauges) {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
36 this(null, wkms, year, showAllGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
37 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
38
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
39 private WaterlevelData(final String name, final WKms wkms, final int year, final boolean showAllGauges) {
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
40 this.name = name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
41 this.wkms = wkms;
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
42 this.year = year;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
43 this.showAllGauges = showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
44 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
45
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
46 public WaterlevelData filterByRange(final double from, final double to) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
47 if (Double.isNaN(from) || Double.isNaN(to)) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
48 return this;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
49 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
50
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
51 final WKms filteredWkms = this.wkms.filteredKms(from, to);
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
52 return new WaterlevelData(this.name, filteredWkms, this.year, this.showAllGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
53 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
54
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
55 public WaterlevelData withName(final String nameToSet) {
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
56 return new WaterlevelData(nameToSet, this.wkms, this.year, this.showAllGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
57 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
58
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
59 public String getName() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
60 return this.name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
61 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
62
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
63 public WKms getWkms() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
64 return this.wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
65 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
66
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
67 public boolean isShowAllGauges() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
68 return this.showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
69 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
70
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
71 public Gauge findReferenceGauge(final River river) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
72 final double[] wstFromTo = findWstFromTo();
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
73 return river.determineRefGauge(wstFromTo, true);
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
74 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
75
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
76 private double[] findWstFromTo() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
77
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
78 final double from = this.wkms.getKm(0);
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
79 final double to = this.wkms.getKm(this.wkms.size() - 1);
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
80
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
81 final boolean waterIncreasing = this.wkms.guessWaterIncreasing();
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
82 if (waterIncreasing)
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
83 return new double[] { to, from };
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
84
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
85 return new double[] { from, to };
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
86 }
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
87
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
88 public int getYear() {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
89 return this.year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
90 }
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
91 }

http://dive4elements.wald.intevation.org