Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/SQRelation.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/states/SQRelation.java@bd047b71ab37 |
children | 4897a58c8746 |
comparison
equal
deleted
inserted
replaced
5837:d9901a08d0a6 | 5838:5aa05a7a34b7 |
---|---|
1 package org.dive4elements.river.artifacts.states; | |
2 | |
3 import org.dive4elements.artifactdatabase.state.Facet; | |
4 import org.dive4elements.artifactdatabase.state.FacetActivity; | |
5 | |
6 import org.dive4elements.artifacts.Artifact; | |
7 import org.dive4elements.artifacts.CallContext; | |
8 import org.dive4elements.artifacts.CallMeta; | |
9 | |
10 import org.dive4elements.artifacts.common.utils.StringUtils; | |
11 | |
12 import org.dive4elements.river.artifacts.FLYSArtifact; | |
13 | |
14 import org.dive4elements.river.artifacts.access.SQRelationAccess; | |
15 | |
16 import org.dive4elements.river.artifacts.model.CalculationResult; | |
17 import org.dive4elements.river.artifacts.model.DataFacet; | |
18 import org.dive4elements.river.artifacts.model.FacetTypes; | |
19 | |
20 import org.dive4elements.river.artifacts.model.sq.SQCurveFacet; | |
21 import org.dive4elements.river.artifacts.model.sq.SQFractionResult; | |
22 import org.dive4elements.river.artifacts.model.sq.SQMeasurementFacet; | |
23 import org.dive4elements.river.artifacts.model.sq.SQOutlierCurveFacet; | |
24 import org.dive4elements.river.artifacts.model.sq.SQOutlierFacet; | |
25 import org.dive4elements.river.artifacts.model.sq.SQOutlierMeasurementFacet; | |
26 import org.dive4elements.river.artifacts.model.sq.SQOverviewFacet; | |
27 import org.dive4elements.river.artifacts.model.sq.SQRelationCalculation; | |
28 import org.dive4elements.river.artifacts.model.sq.SQResult; | |
29 | |
30 import org.dive4elements.river.artifacts.resources.Resources; | |
31 | |
32 import java.util.List; | |
33 | |
34 import org.apache.log4j.Logger; | |
35 | |
36 /** | |
37 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> | |
38 */ | |
39 public class SQRelation extends DefaultState implements FacetTypes { | |
40 | |
41 private static Logger log = Logger.getLogger(SQRelation.class); | |
42 | |
43 | |
44 public static final String I18N_FACET_CURVE = | |
45 "facet.sq_relation.curve"; | |
46 | |
47 public static final String I18N_FACET_MEASUREMENTS = | |
48 "facet.sq_relation.measurements"; | |
49 | |
50 public static final String I18N_FACET_OUTLIERS = | |
51 "facet.sq_relation.outliers"; | |
52 | |
53 public static final String I18N_FACET_OUTLIER_CURVE = | |
54 "facet.sq_relation.outlier.curve"; | |
55 | |
56 public static final String I18N_FACET_OUTLIER_MEASUREMENT = | |
57 "facet.sq_relation.outlier.measurement"; | |
58 | |
59 public static final int CURVE_INDEX = 0; | |
60 public static final int MEASURREMENT_INDEX = 1; | |
61 public static final int OUTLIER_INDEX = 2; | |
62 public static final int OUTLIER_CURVE_INDEX = 3; | |
63 public static final int OUTLIER_MEASUREMENT_INDEX = 4; | |
64 | |
65 public static final String [][] FACET_NAMES = { | |
66 { SQ_A_CURVE, SQ_B_CURVE, SQ_C_CURVE, | |
67 SQ_D_CURVE, SQ_E_CURVE, SQ_F_CURVE | |
68 }, | |
69 { SQ_A_MEASUREMENT, SQ_B_MEASUREMENT, SQ_C_MEASUREMENT, | |
70 SQ_D_MEASUREMENT, SQ_E_MEASUREMENT, SQ_F_MEASUREMENT | |
71 }, | |
72 { SQ_A_OUTLIER, SQ_B_OUTLIER, SQ_C_OUTLIER, | |
73 SQ_D_OUTLIER, SQ_E_OUTLIER, SQ_F_OUTLIER | |
74 }, | |
75 { SQ_A_OUTLIER_CURVE, SQ_B_OUTLIER_CURVE, SQ_C_OUTLIER_CURVE, | |
76 SQ_D_OUTLIER_CURVE, SQ_E_OUTLIER_CURVE, SQ_F_OUTLIER_CURVE | |
77 }, | |
78 { SQ_A_OUTLIER_MEASUREMENT, SQ_B_OUTLIER_MEASUREMENT, | |
79 SQ_C_OUTLIER_MEASUREMENT, SQ_D_OUTLIER_MEASUREMENT, | |
80 SQ_E_OUTLIER_MEASUREMENT, SQ_F_OUTLIER_MEASUREMENT | |
81 } | |
82 }; | |
83 | |
84 | |
85 static { | |
86 // Active/deactivate facets. | |
87 FacetActivity.Registry.getInstance().register( | |
88 "minfo", | |
89 new FacetActivity() { | |
90 @Override | |
91 public Boolean isInitialActive( | |
92 Artifact artifact, | |
93 Facet facet, | |
94 String output | |
95 ) { | |
96 String name = facet.getName(); | |
97 | |
98 if (StringUtils.contains( | |
99 name, FACET_NAMES[CURVE_INDEX]) | |
100 || StringUtils.contains( | |
101 name, FACET_NAMES[OUTLIER_INDEX]) | |
102 || StringUtils.contains( | |
103 name, FACET_NAMES[MEASURREMENT_INDEX]) | |
104 ) { | |
105 // TODO: Only the last should be active. | |
106 return Boolean.TRUE; | |
107 } | |
108 | |
109 if (StringUtils.contains( | |
110 name, FACET_NAMES[OUTLIER_CURVE_INDEX]) | |
111 || StringUtils.contains( | |
112 name, FACET_NAMES[OUTLIER_MEASUREMENT_INDEX]) | |
113 ) { | |
114 return Boolean.FALSE; | |
115 } | |
116 | |
117 return null; | |
118 } | |
119 }); | |
120 } | |
121 | |
122 | |
123 public SQRelation() { | |
124 } | |
125 | |
126 | |
127 @Override | |
128 public Object computeAdvance( | |
129 FLYSArtifact artifact, | |
130 String hash, | |
131 CallContext context, | |
132 List<Facet> facets, | |
133 Object old | |
134 ) { | |
135 log.debug("SQRelation.computeAdvance"); | |
136 | |
137 CalculationResult res = old instanceof CalculationResult | |
138 ? (CalculationResult)old | |
139 : new SQRelationCalculation( | |
140 new SQRelationAccess(artifact)).calculate(); | |
141 | |
142 if (facets == null) { | |
143 return res; | |
144 } | |
145 | |
146 SQResult [] sqr = (SQResult [])res.getData(); | |
147 if (sqr == null) { | |
148 return res; | |
149 } | |
150 | |
151 createFacets(context, facets, sqr, hash); | |
152 | |
153 Facet csv = new DataFacet( | |
154 CSV, "CSV data", ComputeType.ADVANCE, hash, id); | |
155 | |
156 Facet pdf = new DataFacet( | |
157 PDF, "PDF data", ComputeType.ADVANCE, hash, id); | |
158 | |
159 facets.add(csv); | |
160 facets.add(pdf); | |
161 | |
162 return res; | |
163 } | |
164 | |
165 | |
166 protected void createFacets( | |
167 CallContext context, | |
168 List<Facet> container, | |
169 SQResult[] sqr, | |
170 String hash | |
171 ) { | |
172 boolean debug = log.isDebugEnabled(); | |
173 | |
174 CallMeta meta = context.getMeta(); | |
175 String stateId = getID(); | |
176 for (int i = 0; i < 6; i++) { | |
177 container.add(new SQOverviewFacet( | |
178 i, | |
179 i, | |
180 "sq_chart_overview", | |
181 Resources.getMsg( | |
182 meta, | |
183 I18N_FACET_CURVE, | |
184 I18N_FACET_CURVE | |
185 ), | |
186 hash, | |
187 getID() | |
188 )); | |
189 } | |
190 for (int res = 0, n = sqr.length; res < n; res++) { | |
191 | |
192 for (int i = 0; i < SQResult.NUMBER_FRACTIONS; i++) { | |
193 SQFractionResult result = sqr[res].getFraction(i); | |
194 | |
195 if (result == null) { | |
196 log.warn("Fraction at index " + i + " is empty!"); | |
197 continue; | |
198 } | |
199 | |
200 container.add(new SQCurveFacet( | |
201 res, | |
202 i, | |
203 getFractionFacetname(CURVE_INDEX, i), | |
204 Resources.getMsg( | |
205 meta, | |
206 I18N_FACET_CURVE, | |
207 I18N_FACET_CURVE | |
208 ), | |
209 hash, | |
210 stateId | |
211 )); | |
212 | |
213 for (int j = 0, C = result.numIterations()-1; j < C; j++) { | |
214 | |
215 Object [] round = new Object [] { j + 1 }; | |
216 | |
217 int index = res; | |
218 index = index << 16; | |
219 index = index + j; | |
220 | |
221 if (debug) { | |
222 log.debug("new outliers facet (index=" +index+ ")"); | |
223 log.debug(" result index = " + res); | |
224 log.debug(" fraction idx = " + i); | |
225 log.debug(" iteration = " + j); | |
226 } | |
227 | |
228 container.add(new SQOutlierFacet( | |
229 index, | |
230 i, | |
231 getFractionFacetname(OUTLIER_INDEX, i), | |
232 Resources.getMsg( | |
233 meta, | |
234 I18N_FACET_OUTLIERS, | |
235 I18N_FACET_OUTLIERS, | |
236 round | |
237 ), | |
238 hash, | |
239 stateId | |
240 )); | |
241 | |
242 container.add(new SQOutlierCurveFacet( | |
243 index, | |
244 i, | |
245 getFractionFacetname(OUTLIER_CURVE_INDEX, i), | |
246 Resources.getMsg( | |
247 meta, | |
248 I18N_FACET_OUTLIER_CURVE, | |
249 I18N_FACET_OUTLIER_CURVE, | |
250 round | |
251 ), | |
252 hash, | |
253 stateId | |
254 )); | |
255 | |
256 container.add(new SQOutlierMeasurementFacet( | |
257 index, | |
258 i, | |
259 getFractionFacetname(OUTLIER_MEASUREMENT_INDEX, i), | |
260 Resources.getMsg( | |
261 meta, | |
262 I18N_FACET_OUTLIER_MEASUREMENT, | |
263 I18N_FACET_OUTLIER_MEASUREMENT, | |
264 round | |
265 ), | |
266 hash, | |
267 stateId | |
268 )); | |
269 } // for all outliers | |
270 | |
271 container.add(new SQMeasurementFacet( | |
272 res, | |
273 i, | |
274 getFractionFacetname(MEASURREMENT_INDEX, i), | |
275 Resources.getMsg( | |
276 meta, | |
277 I18N_FACET_MEASUREMENTS, | |
278 I18N_FACET_MEASUREMENTS | |
279 ), | |
280 hash, | |
281 stateId | |
282 )); | |
283 } // for all fractions | |
284 } // for all results | |
285 } | |
286 | |
287 protected static String getFractionFacetname(int type, int idx) { | |
288 if (log.isDebugEnabled()) { | |
289 log.debug("getFractionFacetname(): " + type + " | " + idx); | |
290 } | |
291 type %= FACET_NAMES.length; | |
292 return FACET_NAMES[type][idx % FACET_NAMES[type].length]; | |
293 } | |
294 } | |
295 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |