annotate flys-artifacts/src/main/java/de/intevation/flys/exports/InfoGeneratorHelper.java @ 663:51172d56e8bc

Only generate an axis element if a axis really exists. flys-artifacts/trunk@2075 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 08 Jun 2011 10:19:23 +0000
parents ab43f36f4af6
children b22f21b173a7
rev   line source
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.exports;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
3 import java.awt.geom.AffineTransform;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 import java.awt.geom.NoninvertibleTransformException;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 import java.awt.geom.Rectangle2D;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 import org.w3c.dom.Document;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import org.w3c.dom.Element;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10 import org.apache.log4j.Logger;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import org.jfree.chart.ChartRenderingInfo;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import org.jfree.chart.JFreeChart;
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
14 import org.jfree.chart.axis.ValueAxis;
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15 import org.jfree.chart.plot.XYPlot;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16 import org.jfree.data.Range;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18 import de.intevation.artifacts.common.ArtifactNamespaceContext;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19 import de.intevation.artifacts.common.utils.XMLUtils;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23 /**
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 * This class helps generating chart info documents.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27 */
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 public class InfoGeneratorHelper {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 private static final Logger logger =
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 Logger.getLogger(InfoGeneratorHelper.class);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34 private InfoGeneratorHelper() {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38 /**
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 * Triggers the creation of the chart info document.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 * @param chart The JFreeChart chart.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 * @param info An info object that has been created while chart creation.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 * @return the info document.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 */
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 public static Document createInfoDocument(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47 JFreeChart chart,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48 ChartRenderingInfo info)
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50 logger.debug("InfoGeneratorHelper.createInfoDocument");
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 Document doc = XMLUtils.newDocument();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54 ElementCreator cr = new ElementCreator(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 doc,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 ArtifactNamespaceContext.NAMESPACE_URI,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57 ArtifactNamespaceContext.NAMESPACE_PREFIX);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
58
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 Element chartinfo = cr.create("chartinfo");
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
61 chartinfo.appendChild(createAxesElements(cr, chart));
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62 chartinfo.appendChild(createTransformationElement(cr, chart, info));
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64 doc.appendChild(chartinfo);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66 return doc;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
68
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70 /**
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
71 * This method create a axes element that contains all domain and range
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
72 * axes of the given chart.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
73 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
74 * @param cr The ElementCreator.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
75 * @param chart The chart that provides range information of its axes.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
76 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
77 * @return an element with axes information.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
78 */
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
79 protected static Element createAxesElements(
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
80 ElementCreator cr,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
81 JFreeChart chart)
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
82 {
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
83 logger.debug("InfoGeneratorHelper.createRangeElements");
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
84
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
85 Element axes = cr.create("axes");
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
86
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
87 XYPlot plot = (XYPlot) chart.getPlot();
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
88
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
89 int dAxisCount = plot.getDomainAxisCount();
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
90 for (int i = 0; i < dAxisCount; i++) {
663
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
91 ValueAxis axis = plot.getDomainAxis(i);
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
92 if (axis != null) {
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
93 Element e = createAxisElement(cr, axis, "domain", i);
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
94 axes.appendChild(e);
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
95 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
96 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
97
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
98 int rAxisCount = plot.getRangeAxisCount();
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
99 for (int i = 0; i < rAxisCount; i++) {
663
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
100 ValueAxis axis = plot.getRangeAxis(i);
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
101 if (axis != null) {
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
102 Element e = createAxisElement(cr, axis, "range", i);
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
103 axes.appendChild(e);
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
104 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
105 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
106
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
107 return axes;
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
108 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
109
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
110
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
111 /**
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
112 * This method create a axis element for a given <i>axis</i> and
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
113 * <i>type</i>. Type can be one of 'domain' or 'range'.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
114 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
115 * @param cr The ElementCreator
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
116 * @param axis The axis that provides range information.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
117 * @param type The axis type ('domain' or 'range').
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
118 * @param pos The position in the chart.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
119 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
120 * @return An element that contains range information of a given axis.
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
121 */
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
122 protected static Element createAxisElement(
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
123 ElementCreator cr,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
124 ValueAxis axis,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
125 String type,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
126 int pos)
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
127 {
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
128 Range range = axis.getRange();
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
129
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
130 Element e = cr.create(type);
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
131 cr.addAttr(e, "pos", String.valueOf(pos), true);
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
132 cr.addAttr(e, "from", String.valueOf(range.getLowerBound()), true);
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
133 cr.addAttr(e, "to", String.valueOf(range.getUpperBound()), true);
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
134
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
135 return e;
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
136 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
137
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
138
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
139 /**
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 * This method appends the values of a transformation matrix to transform
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141 * image pixel coordinates into chart coordinates.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 * @param cr The ElementCreator.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 * @param chart The chart object.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 * @param info The ChartRenderingInfo that is filled while chart creation.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
147 * @return an element that contains one or more transformation matrix.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
148 */
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
149 protected static Element createTransformationElement(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150 ElementCreator cr,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151 JFreeChart chart,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 ChartRenderingInfo info)
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
153 {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 logger.debug("InfoGeneratorHelper.createTransformationElement");
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
156 Element tf = cr.create("transformation-matrix");
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
157
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 Rectangle2D dataArea = info.getPlotInfo().getDataArea();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
159
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
160 XYPlot plot = (XYPlot) chart.getPlot();
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
161 ValueAxis xAxis = plot.getDomainAxis();
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
162 ValueAxis yAxis = plot.getRangeAxis();
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
163
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
164 double[] tm = createTransformationMatrix(dataArea, xAxis, yAxis);
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
165
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
166 cr.addAttr(tf, "sx", String.valueOf(tm[0]), true);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 cr.addAttr(tf, "sy", String.valueOf(tm[1]), true);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168 cr.addAttr(tf, "tx", String.valueOf(tm[2]), true);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169 cr.addAttr(tf, "ty", String.valueOf(tm[3]), true);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
171 return tf;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
172 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
173
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
174
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
175 /**
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
176 * This method determines a transformation matrix to transform pixel
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
177 * coordinates of the chart image into chart coordinates.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
178 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
179 * @param dataArea The rectangle that contains the data points of the chart.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
180 * @param xRange The x axis range.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181 * @param yRange The y axis range.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
182 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
183 * @return a double array as follows: [sx, sy, tx, ty].
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
184 */
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185 protected static double[] createTransformationMatrix(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186 Rectangle2D dataArea,
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
187 ValueAxis xAxis,
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
188 ValueAxis yAxis)
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189 {
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
190 logger.debug("InfoGeneratorHelper.createTransformationMatrix");
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
191
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
192 double offsetX = dataArea.getX();
657
ac1399d325e9 Removed asymmetrical "- 1" from width calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 648
diff changeset
193 double width = dataArea.getWidth();
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
194 double offsetY = dataArea.getY();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
195 double height = dataArea.getHeight();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
196
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
197 Range xRange = xAxis.getRange();
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
198 Range yRange = yAxis.getRange();
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
199
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
200 double lowerX = xRange.getLowerBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
201 double upperX = xRange.getUpperBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
202 double lowerY = yRange.getLowerBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
203 double upperY = yRange.getUpperBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
204
648
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
205 if (xAxis.isInverted()) {
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
206 logger.info("X-Axis is inverted!");
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
207
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
208 double tmp = upperX;
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
209 upperX = lowerX;
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
210 lowerX = tmp;
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
211 }
d4c4fefb095b The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 647
diff changeset
212
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
213 double dMoveX = upperX - lowerX;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
214 double fMoveX = width * lowerX;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
215 double dMoveY = lowerY - upperY;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
216 double fMoveY = height * upperY;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
217
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
218 AffineTransform t1 = AffineTransform.getTranslateInstance(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
219 offsetX - ( fMoveX / dMoveX ),
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
220 offsetY - ( fMoveY / dMoveY ) );
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
221
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
222 AffineTransform t2 = AffineTransform.getScaleInstance(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
223 width / (upperX - lowerX),
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
224 height / (lowerY - upperY));
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
225
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
226 t1.concatenate(t2);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
227
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
228 try {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
229 t1.invert();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
230
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
231 double[] c = new double[6];
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
232 t1.getMatrix(c);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
233
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
234 return new double[] { c[0], c[3], c[4], c[5] };
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
235 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
236 catch (NoninvertibleTransformException e) {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
237 // do nothing
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
238 logger.warn("Matrix is not invertible.");
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
239 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
240
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
241 return new double[] { 1d, 1d, 0d, 0d };
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
242 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
243 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
244 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org