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 :

http://dive4elements.wald.intevation.org