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