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 }

http://dive4elements.wald.intevation.org