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(

http://dive4elements.wald.intevation.org