comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/DifferencesState.java @ 3898:95d699c769fb

Bedheight difference calculation has chart outpus now. flys-artifacts/trunk@5562 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 21 Sep 2012 14:29:32 +0000
parents 68beaa827751
children da48e33f4241
comparison
equal deleted inserted replaced
3897:bce2dd4310a6 3898:95d699c769fb
1 package de.intevation.flys.artifacts.states.minfo; 1 package de.intevation.flys.artifacts.states.minfo;
2 2
3 import java.text.DateFormat;
4 import java.util.ArrayList;
5 import java.util.List;
6
3 import org.apache.log4j.Logger; 7 import org.apache.log4j.Logger;
4 8
9 import de.intevation.artifactdatabase.state.Facet;
10 import de.intevation.artifacts.CallContext;
11 import de.intevation.artifacts.CallMeta;
12 import de.intevation.flys.artifacts.FLYSArtifact;
13 import de.intevation.flys.artifacts.access.BedDifferencesAccess;
14 import de.intevation.flys.artifacts.model.CalculationResult;
15 import de.intevation.flys.artifacts.model.FacetTypes;
16 import de.intevation.flys.artifacts.model.minfo.BedDiffCalculation;
17 import de.intevation.flys.artifacts.model.minfo.BedDiffEpochFacet;
18 import de.intevation.flys.artifacts.model.minfo.BedDiffEpochResult;
19 import de.intevation.flys.artifacts.model.minfo.BedDiffYearFacet;
20 import de.intevation.flys.artifacts.model.minfo.BedDiffYearResult;
21 import de.intevation.flys.artifacts.model.minfo.BedDifferencesResult;
22 import de.intevation.flys.artifacts.resources.Resources;
5 import de.intevation.flys.artifacts.states.DefaultState; 23 import de.intevation.flys.artifacts.states.DefaultState;
24 import de.intevation.flys.utils.Formatter;
6 25
7 /** 26 /**
8 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> 27 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
9 */ 28 */
10 public class DifferencesState extends DefaultState { 29 public class DifferencesState
30 extends DefaultState
31 implements FacetTypes
32 {
11 /** The logger used in this class. */ 33 /** The logger used in this class. */
12 private static Logger logger = Logger.getLogger(DifferencesState.class); 34 private static Logger logger = Logger.getLogger(DifferencesState.class);
35 public static final String I18N_DIFF_YEAR = "beddifference.year";
36 public static final String I18N_DIFF_EPOCH = "beddifference.epoch";
37
38 public static final String I18N_FACET_BED_DIFF_YEAR = "facet.bedheight.diff.year";
39 public static final String I18N_FACET_BED_DIFF_ABSOLUTE = "facet.bedheight.diff.absolute";
40 public static final String I18N_FACET_BED_DIFF_MORPH = "facet.bedheight.diff.morph";
41 public static final String I18N_FACET_BED_DIFF_EPOCH = "facet.bedheight.diff.epoch";
42 public static final String I18N_FACET_BED_DIFF_HEIGHT1 = "facet.bedheight.diff.height1";
43 public static final String I18N_FACET_BED_DIFF_HEIGHT2 = "facet.bedheight.diff.height2";
13 44
14 public DifferencesState() { 45 public DifferencesState() {
15 } 46 }
47
48 @Override
49 public Object computeAdvance(FLYSArtifact artifact, String hash,
50 CallContext context, List<Facet> facets, Object old) {
51 logger.debug("BedQualityState.computeAdvance");
52
53 List<Facet> newFacets = new ArrayList<Facet>();
54
55 BedDifferencesAccess access =
56 new BedDifferencesAccess(artifact, context);
57
58 CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old
59 : new BedDiffCalculation().calculate(access);
60
61 if (facets == null || res == null) {
62 return res;
63 }
64
65 BedDifferencesResult[] results = (BedDifferencesResult[]) res.getData();
66
67 if (results == null || results.length == 0) {
68 logger.warn("Calculation computed no results!");
69 return res;
70 }
71
72 generateFacets(context, newFacets, results, getID(), hash);
73 logger.debug("Created " + newFacets.size() + " new Facets.");
74
75 facets.addAll(newFacets);
76
77 return res;
78 }
79
80 protected void generateFacets(CallContext context, List<Facet> newFacets,
81 BedDifferencesResult[] results, String stateId, String hash) {
82 logger.debug("BedQualityState.generateFacets");
83
84 CallMeta meta = context.getMeta();
85
86 for (int idx = 0; idx < results.length; idx++) {
87 if (results[idx] instanceof BedDiffYearResult) {
88 newFacets.add(new BedDiffYearFacet(
89 idx,
90 BED_DIFFERENCE_YEAR,
91 createBedDiffYearDescription(
92 meta,
93 (BedDiffYearResult)results[idx]),
94 ComputeType.ADVANCE,
95 stateId,
96 hash));
97 newFacets.add(new BedDiffYearFacet(
98 idx,
99 BED_DIFFERENCE_MORPH_WIDTH,
100 createBedDiffMorphDescription(
101 meta,
102 (BedDiffYearResult)results[idx]),
103 ComputeType.ADVANCE,
104 stateId,
105 hash));
106 newFacets.add(new BedDiffYearFacet(
107 idx,
108 BED_DIFFERENCE_YEAR_HEIGHT1,
109 createBedDiffHeightDescription(
110 meta,
111 (BedDiffYearResult)results[idx],
112 0),
113 ComputeType.ADVANCE,
114 stateId,
115 hash));
116 newFacets.add(new BedDiffYearFacet(
117 idx,
118 BED_DIFFERENCE_YEAR_HEIGHT2,
119 createBedDiffHeightDescription(
120 meta,
121 (BedDiffYearResult)results[idx],
122 1),
123 ComputeType.ADVANCE,
124 stateId,
125 hash));
126 newFacets.add(new BedDiffYearFacet(
127 idx,
128 BED_DIFFERENCE_HEIGHT_YEAR,
129 createBedDiffAbsoluteDescription(
130 meta,
131 (BedDiffYearResult)results[idx]),
132 ComputeType.ADVANCE,
133 stateId,
134 hash));
135 }
136 if (results[idx] instanceof BedDiffEpochResult) {
137 newFacets.add(new BedDiffEpochFacet(
138 idx,
139 BED_DIFFERENCE_EPOCH,
140 createBedDiffEpochDescription(
141 meta,
142 (BedDiffEpochResult)results[idx]),
143 ComputeType.ADVANCE,
144 stateId,
145 hash));
146 newFacets.add(new BedDiffEpochFacet(
147 idx,
148 BED_DIFFERENCE_EPOCH_HEIGHT1,
149 createBedDiffHeightEpochDescription(
150 meta,
151 (BedDiffEpochResult)results[idx],
152 0),
153 ComputeType.ADVANCE,
154 stateId,
155 hash));
156 newFacets.add(new BedDiffEpochFacet(
157 idx,
158 BED_DIFFERENCE_EPOCH_HEIGHT2,
159 createBedDiffHeightEpochDescription(
160 meta,
161 (BedDiffEpochResult)results[idx],
162 1),
163 ComputeType.ADVANCE,
164 stateId,
165 hash));
166
167 }
168 }
169 }
170
171 private String createBedDiffHeightDescription(
172 CallMeta meta,
173 BedDiffYearResult result,
174 int ndx
175 ) {
176 String range = result.getStart() + " - " + result.getEnd();
177
178 if (ndx == 0) {
179 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT1,
180 I18N_FACET_BED_DIFF_HEIGHT1, new Object[] { range });
181 }
182 else {
183 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT2,
184 I18N_FACET_BED_DIFF_HEIGHT2, new Object[] {range});
185 }
186 }
187
188 private String createBedDiffHeightEpochDescription(
189 CallMeta meta,
190 BedDiffEpochResult result,
191 int ndx
192 ) {
193 DateFormat df = Formatter.getDateFormatter(meta, "yyyy");
194 String range =
195 df.format(result.getStart())
196 + " - " +
197 df.format(result.getEnd());
198
199 if (ndx == 0) {
200 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT1,
201 I18N_FACET_BED_DIFF_HEIGHT1, new Object[] { range });
202 }
203 else {
204 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT2,
205 I18N_FACET_BED_DIFF_HEIGHT2, new Object[] {range});
206 }
207 }
208
209 protected String createBedDiffYearDescription(
210 CallMeta meta,
211 BedDiffYearResult result) {
212 String range = result.getStart() + " - " + result.getEnd();
213
214 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_YEAR,
215 I18N_FACET_BED_DIFF_YEAR, new Object[] { range });
216 }
217
218 protected String createBedDiffMorphDescription(
219 CallMeta meta,
220 BedDiffYearResult result) {
221 String range = result.getStart() + " - " + result.getEnd();
222
223 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_MORPH,
224 I18N_FACET_BED_DIFF_MORPH, new Object[] { range });
225 }
226
227 protected String createBedDiffAbsoluteDescription(
228 CallMeta meta,
229 BedDiffYearResult result) {
230 String range = result.getStart() + " - " + result.getEnd();
231
232 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_ABSOLUTE,
233 I18N_FACET_BED_DIFF_ABSOLUTE, new Object[] { range });
234 }
235
236 protected String createBedDiffEpochDescription(
237 CallMeta meta,
238 BedDiffEpochResult result) {
239 DateFormat df = Formatter.getDateFormatter(meta, "yyyy");
240 String range =
241 df.format(result.getStart())
242 + " - " +
243 df.format(result.getEnd());
244
245 return Resources.getMsg(meta, I18N_FACET_BED_DIFF_EPOCH,
246 I18N_FACET_BED_DIFF_EPOCH, new Object[] { range });
247 }
16 } 248 }

http://dive4elements.wald.intevation.org