comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixAnalysisCompute.java @ 3412:da000d9513f7

FixA: Renamed FixationCompute to FixAnalysisCompute flys-artifacts/trunk@5065 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 19 Jul 2012 14:19:35 +0000
parents
children e3c7a3228bc2
comparison
equal deleted inserted replaced
3411:0ef83077c93f 3412:da000d9513f7
1 package de.intevation.flys.artifacts.states.fixation;
2
3 import de.intevation.artifactdatabase.state.Facet;
4
5 import de.intevation.artifacts.CallContext;
6
7 import de.intevation.flys.artifacts.FLYSArtifact;
8
9 import de.intevation.flys.artifacts.access.FixAnalysisAccess;
10
11 import de.intevation.flys.artifacts.model.CalculationResult;
12 import de.intevation.flys.artifacts.model.DataFacet;
13 import de.intevation.flys.artifacts.model.DateRange;
14 import de.intevation.flys.artifacts.model.FacetTypes;
15 import de.intevation.flys.artifacts.model.ReportFacet;
16
17 import de.intevation.flys.artifacts.model.fixings.FixAnalysisEventsFacet;
18 import de.intevation.flys.artifacts.model.fixings.FixAnalysisPeriodsFacet;
19 import de.intevation.flys.artifacts.model.fixings.FixAvSectorFacet;
20 import de.intevation.flys.artifacts.model.fixings.FixAnalysisCalculation;
21 import de.intevation.flys.artifacts.model.fixings.FixDerivateFacet;
22 import de.intevation.flys.artifacts.model.fixings.FixDeviationFacet;
23 import de.intevation.flys.artifacts.model.fixings.FixLongitudinalAnalysisFacet;
24 import de.intevation.flys.artifacts.model.fixings.FixLongitudinalDeviationFacet;
25 import de.intevation.flys.artifacts.model.fixings.FixLongitudinalReferenceFacet;
26 import de.intevation.flys.artifacts.model.fixings.FixOutlierFacet;
27 import de.intevation.flys.artifacts.model.fixings.FixReferenceEventsFacet;
28 import de.intevation.flys.artifacts.model.fixings.FixResult;
29 import de.intevation.flys.artifacts.model.fixings.FixWQCurveFacet;
30
31 import de.intevation.flys.artifacts.resources.Resources;
32
33 import de.intevation.flys.artifacts.states.DefaultState;
34
35 import de.intevation.flys.utils.IdGenerator;
36
37 import java.text.DateFormat;
38
39 import java.util.List;
40
41 import org.apache.log4j.Logger;
42
43 /**
44 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
45 */
46 public class FixAnalysisCompute
47 extends DefaultState
48 implements FacetTypes
49 {
50 /** The log used in this class. */
51 private static Logger log = Logger.getLogger(FixAnalysisCompute.class);
52
53 private static final String I18N_REFERENCEPERIOD = "fix.reference.period.events";
54
55 private static final String I18N_ANALYSISPERIODS = "fix.analysis.periods";
56
57 private static final String I18N_DERIVATIVE = "fix.derivative";
58
59 private static final String I18N_OUTLIER = "fix.outlier";
60
61 private static final String I18N_ANALYSIS = "fix.analysis";
62
63 private static final String I18N_DEVIATION = "fix.deviation";
64
65 private static final String I18N_REFERENCEDEVIATION = "fix.reference.deviation";
66
67 public static final String [] SECTOR_LABELS = {
68 "[0 - (MNQ+MQ)/2)",
69 "[(MNQ+MQ)/2 - (MQ+MHQ)/2)",
70 "[(MQ+MHQ)/2 - HQ5)",
71 "[HQ5 - \u221e)"
72 };
73
74 /**
75 * The default constructor that initializes an empty State object.
76 */
77 public FixAnalysisCompute() {
78 }
79
80 @Override
81 public Object computeAdvance(
82 FLYSArtifact artifact,
83 String hash,
84 CallContext context,
85 List<Facet> facets,
86 Object old
87 ) {
88 log.debug("FixAnalysisCompute.computeAdvance");
89
90 CalculationResult res;
91
92 FixAnalysisAccess access =
93 new FixAnalysisAccess(artifact);
94
95 if (old instanceof CalculationResult) {
96 res = (CalculationResult)old;
97 }
98 else {
99 FixAnalysisCalculation calc = new FixAnalysisCalculation(access);
100 res = calc.calculate();
101 }
102
103 if (facets == null) {
104 return res;
105 }
106
107 if (res.getReport().hasProblems()) {
108 facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
109 }
110
111 FixResult fr = (FixResult)res.getData();
112
113 if (fr == null) {
114 return res;
115 }
116
117 facets.add(
118 new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
119 facets.add(
120 new DataFacet(
121 FIX_PARAMETERS, "parameters", ComputeType.ADVANCE, hash, id));
122
123 int maxId = -100;
124
125 int sectorMask = fr.getUsedSectorsInAnalysisPeriods();
126
127 int qsS = access.getQSectorStart();
128 int qsE = access.getQSectorEnd();
129
130 // TODO: i18n
131 DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
132
133 DateRange [] periods = access.getAnalysisPeriods();
134
135 for (int i = 0; i < periods.length; i++) {
136 DateRange period = periods[i];
137 String startDate = df.format(period.getFrom());
138 String endDate = df.format(period.getTo());
139
140 for (int j = qsS; j <= qsE; j++) {
141
142 // Only emit facets for sectors that really have data.
143 if ((sectorMask & (1 << j)) == 0) {
144 continue;
145 }
146
147 String sector = SECTOR_LABELS[j];
148 String description = sector + ": " +
149 startDate + " - " +
150 endDate;
151
152 int sectorNdx = j - qsS;
153 int facetNdx = i << 2;
154 facetNdx = facetNdx | j;
155
156 if (facetNdx > maxId) {
157 maxId = facetNdx;
158 }
159
160 facets.add(
161 new FixAvSectorFacet(
162 facetNdx,
163 FIX_SECTOR_AVERAGE_DWT + "_" + sectorNdx,
164 description));
165 facets.add(
166 new FixLongitudinalAnalysisFacet(
167 facetNdx,
168 FIX_SECTOR_AVERAGE_LS + "_" + sectorNdx,
169 description));
170 // TODO: i18n
171 String dev = "Abweichung: " + description;
172 facets.add(
173 new FixLongitudinalAnalysisFacet(
174 facetNdx,
175 FIX_SECTOR_AVERAGE_LS_DEVIATION + "_" + sectorNdx,
176 dev));
177 facets.add(
178 new FixAvSectorFacet(
179 facetNdx,
180 FIX_SECTOR_AVERAGE_WQ + "_" + sectorNdx,
181 description));
182
183 }
184
185 String eventDesc =
186 Resources.getMsg(context.getMeta(),
187 I18N_ANALYSIS,
188 I18N_ANALYSIS) +
189 ": " + startDate + " - " + endDate;
190 facets.add(new FixAnalysisEventsFacet(i,
191 FIX_ANALYSIS_EVENTS_DWT,
192 eventDesc));
193 facets.add(new FixLongitudinalAnalysisFacet(i,
194 FIX_ANALYSIS_EVENTS_LS,
195 eventDesc));
196 facets.add(new FixAnalysisEventsFacet(i,
197 FIX_ANALYSIS_EVENTS_WQ,
198 eventDesc));
199 }
200
201 IdGenerator idg = new IdGenerator(maxId + 1);
202
203 String i18n_ref = Resources.getMsg(context.getMeta(),
204 I18N_REFERENCEPERIOD,
205 I18N_REFERENCEPERIOD);
206 String i18n_dev = Resources.getMsg(context.getMeta(),
207 I18N_REFERENCEDEVIATION,
208 I18N_REFERENCEDEVIATION);
209
210
211 facets.add(new FixReferenceEventsFacet(idg.next(),
212 FIX_REFERENCE_EVENTS_DWT,
213 i18n_ref));
214 facets.add(new FixLongitudinalReferenceFacet(idg.next(),
215 FIX_REFERENCE_EVENTS_LS,
216 i18n_ref));
217 facets.add(new FixReferenceEventsFacet(idg.next(),
218 FIX_REFERENCE_EVENTS_WQ,
219 i18n_ref));
220
221 facets.add(new FixLongitudinalDeviationFacet(idg.next(),
222 FIX_DEVIATION_LS,
223 i18n_dev));
224
225 String i18n_ana = Resources.getMsg(context.getMeta(),
226 I18N_ANALYSISPERIODS,
227 I18N_ANALYSISPERIODS);
228 facets.add(new FixAnalysisPeriodsFacet(idg.next(),
229 FIX_ANALYSIS_PERIODS_DWT,
230 i18n_ana));
231 facets.add(new FixAnalysisPeriodsFacet(idg.next(),
232 FIX_ANALYSIS_PERIODS_LS,
233 i18n_ana));
234 facets.add(new FixAnalysisPeriodsFacet(idg.next(),
235 FIX_ANALYSIS_PERIODS_WQ,
236 i18n_ana));
237
238
239 facets.add(new FixWQCurveFacet(idg.next(), "W/Q"));
240
241 Boolean preprocessing = access.getPreprocessing();
242
243 if (preprocessing != null && preprocessing) {
244 facets.add(new FixOutlierFacet(
245 idg.next(),
246 FIX_OUTLIER,
247 Resources.getMsg(
248 context.getMeta(), I18N_OUTLIER, I18N_OUTLIER)));
249 }
250
251 facets.add(new FixDerivateFacet(
252 idg.next(),
253 FIX_DERIVATE,
254 Resources.getMsg(
255 context.getMeta(),
256 I18N_DERIVATIVE,
257 I18N_DERIVATIVE)));
258
259 facets.add(new FixDeviationFacet(
260 idg.next(),
261 FIX_DEVIATION_DWT,
262 Resources.getMsg(context.getMeta(),
263 I18N_DEVIATION,
264 I18N_DEVIATION)));
265 return res;
266 }
267 }
268 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org