comparison flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixDeltaWtGenerator.java @ 3212:abc2db630815

Work in generalized annotations for chart generators flys-artifacts/trunk@4835 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Christian Lins <christian.lins@intevation.de>
date Fri, 29 Jun 2012 12:35:06 +0000
parents ae14f412ba10
children 1aec30e75bcb
comparison
equal deleted inserted replaced
3211:a1a434c163a4 3212:abc2db630815
14 14
15 import de.intevation.flys.artifacts.model.fixings.QWD; 15 import de.intevation.flys.artifacts.model.fixings.QWD;
16 16
17 import de.intevation.flys.exports.TimeseriesChartGenerator; 17 import de.intevation.flys.exports.TimeseriesChartGenerator;
18 18
19 import de.intevation.flys.jfree.CollisionFreeXYTextAnnotation;
20 import de.intevation.flys.jfree.FLYSAnnotation;
19 import de.intevation.flys.jfree.StyledTimeSeries; 21 import de.intevation.flys.jfree.StyledTimeSeries;
20 22
21 import de.intevation.flys.utils.FLYSUtils; 23 import de.intevation.flys.utils.FLYSUtils;
22 24
23 import java.awt.BasicStroke; 25 import java.awt.BasicStroke;
24 import java.awt.Color; 26 import java.awt.Color;
25 27
26 import java.io.OutputStream; 28 import java.io.OutputStream;
27 29
30 import java.util.ArrayList;
31 import java.util.HashMap;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.Set;
35
28 import javax.xml.xpath.XPathConstants; 36 import javax.xml.xpath.XPathConstants;
29 37
30 import org.apache.log4j.Logger; 38 import org.apache.log4j.Logger;
31 39
32 import org.jfree.chart.JFreeChart; 40 import org.jfree.chart.JFreeChart;
41
42 import org.jfree.chart.annotations.XYTextAnnotation;
33 43
34 import org.jfree.chart.plot.IntervalMarker; 44 import org.jfree.chart.plot.IntervalMarker;
35 import org.jfree.chart.plot.ValueMarker; 45 import org.jfree.chart.plot.ValueMarker;
36 46
37 import org.jfree.chart.title.TextTitle; 47 import org.jfree.chart.title.TextTitle;
244 254
245 TimeSeries series = new StyledTimeSeries(desc, theme); 255 TimeSeries series = new StyledTimeSeries(desc, theme);
246 TimeSeries interpol = new StyledTimeSeries(desc + "interpol", theme); 256 TimeSeries interpol = new StyledTimeSeries(desc + "interpol", theme);
247 257
248 if (qwds == null) { 258 if (qwds == null) {
249 return; 259 logger.debug("doAnalysisEventsOut: qwds == null");
250 } 260 return;
261 }
262
263 if (qwds.length == 0) {
264 logger.debug("doAnalysisEventsOut: qwds.length == 0");
265 return;
266 }
267
268 Map<Integer, int[]> annoIdxMap = new HashMap<Integer, int[]>();
269
251 for (int i = 0; i < qwds.length; i++) { 270 for (int i = 0; i < qwds.length; i++) {
252 if (qwds[i] == null) { 271 if (qwds[i] == null) {
272 logger.debug("doAnalysisEventsOut: qwds[" + i + "] == null");
253 continue; 273 continue;
254 } 274 }
255 RegularTimePeriod rtp = new Day(qwds[i].getDate()); 275 RegularTimePeriod rtp = new Day(qwds[i].getDate());
256 double value = qwds[i].getDeltaW(); 276 double value = qwds[i].getDeltaW();
257 boolean interpolate = qwds[i].getInterpolated(); 277 boolean interpolate = qwds[i].getInterpolated();
258 if (interpolate) { 278 if (interpolate) {
259 interpol.add(rtp, value); 279 interpol.add(rtp, value);
260 } 280 }
261 else { 281 else {
282 annoIdxMap.put(
283 i,
284 new int[]{series.getItemCount(), tsc.getSeriesCount()});
262 series.add(rtp, value); 285 series.add(rtp, value);
263 } 286 }
264 } 287 }
265 tsc.addSeries(series); 288 tsc.addSeries(series);
266 tsc.addSeries(interpol); 289 tsc.addSeries(interpol);
267 addAxisDataset(tsc, 0, visible); 290 addAxisDataset(tsc, 0, visible);
268 addAttribute(desc + "interpol", "interpolate"); 291 addAttribute(desc + "interpol", "interpolate");
269 addAttribute(desc, "outline"); 292 addAttribute(desc, "outline");
293
294 doQWDTextAnnotations(annoIdxMap, tsc, qwds, theme, visible);
295 }
296
297
298 protected void doQWDTextAnnotations(Map<Integer, int[]> annoIdxMap,
299 TimeSeriesCollection tsc, QWD[] qwds, Document theme, boolean visible) {
300 List<XYTextAnnotation> textAnnos = new ArrayList<XYTextAnnotation>();
301 Set<Map.Entry<Integer, int[]>> entries = annoIdxMap.entrySet();
302 for(Map.Entry<Integer, int[]> entry : entries) {
303 QWD qwd = qwds[entry.getKey()];
304 int[] idxs = entry.getValue();
305 double x = tsc.getXValue(idxs[0], idxs[1]);
306 XYTextAnnotation anno = new CollisionFreeXYTextAnnotation(
307 qwd.getQ() + " m\u00B3/s",
308 x,
309 qwd.getDeltaW());
310 textAnnos.add(anno);
311 logger.debug("annotation: " + x + "/" + qwd.getDeltaW());
312 }
313
314 FLYSAnnotation flysAnno = new FLYSAnnotation(null, null, null, theme);
315 flysAnno.setTextAnnotations(textAnnos);
316 addAnnotations(flysAnno, visible);
270 } 317 }
271 318
272 319
273 protected void doReferenceEventsOut( 320 protected void doReferenceEventsOut(
274 FLYSArtifact artifact, 321 FLYSArtifact artifact,
286 TimeSeries interpol = new StyledTimeSeries(desc + "interpol", theme); 333 TimeSeries interpol = new StyledTimeSeries(desc + "interpol", theme);
287 334
288 if (qwds == null) { 335 if (qwds == null) {
289 return; 336 return;
290 } 337 }
338
339 Map<Integer, int[]> annoIdxMap = new HashMap<Integer, int[]>();
340
291 for (int i = 0; i < qwds.length; i++) { 341 for (int i = 0; i < qwds.length; i++) {
292 if (qwds[i] == null) { 342 if (qwds[i] == null) {
293 continue; 343 continue;
294 } 344 }
295 RegularTimePeriod rtp = new Day(qwds[i].getDate()); 345 RegularTimePeriod rtp = new Day(qwds[i].getDate());
297 boolean interpolate = qwds[i].getInterpolated(); 347 boolean interpolate = qwds[i].getInterpolated();
298 if (interpolate) { 348 if (interpolate) {
299 interpol.addOrUpdate(rtp, value); 349 interpol.addOrUpdate(rtp, value);
300 } 350 }
301 else { 351 else {
352 annoIdxMap.put(
353 i,
354 new int[]{series.getItemCount(), tsc.getSeriesCount()});
302 series.addOrUpdate(rtp, value); 355 series.addOrUpdate(rtp, value);
303 } 356 }
357
304 } 358 }
305 tsc.addSeries(series); 359 tsc.addSeries(series);
306 tsc.addSeries(interpol); 360 tsc.addSeries(interpol);
307 361
308 addAxisDataset(tsc, 0, visible); 362 addAxisDataset(tsc, 0, visible);
309 addAttribute(desc + "interpol", "interpolate"); 363 addAttribute(desc + "interpol", "interpolate");
310 addAttribute(desc, "outline"); 364 addAttribute(desc, "outline");
365
366 //doQWDTextAnnotations(annoIdxMap, tsc, qwds, theme, visible);
311 } 367 }
312 368
313 369
314 protected void doDeviationOut( 370 protected void doDeviationOut(
315 FLYSArtifact artifact, 371 FLYSArtifact artifact,

http://dive4elements.wald.intevation.org