annotate flys-artifacts/src/main/java/de/intevation/flys/exports/ChartExportHelper.java @ 4282:8b4988815974

Added marker for Ws and Qs in Historical Discharge WQ charts. Therefore, the XYChartGenerator got two new methods addDomainMarker(Marker, boolean) and addValueMarker(Marker, boolean). The boolean parameters determine, if the marker should be visible or not. This is analogous to addAxisSeries(XYSeries, int, boolean).
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 29 Oct 2012 05:59:27 +0100
parents d9af29a4bb85
children
rev   line source
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 /*
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2 * Copyright (c) 2011 by Intevation GmbH
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
3 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 * This program is free software under the LGPL (>=v2.1)
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 * Read the file LGPL.txt coming with the software for details
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 * or visit http://www.gnu.org/licenses/ if it does not exist.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 package de.intevation.flys.exports;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10 import com.lowagie.text.Document;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import com.lowagie.text.DocumentException;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import com.lowagie.text.PageSize;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import com.lowagie.text.Rectangle;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15 import com.lowagie.text.pdf.PdfContentByte;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16 import com.lowagie.text.pdf.PdfTemplate;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17 import com.lowagie.text.pdf.PdfWriter;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19 import java.awt.Graphics2D;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 import java.awt.Transparency;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 import java.awt.geom.Rectangle2D.Double;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 import java.awt.geom.Rectangle2D;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 import java.io.IOException;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27 import java.io.OutputStream;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 import java.io.OutputStreamWriter;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 import java.io.UnsupportedEncodingException;
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 714
diff changeset
30 import org.jfree.chart.ChartRenderingInfo;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 import javax.imageio.ImageIO;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
34 import au.com.bytecode.opencsv.CSVWriter;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
35
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36 import org.apache.batik.svggen.SVGGraphics2D;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37 import org.apache.batik.svggen.SVGGraphics2DIOException;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 import org.apache.log4j.Logger;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 import org.jfree.chart.JFreeChart;
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
42 import org.jfree.chart.plot.XYPlot;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
43 import org.jfree.data.xy.XYDataset;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 import de.intevation.artifacts.CallContext;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47 import de.intevation.artifacts.common.utils.XMLUtils;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51 * This class is a helper class which supports some methods to export charts
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 * into specific formats.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 public class ChartExportHelper {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
58 public static final String FORMAT_PNG = "png";
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
59
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
60 public static final String FORMAT_PDF = "pdf";
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
61
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
62 public static final String FORMAT_SVG = "svg";
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
63
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
64 public static final String FORMAT_CSV = "csv";
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
65
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 * Constant field to define A4 as default page size.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
68 */
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
69 public static final String DEFAULT_PAGE_SIZE = "A4";
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72 * Constant field to define UTF-8 as default encoding.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73 */
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
74 public static final String DEFAULT_ENCODING = "UTF-8";
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
76 /** The default separator for the CSV export. */
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
77 public static final char DEFAULT_CSV_SEPARATOR = ',';
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
78
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
79
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81 * Logger used for logging with log4j.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
82 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
83 private static Logger log = Logger.getLogger(ChartExportHelper.class);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
84
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
85
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
86 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 * A method to export a <code>JFreeChart</code> as image to an
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
88 * <code>OutputStream</code> with a given format, width and height.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
90 * @param out OutputStream
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 * @param chart JFreeChart object to be exported.
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2231
diff changeset
92 * @param cc context, in which e.g. size is stored.
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
93 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94 * @throws IOException if writing image to OutputStream failed.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
95 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
96 public static void exportImage(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97 OutputStream out,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
98 JFreeChart chart,
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
99 CallContext cc
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
100 )
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
101 throws IOException
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102 {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
103 log.info("export chart as png");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
104
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 714
diff changeset
105 ChartRenderingInfo info = new ChartRenderingInfo();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 714
diff changeset
106
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
107 String format = (String) cc.getContextValue("chart.image.format");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
108
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
109 int[] size = getSize(cc);
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
110
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111 ImageIO.write(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112 chart.createBufferedImage(
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
113 size[0], size[1], Transparency.BITMASK, info
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114 ),
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 format,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 out
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 );
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122 * A method to export a <code>JFreeChart</code> as SVG to an
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
123 * <code>OutputStream</code>.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
124 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
125 * @param out OutputStream
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
126 * @param chart JFreeChart to be exported
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
127 * @param context The CallContext object that contains extra chart
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
128 * parameters.
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
129 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 public static void exportSVG(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131 OutputStream out,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
132 JFreeChart chart,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
133 CallContext context
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134 ) {
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
135 String encoding = (String) context.getContextValue("chart.encoding");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
136
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
137 log.info("export chart as svg");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
138
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
139 if (encoding == null)
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 encoding = DEFAULT_ENCODING;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142 org.w3c.dom.Document document = XMLUtils.newDocument();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 SVGGraphics2D graphics = new SVGGraphics2D(document);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
145 int[] size = getSize(context);
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
146
2160
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
147 ChartRenderingInfo info = new ChartRenderingInfo();
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
148
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
149 chart.draw(graphics, new Rectangle2D.Double(0.0D, 0.0D,size[0],size[1]), info);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151 try {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 graphics.stream(new OutputStreamWriter(out, encoding));
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
153 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 catch (SVGGraphics2DIOException svge) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155 log.error("Error while writing svg export to output stream.", svge);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
156 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
157 catch (UnsupportedEncodingException uee) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 log.error("Unsupported encoding: " + encoding, uee);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
159 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
160 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
161
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
162
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
163 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
164 * A method to export a <code>JFreeChart</code> as PDF to an
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
165 * <code>OutputStream</code>.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
166 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 * @param out OutputStream
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168 * @param chart JFreeChart
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 public static void exportPDF(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
171 OutputStream out,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
172 JFreeChart chart,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
173 CallContext cc
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
174 ) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
175 log.info("export chart as pdf.");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
176
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
177 String pageFormat = (String) cc.getContextValue("chart.page.format");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
178
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
179 if (pageFormat == null)
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
180 pageFormat = DEFAULT_PAGE_SIZE;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2231
diff changeset
182 // Max size of the chart.
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
183 Rectangle page = PageSize.getRectangle(pageFormat);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
184 float pageWidth = page.getWidth();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185 float pageHeight = page.getHeight();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2231
diff changeset
187 // The chart width.
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
188 int[] size = getSize(cc);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
190 boolean landscape = size[0] > size[1];
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
191
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
192 float width = 0;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
193 float height = 0;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
194 if (landscape) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
195 width = pageHeight;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
196 height = pageWidth;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
197 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
198 else {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
199 width = pageWidth;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
200 height = pageHeight;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
201 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
202
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
203 float marginLeft = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
204 "chart.marginLeft");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
205
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
206 float marginRight = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
207 "chart.marginRight");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
208
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
209 float marginTop = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
210 "chart.marginTop");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
211
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
212 float marginBottom = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
213 "chart.marginBottom");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
214
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
215 float spaceX = width - marginLeft - marginRight;
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
216 if (size[0] > spaceX) {
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
217 log.warn("Width of the chart is too big for pdf -> resize it now.");
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
218 double ratio = ((double)spaceX) / size[0];
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
219 size[0] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
220 size[1] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
221 log.debug("Resized chart to " + size[0] + "x" + size[1]);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
222 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
223
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
224 float spaceY = height - marginTop - marginBottom;
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
225 if (size[1] > spaceY) {
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
226 log.warn("Height of the chart is too big for pdf -> resize it now.");
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
227 double ratio = ((double)spaceY) / size[1];
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
228 size[0] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
229 size[1] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
230 log.debug("Resized chart to " + size[0] + "x" + size[1]);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
231 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
232
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
233 Document document = null;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
234 if (landscape) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
235 document = new Document(page.rotate());
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
236 log.debug("Create landscape pdf.");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
237 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
238 else
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
239 document = new Document(page);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
240
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
241 try {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
242 PdfWriter writer = PdfWriter.getInstance(document, out);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
243
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
244 document.addSubject(chart.getTitle().getText());
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
245 document.addCreationDate();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
246 document.open();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
247
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
248 PdfContentByte content = writer.getDirectContent();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
249
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
250 PdfTemplate template = content.createTemplate(width, height);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
251 Graphics2D graphics = template.createGraphics(width, height);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
252
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
253 double[] origin = getCenteredAnchor(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
254 marginLeft, marginRight, marginBottom, marginTop,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
255 width, height,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
256 size[0], size[1]);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
257
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
258 Rectangle2D area = new Rectangle2D.Double(
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
259 origin[0], origin[1], size[0], size[1]);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
260
2160
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
261 ChartRenderingInfo info = new ChartRenderingInfo();
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
262
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
263 chart.draw(graphics, area, info);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
264 graphics.dispose();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
265 content.addTemplate(template, 0f, 0f);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
266 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
267 catch (DocumentException de) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
268 log.error("Error while exporting chart to pdf.", de);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
269 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
270 finally {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
271 document.close();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
272 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
273 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
274
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
275
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
276 /**
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
277 * A method to export a CSV file to an
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
278 * <code>OutputStream</code>.
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
279 *
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
280 * @param out OutputStream
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
281 * @param chart JFreeChart containing the data.
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
282 * @param context The CallContext object that contains extra parameters.
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
283 */
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
284 public static void exportCSV(
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
285 OutputStream out,
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
286 JFreeChart chart,
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
287 CallContext context)
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
288 {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
289 log.debug("export chart as CSV");
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
290 CSVWriter writer = null;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
291 try {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
292 writer = new CSVWriter(
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
293 new OutputStreamWriter(
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
294 out,
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
295 DEFAULT_ENCODING),
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
296 DEFAULT_CSV_SEPARATOR);
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
297 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
298 catch(UnsupportedEncodingException uee) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
299 log.warn("Wrong encoding for CSV export.");
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
300 return;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
301 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
302 XYPlot plot = chart.getXYPlot();
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
303 int count = plot.getDatasetCount();
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
304 for (int i = 0; i < count; i++) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
305 XYDataset data = plot.getDataset(i);
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
306 int scount = data.getSeriesCount();
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
307 for (int j = 0; j < scount; j++) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
308 Comparable seriesKey = data.getSeriesKey(j);
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
309 log.debug("series key: " + seriesKey.toString());
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
310 writeCSVHeader(writer, seriesKey.toString());
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
311 writeCSVData(writer, data);
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
312 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
313 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
314 try {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
315 writer.close();
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
316 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
317 catch(IOException ioe) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
318 log.error("Writing CSV export failed!");
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
319 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
320 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
321
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
322
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
323 protected static void writeCSVHeader(CSVWriter writer, String key) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
324 writer.writeNext(new String[] {"#"});
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
325 writer.writeNext(new String[] {"# " + key});
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
326 writer.writeNext(new String[] {"#"});
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
327 writer.writeNext(new String[] {"X", "Y"});
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
328 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
329
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
330
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
331 protected static void writeCSVData(CSVWriter writer, XYDataset data) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
332 int series = data.getSeriesCount();
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
333 for (int i = 0; i < series; i++) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
334 int items = data.getItemCount(i);
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
335 for (int j = 0; j < items; j++) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
336 log.debug("write data: " + data.getX(i, j) + ", " + data.getY(i, j));
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
337 writer.writeNext(new String[] {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
338 data.getX(i, j).toString(),
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
339 data.getY(i, j).toString()});
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
340 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
341 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
342 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
343
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
344
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
345 public static int[] getSize(CallContext cc) {
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
346 int[] size = new int[2];
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
347
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
348 size[0] = (Integer) cc.getContextValue("chart.width");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
349 size[1] = (Integer) cc.getContextValue("chart.height");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
350
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
351 return size;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
352 }
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
353
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
354
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
355 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
356 * This method returns the anchor of the chart so that the chart is centered
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
357 * according to the given parameters.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
358 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
359 * @param mLeft Left margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
360 * @param mRight Right margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
361 * @param mBottom Bottom margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
362 * @param mTop Top margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
363 * @param width The complete width of the drawing area.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
364 * @param height The complete height of the drawing area.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
365 * @param chartWidth The width of the chart.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
366 * @param chartHeight The height of the chart.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
367 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
368 * @return an array that contains the anchor for a chart with the given
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
369 * parameters. The first value is the x point, the second value is the y
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
370 * point.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
371 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
372 public static double[] getCenteredAnchor(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
373 double mLeft, double mRight, double mBottom, double mTop,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
374 double width, double height,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
375 double chartWidth, double chartHeight
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
376 ) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
377 if (log.isDebugEnabled()) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
378 log.debug("Calculate centered origin...");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
379 log.debug("-> PDF width : " + width);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
380 log.debug("-> PDF height : " + height);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
381 log.debug("-> Chart width : " + chartWidth);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
382 log.debug("-> Chart height : " + chartHeight);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
383 log.debug("-> margin left : " + mLeft);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
384 log.debug("-> margin right : " + mRight);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
385 log.debug("-> margin bottom: " + mBottom);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
386 log.debug("-> margin top : " + mTop);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
387 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
388
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
389 double[] origin = new double[2];
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
390
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
391 double centerX = width / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
392 double centerY = height / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
393
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
394 origin[0] = centerX - chartWidth / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
395 origin[1] = centerY - chartHeight / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
396
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
397 origin[0] = origin[0] >= mLeft ? origin[0] : mLeft;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
398 origin[1] = origin[1] >= mTop ? origin[1] : mTop;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
399
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
400 if (log.isDebugEnabled()) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
401 log.debug("==> centered left origin: " + origin[0]);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
402 log.debug("==> centered top origin: " + origin[1]);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
403 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
404
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
405 return origin;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
406 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
407 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
408 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org