Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java @ 9415:9744ce3c3853
Rework of fixanalysis computation and dWt and WQ facets. Got rid of strange remapping and bitshifting code by explicitely saving the column information and using it in the facets.
The facets also put the valid station range into their xml-metadata
author | gernotbelger |
---|---|
date | Thu, 16 Aug 2018 16:27:53 +0200 |
parents | ddcd52d239cd |
children | 2b83d3a96703 |
comparison
equal
deleted
inserted
replaced
9414:096f151a0a9f | 9415:9744ce3c3853 |
---|---|
11 import java.text.DateFormat; | 11 import java.text.DateFormat; |
12 import java.util.Collection; | 12 import java.util.Collection; |
13 import java.util.Date; | 13 import java.util.Date; |
14 import java.util.List; | 14 import java.util.List; |
15 | 15 |
16 import org.apache.commons.lang.math.DoubleRange; | |
16 import org.apache.log4j.Logger; | 17 import org.apache.log4j.Logger; |
17 import org.dive4elements.artifactdatabase.state.Facet; | 18 import org.dive4elements.artifactdatabase.state.Facet; |
18 import org.dive4elements.artifactdatabase.state.FacetActivity; | 19 import org.dive4elements.artifactdatabase.state.FacetActivity; |
19 import org.dive4elements.artifacts.Artifact; | 20 import org.dive4elements.artifacts.Artifact; |
20 import org.dive4elements.artifacts.CallContext; | 21 import org.dive4elements.artifacts.CallContext; |
23 import org.dive4elements.river.artifacts.model.CalculationResult; | 24 import org.dive4elements.river.artifacts.model.CalculationResult; |
24 import org.dive4elements.river.artifacts.model.DataFacet; | 25 import org.dive4elements.river.artifacts.model.DataFacet; |
25 import org.dive4elements.river.artifacts.model.DateRange; | 26 import org.dive4elements.river.artifacts.model.DateRange; |
26 import org.dive4elements.river.artifacts.model.FacetTypes; | 27 import org.dive4elements.river.artifacts.model.FacetTypes; |
27 import org.dive4elements.river.artifacts.model.ReportFacet; | 28 import org.dive4elements.river.artifacts.model.ReportFacet; |
29 import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriodEventResults; | |
28 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisCalculation; | 30 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisCalculation; |
29 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisEventsFacet; | 31 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisEventsFacet; |
30 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisPeriodsFacet; | 32 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisPeriodsFacet; |
31 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisResult; | 33 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisResult; |
32 import org.dive4elements.river.artifacts.model.fixings.FixAvSectorFacet; | 34 import org.dive4elements.river.artifacts.model.fixings.FixAvSectorFacet; |
35 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalAnalysisFacet; | 37 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalAnalysisFacet; |
36 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalAvSectorFacet; | 38 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalAvSectorFacet; |
37 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalDeviationFacet; | 39 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalDeviationFacet; |
38 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalReferenceFacet; | 40 import org.dive4elements.river.artifacts.model.fixings.FixLongitudinalReferenceFacet; |
39 import org.dive4elements.river.artifacts.model.fixings.FixReferenceEventsFacet; | 41 import org.dive4elements.river.artifacts.model.fixings.FixReferenceEventsFacet; |
42 import org.dive4elements.river.artifacts.model.fixings.FixResultColumn; | |
43 import org.dive4elements.river.artifacts.model.fixings.FixResultColumns; | |
40 import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; | 44 import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; |
41 import org.dive4elements.river.artifacts.resources.Resources; | 45 import org.dive4elements.river.artifacts.resources.Resources; |
42 import org.dive4elements.river.artifacts.states.DefaultState; | 46 import org.dive4elements.river.artifacts.states.DefaultState; |
43 import org.dive4elements.river.utils.Formatter; | 47 import org.dive4elements.river.utils.Formatter; |
44 import org.dive4elements.river.utils.IdGenerator; | 48 import org.dive4elements.river.utils.IdGenerator; |
45 import org.dive4elements.river.utils.UniqueDateFormatter; | |
46 | 49 |
47 /** | 50 /** |
48 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> | 51 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> |
49 */ | 52 */ |
50 public class FixAnalysisCompute extends DefaultState implements FacetTypes { | 53 public class FixAnalysisCompute extends DefaultState implements FacetTypes { |
54 | |
55 private static final long serialVersionUID = 1L; | |
56 | |
51 /** The log used in this class. */ | 57 /** The log used in this class. */ |
52 private static Logger log = Logger.getLogger(FixAnalysisCompute.class); | 58 private static Logger log = Logger.getLogger(FixAnalysisCompute.class); |
53 | 59 |
54 private static final String I18N_REFERENCEPERIOD_SHORT = "fix.reference.period.event.short"; | 60 private static final String I18N_REFERENCEPERIOD_SHORT = "fix.reference.period.event.short"; |
55 | 61 |
136 | 142 |
137 final int qsS = access.getQSectorStart(); | 143 final int qsS = access.getQSectorStart(); |
138 final int qsE = access.getQSectorEnd(); | 144 final int qsE = access.getQSectorEnd(); |
139 | 145 |
140 final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); | 146 final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); |
141 final DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy'T'HH:mm"); | 147 final UniqueDateFormatter cf = new UniqueDateFormatter(df); |
148 | |
149 final AnalysisPeriodEventResults analysisEventResults = fr.getAnalysisEventResults(); | |
142 | 150 |
143 final DateRange[] periods = access.getAnalysisPeriods(); | 151 final DateRange[] periods = access.getAnalysisPeriods(); |
152 | |
153 int facetIndex = 0; | |
144 | 154 |
145 for (int i = 0; i < periods.length; i++) { | 155 for (int i = 0; i < periods.length; i++) { |
146 final DateRange period = periods[i]; | 156 final DateRange period = periods[i]; |
147 final String startDate = df.format(period.getFrom()); | 157 final String startDate = df.format(period.getFrom()); |
148 final String endDate = df.format(period.getTo()); | 158 final String endDate = df.format(period.getTo()); |
170 new FixLongitudinalAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_LS + "_" + sectorNdx, description + ":" + startDate + " - " + endDate)); | 180 new FixLongitudinalAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_LS + "_" + sectorNdx, description + ":" + startDate + " - " + endDate)); |
171 // TODO: i18n | 181 // TODO: i18n |
172 final String dev = "Abweichung: " + description; | 182 final String dev = "Abweichung: " + description; |
173 facets.add(new FixLongitudinalAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_LS_DEVIATION + "_" + sectorNdx, dev)); | 183 facets.add(new FixLongitudinalAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_LS_DEVIATION + "_" + sectorNdx, dev)); |
174 facets.add(new FixAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_WQ + "_" + sectorNdx, description)); | 184 facets.add(new FixAvSectorFacet(facetNdx, FIX_SECTOR_AVERAGE_WQ + "_" + sectorNdx, description)); |
175 | |
176 } | 185 } |
177 | 186 |
178 final String eventDesc = Resources.getMsg(context.getMeta(), I18N_ANALYSIS, I18N_ANALYSIS); | 187 final String eventDesc = Resources.getMsg(context.getMeta(), I18N_ANALYSIS, I18N_ANALYSIS); |
179 | 188 |
180 final Collection<Date> aeds = fr.getAnalysisEventsDates(i); | 189 final FixResultColumns analysisEventResult = analysisEventResults.getEventResults(i); |
181 final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, aeds); | 190 final Collection<FixResultColumn> columns = analysisEventResult.getSortedColumns(); |
182 | 191 |
183 int k = 0; | 192 for (final FixResultColumn analysisEventColumn : columns) { |
184 for (final Date d : aeds) { | 193 |
185 int anaNdx = i << 8; | 194 final int columnId = analysisEventColumn.getColumnId(); |
186 anaNdx = anaNdx | k; | 195 final Date d = analysisEventColumn.getDate(); |
187 facets.add(new FixAnalysisEventsFacet(anaNdx, FIX_ANALYSIS_EVENTS_DWT, eventDesc + (i + 1) + " - " + cf.format(d))); | 196 final DoubleRange stationRange = analysisEventColumn.getStationRange(); |
188 facets.add(new FixLongitudinalAnalysisFacet(anaNdx, FIX_ANALYSIS_EVENTS_LS, eventDesc + (i + 1) + " - " + cf.format(d))); | 197 |
189 facets.add(new FixAnalysisEventsFacet(anaNdx, FIX_ANALYSIS_EVENTS_WQ, eventDesc + (i + 1) + " - " + cf.format(d))); | 198 final String facetDescription = eventDesc + (i + 1) + " - " + cf.format(d); |
190 k++; | 199 |
200 facets.add(new FixAnalysisEventsFacet(facetIndex++, i, columnId, FIX_ANALYSIS_EVENTS_DWT, facetDescription, stationRange)); | |
201 facets.add(new FixLongitudinalAnalysisFacet(facetIndex++, i, columnId, FIX_ANALYSIS_EVENTS_LS, facetDescription)); | |
202 facets.add(new FixAnalysisEventsFacet(facetIndex++, i, columnId, FIX_ANALYSIS_EVENTS_WQ, facetDescription, stationRange)); | |
191 } | 203 } |
192 } | 204 } |
193 | 205 |
194 final IdGenerator idg = new IdGenerator(maxId + 1); | 206 final IdGenerator idg = new IdGenerator(maxId + 1); |
195 | 207 |
196 final String i18n_ref = Resources.getMsg(context.getMeta(), I18N_REFERENCEPERIOD_SHORT, I18N_REFERENCEPERIOD_SHORT); | 208 final String i18n_ref = Resources.getMsg(context.getMeta(), I18N_REFERENCEPERIOD_SHORT, I18N_REFERENCEPERIOD_SHORT); |
197 final String i18n_dev = Resources.getMsg(context.getMeta(), I18N_REFERENCEDEVIATION, I18N_REFERENCEDEVIATION); | 209 final String i18n_dev = Resources.getMsg(context.getMeta(), I18N_REFERENCEDEVIATION, I18N_REFERENCEDEVIATION); |
198 | 210 |
199 final Collection<Date> reds = fr.getReferenceEventsDates(); | 211 final FixResultColumns columns = fr.getFixResultColumns(); |
200 final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds); | 212 |
201 | 213 final Collection<FixResultColumn> fixEvents = columns.getSortedColumns(); |
202 int i = 0; | 214 for (final FixResultColumn event : fixEvents) { |
203 for (final Date d : reds) { | 215 |
204 int refNdx = idg.next() << 8; | 216 final int columnId = event.getColumnId(); |
205 refNdx |= i; | 217 final DoubleRange stationRange = event.getStationRange(); |
206 facets.add(new FixReferenceEventsFacet(refNdx, FIX_REFERENCE_EVENTS_DWT, i18n_ref + " - " + cf.format(d))); | 218 |
207 refNdx = idg.next() << 8; | 219 final Date date = event.getDate(); |
208 refNdx = refNdx | i; | 220 final String dateText = cf.format(date); |
209 facets.add(new FixLongitudinalReferenceFacet(refNdx, FIX_REFERENCE_EVENTS_LS, i18n_ref + " - " + cf.format(d))); | 221 final String facetDescription = i18n_ref + " - " + dateText; |
210 refNdx = idg.next() << 8; | 222 |
211 refNdx |= i; | 223 facets.add(new FixReferenceEventsFacet(facetIndex++, columnId, FIX_REFERENCE_EVENTS_DWT, facetDescription, stationRange)); |
212 facets.add(new FixReferenceEventsFacet(refNdx, FIX_REFERENCE_EVENTS_WQ, i18n_ref + " - " + cf.format(d))); | 224 facets.add(new FixLongitudinalReferenceFacet(facetIndex++, columnId, FIX_REFERENCE_EVENTS_LS, facetDescription)); |
213 i++; | 225 facets.add(new FixReferenceEventsFacet(facetIndex++, columnId, FIX_REFERENCE_EVENTS_WQ, facetDescription, stationRange)); |
214 } | 226 } |
215 | 227 |
216 facets.add(new FixLongitudinalDeviationFacet(idg.next(), FIX_DEVIATION_LS, i18n_dev)); | 228 facets.add(new FixLongitudinalDeviationFacet(idg.next(), FIX_DEVIATION_LS, i18n_dev)); |
217 | 229 |
218 final String i18n_ana = Resources.getMsg(context.getMeta(), I18N_ANALYSISPERIODS, I18N_ANALYSISPERIODS); | 230 final String i18n_ana = Resources.getMsg(context.getMeta(), I18N_ANALYSISPERIODS, I18N_ANALYSISPERIODS); |
220 facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_LS, i18n_ana)); | 232 facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_LS, i18n_ana)); |
221 facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_WQ, i18n_ana)); | 233 facets.add(new FixAnalysisPeriodsFacet(idg.next(), FIX_ANALYSIS_PERIODS_WQ, i18n_ana)); |
222 | 234 |
223 final String i18n_refp = Resources.getMsg(context.getMeta(), I18N_REFERENCEPERIOD, I18N_REFERENCEPERIOD); | 235 final String i18n_refp = Resources.getMsg(context.getMeta(), I18N_REFERENCEPERIOD, I18N_REFERENCEPERIOD); |
224 facets.add(new DataFacet(idg.next(), FIX_REFERENCE_PERIOD_DWT, i18n_refp, ComputeType.ADVANCE, null, null)); | 236 facets.add(new DataFacet(idg.next(), FIX_REFERENCE_PERIOD_DWT, i18n_refp, ComputeType.ADVANCE, null, null)); |
225 | |
226 facets.add(new FixWQCurveFacet(idg.next(), "W/Q")); | 237 facets.add(new FixWQCurveFacet(idg.next(), "W/Q")); |
227 | |
228 facets.add(new FixDerivateFacet(idg.next(), FIX_DERIVATE_CURVE, Resources.getMsg(context.getMeta(), I18N_DERIVATIVE, I18N_DERIVATIVE))); | 238 facets.add(new FixDerivateFacet(idg.next(), FIX_DERIVATE_CURVE, Resources.getMsg(context.getMeta(), I18N_DERIVATIVE, I18N_DERIVATIVE))); |
229 | |
230 facets.add(new FixDeviationFacet(idg.next(), FIX_DEVIATION_DWT, Resources.getMsg(context.getMeta(), I18N_DEVIATION, I18N_DEVIATION))); | 239 facets.add(new FixDeviationFacet(idg.next(), FIX_DEVIATION_DWT, Resources.getMsg(context.getMeta(), I18N_DEVIATION, I18N_DEVIATION))); |
240 | |
231 return res; | 241 return res; |
232 } | 242 } |
233 } | 243 } |