annotate flys-artifacts/src/main/java/de/intevation/flys/exports/InfoGeneratorHelper.java @ 4241:49cb65d5932d

Improved the historical discharge calculation. The calculation now creates new HistoricalWQKms (new subclass of WQKms). Those WQKms are used to create new facets from (new) type 'HistoricalDischargeCurveFacet'. The chart generator is improved to support those facets.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 24 Oct 2012 14:34:35 +0200
parents 4ac581062c40
children e8a4d2fd25cc
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
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
7 import java.util.Date;
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
8
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9 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
10 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
11
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 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
13
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 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
15 import org.jfree.chart.JFreeChart;
2261
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
16 import org.jfree.chart.axis.DateAxis;
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
17 import org.jfree.chart.axis.NumberAxis;
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
18 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
19 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
20 import org.jfree.data.Range;
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
21 import org.jfree.data.xy.XYDataset;
647
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 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
24 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
25 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
26
2400
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
27 import de.intevation.flys.jfree.Bounds;
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
28
647
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 /**
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 * 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
32 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 * @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
34 */
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35 public class InfoGeneratorHelper {
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 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
38 Logger.getLogger(InfoGeneratorHelper.class);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40
2261
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
41 protected ChartGenerator generator;
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
42
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
43
2261
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
44 public InfoGeneratorHelper(ChartGenerator generator) {
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
45 this.generator = generator;
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48
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 * 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
51 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 * @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
53 * @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
54 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 * @return the info document.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 */
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
57 public Document createInfoDocument(
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
58 JFreeChart chart,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 ChartRenderingInfo info)
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60 {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61 logger.debug("InfoGeneratorHelper.createInfoDocument");
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63 Document doc = XMLUtils.newDocument();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 ElementCreator cr = new ElementCreator(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66 doc,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 ArtifactNamespaceContext.NAMESPACE_URI,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
68 ArtifactNamespaceContext.NAMESPACE_PREFIX);
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 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
71
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
72 chartinfo.appendChild(createAxesElements(cr, chart));
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
73 chartinfo.appendChild(createTransformationElements(cr, chart, info));
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75 doc.appendChild(chartinfo);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
77 return doc;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81 /**
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
82 * 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
83 * 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
84 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
85 * @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
86 * @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
87 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
88 * @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
89 */
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
90 protected Element createAxesElements(
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
91 ElementCreator cr,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
92 JFreeChart chart)
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
93 {
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
94 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
95
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
96 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
97
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
98 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
99
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
100 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
101 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
102 ValueAxis axis = plot.getDomainAxis(i);
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
103 XYDataset data = plot.getDataset(i);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
104
663
51172d56e8bc Only generate an axis element if a axis really exists.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 659
diff changeset
105 if (axis != null) {
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
106 Element e = createAxisElement(cr, axis, data, "domain", i);
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
107 axes.appendChild(e);
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 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
112 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
113 ValueAxis axis = plot.getRangeAxis(i);
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
114 XYDataset data = plot.getDataset(i);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
115
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
116 if (axis == null || data == null) {
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
117 logger.warn("Axis or dataset is empty at pos: " + i);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
118 continue;
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
119 }
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
120
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
121 Element e = createAxisElement(cr, axis, data, "range", i);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
122 axes.appendChild(e);
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
123 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
124
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
125 return axes;
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
126 }
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
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 * 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
131 * <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
132 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
133 * @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
134 * @param axis The axis that provides range information.
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
135 * @param dataset The dataset for min/max determination.
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
136 * @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
137 * @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
138 *
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
139 * @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
140 */
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
141 protected Element createAxisElement(
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
142 ElementCreator cr,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
143 ValueAxis axis,
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
144 XYDataset dataset,
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
145 String type,
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
146 int pos)
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
147 {
1944
21a4d2c677a1 Changed doOut signature, side effect from blackboard feature (to come).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1684
diff changeset
148 logger.debug("createAxisElement " + pos);
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
149 logger.debug("Axis is from type: " + axis.getClass());
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
150
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
151 Element e = cr.create(type);
1944
21a4d2c677a1 Changed doOut signature, side effect from blackboard feature (to come).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1684
diff changeset
152 cr.addAttr(e, "pos", String.valueOf(pos), true);
2261
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
153
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
154 if (axis instanceof DateAxis) {
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
155 prepareDateAxisElement(
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
156 e, cr, (DateAxis) axis, dataset, type, pos);
2261
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
157 }
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
158 else {
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
159 prepareNumberAxisElement(
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
160 e, cr, (NumberAxis) axis, dataset, type, pos);
2261
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
161 }
6aeb71517136 Registered an Info generator for historical discharge curves; made some adaptions in XYChartGenerator, ChartGenerator and TimeseriesChartGenerator.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1944
diff changeset
162
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
163 return e;
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
164 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
165
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
166
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
167 protected Element prepareNumberAxisElement(
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
168 Element e,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
169 ElementCreator cr,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
170 NumberAxis axis,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
171 XYDataset dataset,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
172 String type,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
173 int pos
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
174 ) {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
175 Range range = axis.getRange();
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
176
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
177 cr.addAttr(e, "from", String.valueOf(range.getLowerBound()), true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
178 cr.addAttr(e, "to", String.valueOf(range.getUpperBound()), true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
179 cr.addAttr(e, "axistype", "number", true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
180
1944
21a4d2c677a1 Changed doOut signature, side effect from blackboard feature (to come).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1684
diff changeset
181 Range[] rs = generator.getRangesForAxis(pos);
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
182 Range r = null;
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
183
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
184 if (type.equals("range")) {
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
185 r = rs[1];
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
186 }
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
187 else {
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
188 r = rs[0];
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
189 }
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
190
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
191 cr.addAttr(e, "min", String.valueOf(r.getLowerBound()), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
192 cr.addAttr(e, "max", String.valueOf(r.getUpperBound()), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
193
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
194 return e;
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
195 }
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
196
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
197
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
198 protected Element prepareDateAxisElement(
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
199 Element e,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
200 ElementCreator cr,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
201 DateAxis axis,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
202 XYDataset dataset,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
203 String type,
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
204 int pos
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
205 ) {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
206 Date from = axis.getMinimumDate();
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
207 Date to = axis.getMaximumDate();
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
208
2400
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
209 Bounds bounds = null;
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
210 if (type.equals("range")) {
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
211 bounds = generator.getYBounds(pos);
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
212 }
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
213 else {
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
214 bounds = generator.getXBounds(pos);
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
215 }
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
216
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
217 cr.addAttr(e, "axistype", "date", true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
218 cr.addAttr(e, "from", String.valueOf(from.getTime()), true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
219 cr.addAttr(e, "to", String.valueOf(to.getTime()), true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
220
2400
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
221 cr.addAttr(e, "min", bounds.getLower().toString(), true);
f55984858952 Enabled zooming for timeseries charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2273
diff changeset
222 cr.addAttr(e, "max", bounds.getUpper().toString(), true);
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
223
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
224 return e;
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
225 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
226
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
227
659
ab43f36f4af6 The ChartInfoGenerator appends axes range information to the document now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 657
diff changeset
228 /**
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
229 * 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
230 * 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
231 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
232 * @param cr The ElementCreator.
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
233 * @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
234 * @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
235 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
236 * @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
237 */
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
238 protected Element createTransformationElements(
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
239 ElementCreator cr,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
240 JFreeChart chart,
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
241 ChartRenderingInfo info)
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
242 {
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
243 logger.debug("InfoGeneratorHelper.createTransformationElements");
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
244
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
245 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
246
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
247 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
248
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
249 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
250 ValueAxis xAxis = plot.getDomainAxis();
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
251
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
252 if (xAxis == null) {
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
253 logger.error("There is no x axis in the chart!");
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
254 return null;
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
255 }
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
256
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
257 for (int i = 0, num = plot.getRangeAxisCount(); i < num; i++) {
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
258 ValueAxis yAxis = plot.getRangeAxis(i);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
259
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
260 if (yAxis == null) {
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
261 logger.warn("No y axis at pos " + i + " existing.");
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
262 continue;
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
263 }
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
264
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
265 Element matrix = createTransformationElement(
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
266 cr, xAxis, yAxis, dataArea, i);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
267
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
268 tf.appendChild(matrix);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
269 }
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
270
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
271 return tf;
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
272 }
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
273
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
274
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
275 /**
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
276 * Creates an element that contains values used to transform coordinates
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
277 * of a coordinate system A into a coordinate system B.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
278 *
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
279 * @param cr The ElementCreator.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
280 * @param xAxis The x axis of the target coordinate system.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
281 * @param yAxis The y axis of the target coordinate system.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
282 * @param dataArea The pixel coordinates of the chart image.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
283 * @param pos The dataset position.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
284 *
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
285 * @return an element that contains transformation matrix values.
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
286 */
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
287 protected Element createTransformationElement(
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
288 ElementCreator cr,
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
289 ValueAxis xAxis,
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
290 ValueAxis yAxis,
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
291 Rectangle2D dataArea,
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
292 int pos)
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
293 {
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
294 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
295
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
296 Element matrix = cr.create("matrix");
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
297
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
298 cr.addAttr(matrix, "pos", String.valueOf(pos), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
299 cr.addAttr(matrix, "sx", String.valueOf(tm[0]), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
300 cr.addAttr(matrix, "sy", String.valueOf(tm[1]), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
301 cr.addAttr(matrix, "tx", String.valueOf(tm[2]), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
302 cr.addAttr(matrix, "ty", String.valueOf(tm[3]), true);
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
303
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
304 if (xAxis instanceof DateAxis) {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
305 cr.addAttr(matrix, "xtype", "date", true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
306 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
307 else {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
308 cr.addAttr(matrix, "xtype", "number", true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
309 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
310
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
311 if (yAxis instanceof DateAxis) {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
312 cr.addAttr(matrix, "ytype", "date", true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
313 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
314 else {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
315 cr.addAttr(matrix, "ytype", "number", true);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
316 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
317
673
b22f21b173a7 Changed the zoom process - the values in the chart request document are percentual values that apply to every axis.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 663
diff changeset
318 return matrix;
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
319 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
320
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
321
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
322 /**
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
323 * 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
324 * 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
325 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
326 * @param dataArea The rectangle that contains the data points of the chart.
3270
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2400
diff changeset
327 * @param xAxis The x axis.
4ac581062c40 Fix various documentation issues.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2400
diff changeset
328 * @param yAxis The y axis.
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
329 *
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
330 * @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
331 */
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
332 protected static double[] createTransformationMatrix(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
333 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
334 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
335 ValueAxis yAxis)
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
336 {
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
337 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
338
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
339 double offsetX = dataArea.getX();
657
ac1399d325e9 Removed asymmetrical "- 1" from width calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 648
diff changeset
340 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
341 double offsetY = dataArea.getY();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
342 double height = dataArea.getHeight();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
343
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
344 Range xRange = getRangeFromAxis(xAxis);
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
345 Range yRange = getRangeFromAxis(yAxis);
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
346
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
347 double lowerX = xRange.getLowerBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
348 double upperX = xRange.getUpperBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
349 double lowerY = yRange.getLowerBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
350 double upperY = yRange.getUpperBound();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
351
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
352 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
353 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
354
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
355 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
356 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
357 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
358 }
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
359
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
360 double dMoveX = upperX - lowerX;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
361 double fMoveX = width * lowerX;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
362 double dMoveY = lowerY - upperY;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
363 double fMoveY = height * upperY;
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
364
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
365 AffineTransform t1 = AffineTransform.getTranslateInstance(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
366 offsetX - ( fMoveX / dMoveX ),
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
367 offsetY - ( fMoveY / dMoveY ) );
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
368
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
369 AffineTransform t2 = AffineTransform.getScaleInstance(
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
370 width / (upperX - lowerX),
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
371 height / (lowerY - upperY));
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
372
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
373 t1.concatenate(t2);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
374
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
375 try {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
376 t1.invert();
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
377
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
378 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
379 t1.getMatrix(c);
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
380
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
381 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
382 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
383 catch (NoninvertibleTransformException e) {
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
384 // do nothing
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
385 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
386 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
387
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
388 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
389 }
2273
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
390
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
391
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
392 protected static Range getRangeFromAxis(ValueAxis axis) {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
393 if (axis instanceof DateAxis) {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
394 DateAxis dAxis = (DateAxis) axis;
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
395 Date min = dAxis.getMinimumDate();
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
396 Date max = dAxis.getMaximumDate();
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
397
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
398 return new Range(min.getTime(), max.getTime());
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
399 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
400 else {
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
401 return axis.getRange();
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
402 }
7b8d59436be3 Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2261
diff changeset
403 }
647
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
404 }
bb484489d3df Introduced a new output generators for creating chart info documents.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
405 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org