comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/MiddleBedHeightCalculation.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/MiddleBedHeightCalculation.java@bd047b71ab37
children 4897a58c8746
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
1 package org.dive4elements.river.artifacts.model;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7
8 import org.dive4elements.artifacts.Artifact;
9 import org.dive4elements.artifacts.common.utils.DateUtils;
10
11 import org.dive4elements.river.model.BedHeightEpoch;
12 import org.dive4elements.river.model.BedHeightEpochValue;
13 import org.dive4elements.river.model.BedHeightSingle;
14 import org.dive4elements.river.model.BedHeightSingleValue;
15 import org.dive4elements.river.model.TimeInterval;
16
17 import org.dive4elements.river.artifacts.access.BedHeightAccess;
18
19
20 public class MiddleBedHeightCalculation extends Calculation {
21
22 private static final Logger logger =
23 Logger.getLogger(MiddleBedHeightCalculation.class);
24
25
26 public CalculationResult calculate(BedHeightAccess access) {
27 logger.info("MiddleBedHeightCalculation.calculate");
28
29 int[] singleIds = access.getBedHeightSingleIDs();
30 int[] epochIds = access.getBedHeightEpochIDs();
31
32
33 if (logger.isDebugEnabled()) {
34 Artifact artifact = access.getArtifact();
35
36 logger.debug("Artifact '" + artifact.identifier() + "' contains:");
37 if (singleIds != null) {
38 logger.debug(" " + singleIds.length + " single bedheight ids");
39 }
40
41 if (epochIds != null) {
42 logger.debug(" " + epochIds.length + " epoch bedheight ids");
43 }
44 }
45
46 List<BedHeightSingle> singles = getSingles(access, singleIds);
47 List<BedHeightEpoch> epochs = getEpochs(access, epochIds);
48
49 return buildCalculationResult(access, singles, epochs);
50 }
51
52
53 protected List<BedHeightSingle> getSingles(
54 BedHeightAccess access,
55 int[] ids
56 ) {
57 List<BedHeightSingle> singles = new ArrayList<BedHeightSingle>();
58
59 for (int id: ids) {
60 BedHeightSingle s = BedHeightSingle.getBedHeightSingleById(id);
61
62 if (s != null) {
63 singles.add(s);
64 }
65 else {
66 logger.warn("Cannot find Single by id: " + id);
67 // TODO ADD WARNING
68 }
69 }
70
71 return singles;
72 }
73
74
75 protected List<BedHeightEpoch> getEpochs(
76 BedHeightAccess access,
77 int[] ids
78 ) {
79 List<BedHeightEpoch> epochs = new ArrayList<BedHeightEpoch>();
80
81 for (int id: ids) {
82 BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById(id);
83
84 if (e != null) {
85 epochs.add(e);
86 }
87 else {
88 logger.warn("Cannot find Epoch by id: " + id);
89 // TODO ADD WARNING
90 }
91 }
92
93 return epochs;
94 }
95
96
97 protected CalculationResult buildCalculationResult(
98 BedHeightAccess access,
99 List<BedHeightSingle> singles,
100 List<BedHeightEpoch> epochs
101 ) {
102 logger.info("MiddleBedHeightCalculation.buildCalculationResult");
103
104 double kmLo = access.getLowerKM();
105 double kmHi = access.getUpperKM();
106
107 List<MiddleBedHeightData> data = new ArrayList<MiddleBedHeightData>();
108
109 for (BedHeightSingle single: singles) {
110 MiddleBedHeightData d = prepareSingleData(single, kmLo, kmHi);
111
112 if (d != null) {
113 data.add(d);
114 }
115 }
116
117 for (BedHeightEpoch epoch: epochs) {
118 MiddleBedHeightData d = prepareEpochData(epoch, kmLo, kmHi);
119
120 if (d != null) {
121 data.add(d);
122 }
123 }
124
125 logger.debug("Calculation results in " + data.size() + " data objects.");
126
127 return new CalculationResult((MiddleBedHeightData[])
128 data.toArray(new MiddleBedHeightData[data.size()]), this);
129 }
130
131
132 protected MiddleBedHeightData prepareSingleData(
133 BedHeightSingle single,
134 double kmLo,
135 double kmHi
136 ) {
137 logger.debug("Prepare data for single: " + single.getDescription());
138
139 List<BedHeightSingleValue> values =
140 BedHeightSingleValue.getBedHeightSingleValues(single, kmLo, kmHi);
141
142 MiddleBedHeightData data = new MiddleBedHeightData(
143 single.getYear(),
144 single.getYear(),
145 single.getEvaluationBy(),
146 single.getDescription());
147
148 for (BedHeightSingleValue value: values) {
149 if (value.getHeight() != null) {
150 data.addAll(value.getStation().doubleValue(),
151 value.getHeight().doubleValue(),
152 value.getUncertainty().doubleValue(),
153 value.getSoundingWidth().doubleValue(),
154 value.getDataGap().doubleValue(),
155 value.getWidth().doubleValue(),
156 false);
157 }
158 else {
159 data.addAll(value.getStation().doubleValue(),
160 0,
161 0,
162 0,
163 0,
164 0,
165 true);
166 }
167 }
168
169 logger.debug("Single contains " + values.size() + " values");
170
171 return data;
172 }
173
174
175 /** Create MiddleBedHeightData to return. */
176 protected MiddleBedHeightData prepareEpochData(
177 BedHeightEpoch epoch,
178 double kmLo,
179 double kmHi
180 ) {
181 logger.debug("Prepare data for epoch: " + epoch.getDescription());
182
183 TimeInterval ti = epoch.getTimeInterval();
184
185 List<BedHeightEpochValue> values =
186 BedHeightEpochValue.getBedHeightEpochValues(epoch, kmLo, kmHi);
187
188 MiddleBedHeightData data = new MiddleBedHeightData(
189 DateUtils.getYearFromDate(ti.getStartTime()),
190 DateUtils.getYearFromDate(ti.getStopTime()),
191 epoch.getEvaluationBy(),
192 epoch.getDescription()
193 );
194
195 for (BedHeightEpochValue value: values) {
196 data.addKM(value.getStation().doubleValue());
197 if (value.getHeight() != null) {
198 data.addMiddleHeight(value.getHeight().doubleValue());
199 data.addIsEmpty(false);
200 }
201 else {
202 data.addMiddleHeight(Double.NaN);
203 data.addIsEmpty(true);
204 }
205 }
206
207 logger.debug("Epoch contains " + values.size() + " values");
208
209 return data;
210 }
211 }
212 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org