Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java @ 300:6a3a02e004d9
Refactored process of chart generation. Charts will be generated via Chart-Interface from rev351 and no more via factory classes.
gnv-artifacts/trunk@354 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 20 Nov 2009 13:51:14 +0000 |
parents | d6c75171f1e9 |
children | 3ea030aafe65 |
comparison
equal
deleted
inserted
replaced
299:d6c75171f1e9 | 300:6a3a02e004d9 |
---|---|
10 import java.io.UnsupportedEncodingException; | 10 import java.io.UnsupportedEncodingException; |
11 import java.util.ArrayList; | 11 import java.util.ArrayList; |
12 import java.util.Collection; | 12 import java.util.Collection; |
13 import java.util.Iterator; | 13 import java.util.Iterator; |
14 import java.util.List; | 14 import java.util.List; |
15 import java.util.Locale; | |
15 | 16 |
16 import javax.imageio.ImageIO; | 17 import javax.imageio.ImageIO; |
17 import javax.xml.transform.Transformer; | 18 import javax.xml.transform.Transformer; |
18 import javax.xml.transform.TransformerConfigurationException; | 19 import javax.xml.transform.TransformerConfigurationException; |
19 import javax.xml.transform.TransformerException; | 20 import javax.xml.transform.TransformerException; |
26 import org.w3c.dom.Document; | 27 import org.w3c.dom.Document; |
27 import org.w3c.dom.Element; | 28 import org.w3c.dom.Element; |
28 import org.w3c.dom.Node; | 29 import org.w3c.dom.Node; |
29 import org.w3c.dom.NodeList; | 30 import org.w3c.dom.NodeList; |
30 | 31 |
32 import org.jfree.chart.ChartTheme; | |
33 | |
31 import au.com.bytecode.opencsv.CSVWriter; | 34 import au.com.bytecode.opencsv.CSVWriter; |
32 import de.intevation.artifactdatabase.Config; | 35 import de.intevation.artifactdatabase.Config; |
33 import de.intevation.artifactdatabase.XMLUtils; | 36 import de.intevation.artifactdatabase.XMLUtils; |
34 import de.intevation.artifacts.CallMeta; | 37 import de.intevation.artifacts.CallMeta; |
35 import de.intevation.artifacts.PreferredLocale; | 38 import de.intevation.artifacts.PreferredLocale; |
36 import de.intevation.gnv.artifacts.ressource.RessourceFactory; | 39 import de.intevation.gnv.artifacts.ressource.RessourceFactory; |
37 import de.intevation.gnv.chart.TestChart; | 40 import de.intevation.gnv.chart.Chart; |
38 import de.intevation.gnv.chart.ChartFactory; | 41 import de.intevation.gnv.chart.ChartFactory; |
39 import de.intevation.gnv.chart.ChartLabels; | 42 import de.intevation.gnv.chart.ChartLabels; |
40 import de.intevation.gnv.chart.ChartStyle; | 43 import de.intevation.gnv.chart.ChartStyle; |
44 import de.intevation.gnv.chart.AbstractXYLineChart; | |
41 import de.intevation.gnv.chart.TimeSeriesChart; | 45 import de.intevation.gnv.chart.TimeSeriesChart; |
42 import de.intevation.gnv.chart.exception.TechnicalChartException; | 46 import de.intevation.gnv.chart.exception.TechnicalChartException; |
43 import de.intevation.gnv.exports.DefaultExport; | 47 import de.intevation.gnv.exports.DefaultExport; |
44 import de.intevation.gnv.exports.DefaultProfile; | 48 import de.intevation.gnv.exports.DefaultProfile; |
45 import de.intevation.gnv.exports.Export.Profile; | 49 import de.intevation.gnv.exports.Export.Profile; |
68 * @author Tim Englich <tim.englich@intevation.de> | 72 * @author Tim Englich <tim.englich@intevation.de> |
69 * | 73 * |
70 */ | 74 */ |
71 public class TimeSeriesOutputTransition extends OutputTransitionBase { | 75 public class TimeSeriesOutputTransition extends OutputTransitionBase { |
72 | 76 |
77 protected static final boolean CACHE_CHART = | |
78 Boolean.parseBoolean(System.getProperty("cache.chart", "false")); | |
79 | |
73 /** | 80 /** |
74 * The UID of this Class | 81 * The UID of this Class |
75 */ | 82 */ |
76 private static final long serialVersionUID = 4178407570503098858L; | 83 private static final long serialVersionUID = 4178407570503098858L; |
77 | 84 |
78 /** | 85 /** |
79 * the logger, used to log exceptions and additonaly information | 86 * the logger, used to log exceptions and additonaly information |
80 */ | 87 */ |
81 private static Logger log = Logger | 88 private static Logger log = Logger |
82 .getLogger(TimeSeriesOutputTransition.class); | 89 .getLogger(TimeSeriesOutputTransition.class); |
83 | 90 |
84 | |
85 private static List<TimeGap> timeGapDefinitions = null; | 91 private static List<TimeGap> timeGapDefinitions = null; |
86 | 92 |
87 protected String domainLable = "Zeit [UTC]"; | 93 protected String domainLable = "Zeit [UTC]"; |
88 | 94 |
89 protected String featureValuesName = "featureid"; | 95 protected String featureValuesName = "featureid"; |
350 * @param chartStyle | 356 * @param chartStyle |
351 * @param chartLables | 357 * @param chartLables |
352 * @throws IOException | 358 * @throws IOException |
353 * @throws TechnicalChartException | 359 * @throws TechnicalChartException |
354 */ | 360 */ |
355 protected void createChart(OutputStream outputStream, | 361 protected void createChart( |
356 Collection<KeyValueDescibeData> parameters, | 362 OutputStream outputStream, |
357 Collection<KeyValueDescibeData> measurements, | 363 Collection parameters, |
358 Collection<KeyValueDescibeData> dates, | 364 Collection measurements, |
359 ChartStyle chartStyle, ChartLabels chartLables, | 365 Collection dates, |
360 String uuid) throws IOException, | 366 ChartStyle chartStyle, |
361 TechnicalChartException { | 367 ChartLabels chartLables, |
362 ChartFactory chartFactory = new ChartFactory(); | 368 String uuid |
363 chartFactory.createSimpleTimeSeriesChart(chartLables, chartStyle, | 369 ) |
364 parameters, measurements, outputStream, this | 370 throws IOException, TechnicalChartException |
365 .getChartResult(uuid),timeGapDefinitions); | 371 { |
372 log.debug("Create chart."); | |
373 Chart chart = getChart( | |
374 chartLables, | |
375 null, // ChartTheme | |
376 parameters, | |
377 measurements, | |
378 getChartResult(uuid), | |
379 timeGapDefinitions, | |
380 null, // Locale | |
381 uuid | |
382 ); | |
383 | |
384 if (chart == null) { | |
385 log.error("Could not initialize chart."); | |
386 return; | |
387 } | |
388 | |
389 // TODO generic format | |
390 Dimension dim = chartStyle.getChartSize(); | |
391 String format = "PNG"; | |
392 int width = new Double(dim.getWidth()).intValue(); | |
393 int height = new Double(dim.getHeight()).intValue(); | |
394 | |
395 log.debug("export chart as " + format + " in " + width + "x" + height); | |
396 ImageIO.write(chart.exportPNG(width, height), format, outputStream); | |
397 } | |
398 | |
399 protected Chart getChart( | |
400 ChartLabels chartLables, | |
401 ChartTheme chartTheme, | |
402 Collection parameters, | |
403 Collection measurements, | |
404 Collection result, | |
405 Collection dates, | |
406 Locale locale, | |
407 String uuid | |
408 ) { | |
409 Chart chart = null; | |
410 | |
411 if (CACHE_CHART) { | |
412 log.info("Try to get timeseries chart from cache."); | |
413 chart = (Chart) getChartFromCache(uuid); | |
414 } | |
415 | |
416 if (chart != null) | |
417 return chart; | |
418 | |
419 log.info("Chart not in cache yet."); | |
420 chart = new TimeSeriesChart( | |
421 chartLables, | |
422 null, | |
423 parameters, | |
424 measurements, | |
425 result, | |
426 dates, | |
427 null | |
428 ); | |
429 chart.generateChart(); | |
430 | |
431 if (CACHE_CHART) { | |
432 log.info("Put chart into cache."); | |
433 purifyChart(chart, uuid); | |
434 } | |
435 | |
436 return chart; | |
366 } | 437 } |
367 | 438 |
368 protected ChartStyle creatStyle(int witdh, int height) { | 439 protected ChartStyle creatStyle(int witdh, int height) { |
369 // TODO Konfigurierbar machen | 440 // TODO Konfigurierbar machen |
370 de.intevation.gnv.chart.Insets lInsets = new de.intevation.gnv.chart.Insets( | 441 de.intevation.gnv.chart.Insets lInsets = new de.intevation.gnv.chart.Insets( |