annotate artifacts/src/main/java/org/dive4elements/river/exports/ChartExportHelper.java @ 9118:431f1c269be5

Veg-Zone Table improved, State change data recovery;
author gernotbelger
date Mon, 04 Jun 2018 19:38:59 +0200
parents ffd4e2b0381c
children 36c80c7fd02f
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5862
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5862
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5862
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5862
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5862
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5862
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3284
diff changeset
9 package org.dive4elements.river.exports;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import com.lowagie.text.Document;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import com.lowagie.text.DocumentException;
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
13 import com.lowagie.text.ExceptionConverter;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import com.lowagie.text.PageSize;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15 import com.lowagie.text.Rectangle;
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
16 import com.lowagie.text.pdf.BaseFont;
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
17 import com.lowagie.text.pdf.DefaultFontMapper;
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
18 import com.lowagie.text.pdf.DefaultFontMapper.BaseFontParameters;
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
19 import com.lowagie.text.pdf.FontMapper;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 import com.lowagie.text.pdf.PdfContentByte;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21 import com.lowagie.text.pdf.PdfTemplate;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 import com.lowagie.text.pdf.PdfWriter;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
24 import java.awt.Font;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25 import java.awt.Graphics2D;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 import java.awt.Transparency;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 import java.awt.geom.Rectangle2D;
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
29 import java.awt.image.BufferedImage;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 import java.io.IOException;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 import java.io.OutputStream;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 import java.io.OutputStreamWriter;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 import java.io.UnsupportedEncodingException;
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
34 import java.text.DateFormat;
7046
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
35 import java.text.NumberFormat;
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
36 import java.util.Date;
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
37 import java.util.Locale;
7893
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
38 import java.util.Map;
7046
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
39
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 714
diff changeset
40 import org.jfree.chart.ChartRenderingInfo;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 import javax.imageio.ImageIO;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
44 import au.com.bytecode.opencsv.CSVWriter;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
45
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 import org.apache.batik.svggen.SVGGraphics2D;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47 import org.apache.batik.svggen.SVGGraphics2DIOException;
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 import org.apache.log4j.Logger;
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 import org.jfree.chart.JFreeChart;
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
52 import org.jfree.chart.plot.XYPlot;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
53 import org.jfree.data.xy.XYDataset;
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
54 import org.dive4elements.artifacts.Artifact;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3284
diff changeset
55 import org.dive4elements.artifacts.CallContext;
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3284
diff changeset
57 import org.dive4elements.artifacts.common.utils.XMLUtils;
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
58 import org.dive4elements.river.FLYS;
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
59 import org.dive4elements.river.artifacts.resources.Resources;
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
60 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
7893
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
61 import org.dive4elements.river.jfree.XYMetaSeriesCollection;
7046
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
62 import org.dive4elements.river.utils.Formatter;
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
63
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66 * 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
67 * into specific formats.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
68 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69 * @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
70 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 public class ChartExportHelper {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
73 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
74
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
75 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
76
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
77 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
78
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
79 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
80
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
82 * 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
83 */
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
84 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
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 * 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
88 */
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
89 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
90
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
91 /** The default separator for the CSV export. */
7045
1f6c0915a58d issue971: Use ";" as CSV separator also in ChartExportHelper, with the
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
92 public static final char DEFAULT_CSV_SEPARATOR = ';';
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
93
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
94
152
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 * Logger used for logging with log4j.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98 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
99
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 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102 * 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
103 * <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
104 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
105 * @param out OutputStream
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
106 * @param chart JFreeChart object to be exported.
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2231
diff changeset
107 * @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
108 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
109 * @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
110 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111 public static void exportImage(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112 OutputStream out,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
113 JFreeChart chart,
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
114 CallContext cc
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 )
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 throws IOException
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 log.info("export chart as png");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 714
diff changeset
120 ChartRenderingInfo info = new ChartRenderingInfo();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 714
diff changeset
121
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
122 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
123
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
124 int[] size = getSize(cc);
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
125
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
126 ImageIO.write(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127 chart.createBufferedImage(
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
128 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
129 ),
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 format,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131 out
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
132 );
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
133 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
135
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
136 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
137 * 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
138 * <code>OutputStream</code>.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
139 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 * @param out OutputStream
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141 * @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
142 * @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
143 * parameters.
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 public static void exportSVG(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146 OutputStream out,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
147 JFreeChart chart,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
148 CallContext context
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
149 ) {
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
150 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
151
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 log.info("export chart as svg");
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 if (encoding == null)
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155 encoding = DEFAULT_ENCODING;
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 org.w3c.dom.Document document = XMLUtils.newDocument();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 SVGGraphics2D graphics = new SVGGraphics2D(document);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
159
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
160 int[] size = getSize(context);
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
161
2160
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
162 ChartRenderingInfo info = new ChartRenderingInfo();
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
163
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
164 chart.draw(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
165 graphics,
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
166 new Rectangle2D.Double(0.0D, 0.0D,size[0],size[1]),
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
167 info);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169 try {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 graphics.stream(new OutputStreamWriter(out, encoding));
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
171 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
172 catch (SVGGraphics2DIOException svge) {
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
173 log.error(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
174 "Error while writing svg export to output stream.", svge);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
175 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
176 catch (UnsupportedEncodingException uee) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
177 log.error("Unsupported encoding: " + encoding, uee);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
178 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
179 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
180
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
182 /**
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
183 * 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
184 * <code>OutputStream</code>.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186 * @param out OutputStream
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
187 * @param chart JFreeChart
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
188 */
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189 public static void exportPDF(
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
190 OutputStream out,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
191 JFreeChart chart,
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
192 CallContext cc
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
193 ) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
194 log.info("export chart as pdf.");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
195
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
196 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
197
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
198 if (pageFormat == null)
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
199 pageFormat = DEFAULT_PAGE_SIZE;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
200
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2231
diff changeset
201 // Max size of the chart.
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
202 Rectangle page = PageSize.getRectangle(pageFormat);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
203 float pageWidth = page.getWidth();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
204 float pageHeight = page.getHeight();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
205
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2231
diff changeset
206 // The chart width.
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
207 int[] size = getSize(cc);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
208
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
209 boolean landscape = size[0] > size[1];
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
210
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
211 float width = 0;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
212 float height = 0;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
213 if (landscape) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
214 width = pageHeight;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
215 height = pageWidth;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
216 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
217 else {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
218 width = pageWidth;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
219 height = pageHeight;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
220 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
221
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
222 float marginLeft = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
223 "chart.marginLeft");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
224
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
225 float marginRight = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
226 "chart.marginRight");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
227
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
228 float marginTop = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
229 "chart.marginTop");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
230
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
231 float marginBottom = (Float) cc.getContextValue(
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
232 "chart.marginBottom");
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
233
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
234 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
235 if (size[0] > spaceX) {
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
236 log.warn(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
237 "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
238 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
239 size[0] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
240 size[1] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
241 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
242 }
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 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
245 if (size[1] > spaceY) {
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
246 log.warn(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
247 "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
248 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
249 size[0] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
250 size[1] *= ratio;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
251 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
252 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
253
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
254 Document document = null;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
255 if (landscape) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
256 document = new Document(page.rotate());
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
257 log.debug("Create landscape pdf.");
7700
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
258 } else {
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
259 document = new Document(page);
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
260 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
261
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
262 try {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
263 PdfWriter writer = PdfWriter.getInstance(document, out);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
264
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
265 document.addSubject(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
266 chart.getTitle() != null ? chart.getTitle().getText() : "");
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
267 document.addCreationDate();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
268 document.open();
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
269
7700
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
270 try {
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
271 PdfContentByte content = writer.getDirectContent();
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
272
7700
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
273 PdfTemplate template = content.createTemplate(width, height);
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
274
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
275 final FontMapper mapper = new ChartExportfontMapper();
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
276
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
277 final Graphics2D graphics = template.createGraphics(width, height );
2160
8428de5846e8 Employ ChartRenderingInfo when creating svg/pdf exports.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1735
diff changeset
278
7700
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
279 double[] origin = getCenteredAnchor(
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
280 marginLeft, marginRight, marginBottom, marginTop,
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
281 width, height,
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
282 size[0], size[1]);
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
283
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
284 Rectangle2D area = new Rectangle2D.Double(
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
285 origin[0], origin[1], size[0], size[1]);
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
286
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
287 ChartRenderingInfo info = new ChartRenderingInfo();
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
288 chart.draw(graphics, area, info);
7700
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
289
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
290 graphics.dispose();
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
291 content.addTemplate(template, 0f, 0f);
9118
431f1c269be5 Veg-Zone Table improved, State change data recovery;
gernotbelger
parents: 9106
diff changeset
292
7700
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
293 }
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
294 finally {
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
295 document.close();
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
296 }
9211f8cafe8a (issue1559) Improve Exception handling and allow null titles
Andre Heinecke <aheinecke@intevation.de>
parents: 7688
diff changeset
297 } catch (DocumentException de) {
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
298 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
299 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
300 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
301
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
302
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
303 /**
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
304 * A method to export a CSV file to an
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
305 * <code>OutputStream</code>.
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
306 *
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
307 * @param out OutputStream
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
308 * @param chart JFreeChart containing the data.
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
309 * @param context The CallContext object that contains extra parameters.
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
310 */
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
311 public static void exportCSV(
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
312 OutputStream out,
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
313 JFreeChart chart,
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
314 CallContext context)
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
315 {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
316 log.debug("export chart as CSV");
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
317
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
318 try {
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
319 // FIXME: decide: to BOM or not to BOM
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
320 // final byte[] BOM = new byte[] {(byte)0xEF, (byte)0xBB, (byte)0xBF};
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
321 // out.write(BOM);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
322
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
323 final CSVWriter writer = new CSVWriter(
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
324 new OutputStreamWriter(
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
325 out,
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
326 DEFAULT_ENCODING),
7688
9509359c8db8 (issue1632) Use DOS line endings
Andre Heinecke <aheinecke@intevation.de>
parents: 7607
diff changeset
327 DEFAULT_CSV_SEPARATOR, '"', '\\', "\r\n");
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
328
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
329 NumberFormat format = Formatter.getCSVFormatter(context);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
330
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
331 XYPlot plot = chart.getXYPlot();
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
332 int count = plot.getDatasetCount();
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
333 for (int i = 0; i < count; i++) {
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
334 XYDataset data = plot.getDataset(i);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
335 int scount = data.getSeriesCount();
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
336 for (int j = 0; j < scount; j++) {
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
337 Comparable seriesKey = data.getSeriesKey(j);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
338 log.debug("series key: " + seriesKey.toString());
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
339 Map<String, String> metaData = null;
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
340 if (data instanceof XYMetaSeriesCollection) {
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
341 metaData = ((XYMetaSeriesCollection) data).getMetaData();
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
342 }
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
343 writeCSVHeader(writer, seriesKey.toString(), metaData);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
344 writeCSVData(writer, data, format);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
345 }
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
346 }
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
347 writer.close();
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
348 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
349 catch(UnsupportedEncodingException uee) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
350 log.warn("Wrong encoding for CSV export.");
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
351 return;
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
352 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
353 catch(IOException ioe) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
354 log.error("Writing CSV export failed!");
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
355 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
356 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
357
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
358
7893
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
359 protected static void writeCSVHeader(
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
360 CSVWriter writer,
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
361 String key,
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
362 Map<String, String> metaData)
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
363 {
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
364 writer.writeNext(new String[] {"#"});
7893
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
365 if (metaData != null) {
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
366 writer.writeNext(new String[] {"# " + key});
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
367 for (Map.Entry<String, String> entry: metaData.entrySet()) {
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
368 if (entry.getKey().equals("X") || entry.getKey().equals("Y")) {
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
369 continue;
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
370 }
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
371 writer.writeNext(new String[]
7992
03fc4cdb793c Separate meta data key and value by ':'.
Raimund Renkert <rrenkert@intevation.de>
parents: 7893
diff changeset
372 {"# " + entry.getKey() + ": " + entry.getValue()});
7893
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
373 }
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
374 writer.writeNext(new String[] {"#"});
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
375 writer.writeNext(new String[] {
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
376 metaData.get("X") != null ? metaData.get("X") : "X",
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
377 metaData.get("Y") != null ? metaData.get("Y") : "Y"});
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
378 }
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
379 else {
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
380 writer.writeNext(new String[] {"# " + key});
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
381 writer.writeNext(new String[] {"#"});
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
382 writer.writeNext(new String[] {"X", "Y"});
56e7e6c18c26 Use the metadata to write csv header when exporting a chart.
Raimund Renkert <rrenkert@intevation.de>
parents: 7700
diff changeset
383 }
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
384 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
385
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
386
7047
b5e9b8b5c8d6 issue1493: Use other numberformat for csv data from diagram.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7046
diff changeset
387 /** Get x/y data from axis set and write it, on pair per line. */
b5e9b8b5c8d6 issue1493: Use other numberformat for csv data from diagram.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7046
diff changeset
388 protected static void writeCSVData(
b5e9b8b5c8d6 issue1493: Use other numberformat for csv data from diagram.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7046
diff changeset
389 CSVWriter writer, XYDataset data, NumberFormat format) {
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
390 int series = data.getSeriesCount();
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
391 for (int i = 0; i < series; i++) {
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
392 int items = data.getItemCount(i);
7607
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
393 double lastX = java.lang.Double.MAX_VALUE;
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
394 double lastY = java.lang.Double.MAX_VALUE;
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
395
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
396 for (int j = 0; j < items; j++) {
7607
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
397 Number x = data.getX(i, j);
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
398 Number y = data.getY(i, j);
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
399 double xVal = data.getXValue(i, j);
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
400 double yVal = data.getYValue(i, j);
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
401
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
402 if (lastX == xVal && lastY == yVal) {
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
403 // comparing equality is ok here as we want
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
404 // to find data duplicates like they are added
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
405 // for example by the StyledSeriesBuilder in
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
406 // addStepPointsKmQ
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
407 log.debug("removing duplicate point in series");
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
408 continue;
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
409 }
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
410 lastX = xVal;
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
411 lastY = yVal;
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
412
7094
99527ef3f151 Minor refactoring for 1493.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7047
diff changeset
413 String xString;
99527ef3f151 Minor refactoring for 1493.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7047
diff changeset
414 String yString;
7151
491b645123b6 issue1493: Also transform NaN X values to empty string.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7095
diff changeset
415
7046
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
416 try {
7607
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
417 xString = java.lang.Double.isNaN(xVal)
7151
491b645123b6 issue1493: Also transform NaN X values to empty string.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7095
diff changeset
418 ? ""
7607
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
419 : format.format(x);
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
420 yString = java.lang.Double.isNaN(yVal)
7095
bdadffad35b1 issue1493: Don't let NaNs slip through csv export.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7094
diff changeset
421 ? ""
7607
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
422 : format.format(y);
7046
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
423 }
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
424 catch (NumberFormatException nfe) {
7607
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
425 xString = x.toString();
ef99781bcec7 (issue1667) Remove duplicate points in the same series in Diagram CSV export
Andre Heinecke <aheinecke@intevation.de>
parents: 7151
diff changeset
426 yString = y.toString();
7046
50b9959330de issue971: Bring a formatter in (a bad) place.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7045
diff changeset
427 }
7094
99527ef3f151 Minor refactoring for 1493.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7047
diff changeset
428 writer.writeNext(new String[] {
99527ef3f151 Minor refactoring for 1493.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7047
diff changeset
429 xString,
99527ef3f151 Minor refactoring for 1493.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7047
diff changeset
430 yString});
2231
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
431 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
432 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
433 }
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
434
5648b5b34ae2 Issue 466.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2160
diff changeset
435
1735
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
436 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
437 int[] size = new int[2];
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
438
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
439 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
440 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
441
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
442 return size;
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
443 }
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
444
5966a20fc72c Enabled support for PDF and SVG chart exports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1036
diff changeset
445
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
446 /**
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8702
diff changeset
447 * Returns the anchor of the chart so that the chart is centered
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
448 * according to the given parameters.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
449 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
450 * @param mLeft Left margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
451 * @param mRight Right margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
452 * @param mBottom Bottom margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
453 * @param mTop Top margin
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
454 * @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
455 * @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
456 * @param chartWidth The width of the chart.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
457 * @param chartHeight The height of the chart.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
458 *
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
459 * @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
460 * 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
461 * point.
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
462 */
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
463 private static double[] getCenteredAnchor(
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
464 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
465 double width, double height,
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
466 double chartWidth, double chartHeight
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
467 ) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
468 if (log.isDebugEnabled()) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
469 log.debug("Calculate centered origin...");
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
470 log.debug("-> PDF width : " + width);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
471 log.debug("-> PDF height : " + height);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
472 log.debug("-> Chart width : " + chartWidth);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
473 log.debug("-> Chart height : " + chartHeight);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
474 log.debug("-> margin left : " + mLeft);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
475 log.debug("-> margin right : " + mRight);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
476 log.debug("-> margin bottom: " + mBottom);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
477 log.debug("-> margin top : " + mTop);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
478 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
479
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
480 double[] origin = new double[2];
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
481
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
482 double centerX = width / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
483 double centerY = height / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
484
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
485 origin[0] = centerX - chartWidth / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
486 origin[1] = centerY - chartHeight / 2;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
487
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
488 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
489 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
490
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
491 if (log.isDebugEnabled()) {
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
492 log.debug("==> centered left origin: " + origin[0]);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
493 log.debug("==> centered top origin: " + origin[1]);
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
494 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
495
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
496 return origin;
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
497 }
9106
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
498
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
499
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
500 public static String createMetadataSubtitle(Artifact artifact, final CallContext context, final String riverName) {
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
501
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
502 final String version = FLYS.VERSION;
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
503 final String user = CalculationUtils.findArtifactUser(context, artifact);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
504 final Locale locale = Resources.getLocale(context.getMeta());
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
505 final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
506 final String dateText = df.format(new Date());
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
507
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
508 return Resources.getMsg(context.getMeta(), "chart.subtitle.metadata", "default", version, user, dateText, riverName);
ffd4e2b0381c Added metadata subtitle to all chart export.
gernotbelger
parents: 8856
diff changeset
509 }
152
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
510 }
956445dd601d Added a helper class to export charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
511 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org