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