annotate flys-artifacts/src/main/java/de/intevation/flys/exports/ChartExportHelper.java @ 4242:448cbd8708d5

Added new classes for the last commit.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 24 Oct 2012 14:44:12 +0200
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