annotate artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java @ 8338:ac7cb15e1946

Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
author "Tom Gottfried <tom@intevation.de>"
date Fri, 26 Sep 2014 18:23:45 +0200
parents e87a993c6611
children a82f24b773e7
rev   line source
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
3 *
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
7 */
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
8 package org.dive4elements.river.exports;
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
9
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
10 import java.awt.Font;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
11
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
12 import org.apache.log4j.Logger;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
13 import org.dive4elements.river.exports.injector.InjectorConstants;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
14 import org.dive4elements.river.jfree.AxisDataset;
8338
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
15 import org.dive4elements.river.jfree.DoubleBounds;
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
16 import org.jfree.chart.axis.NumberAxis;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
17 import org.jfree.chart.plot.XYPlot;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
18 import org.jfree.data.Range;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
19
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
20 public class DischargeGenerator
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
21 extends DiagramGenerator
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
22 implements InjectorConstants
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
23 {
8323
c44775cd79f2 Use right logger in DischargeGenerator.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8320
diff changeset
24 private static Logger log = Logger.getLogger(DischargeGenerator.class);
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
25
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
26 public DischargeGenerator() {
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
27 }
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
28
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
29 @Override
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
30 public void addDatasets(XYPlot plot) {
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
31 super.addDatasets(plot);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
32
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
33 Object pnp = context.getContextValue(PNP);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
34 if (!(pnp instanceof Number)) {
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
35 return;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
36 }
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
37
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
38 double pnpValue = ((Number)pnp).doubleValue();
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
39
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
40 int wAxisIndex = diagramAttributes.getAxisIndex("W");
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
41 if (wAxisIndex == -1) {
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
42 log.warn("No W axis found.");
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
43 return;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
44 }
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
45
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
46 AxisDataset data = datasets.get(wAxisIndex);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
47 if (data == null) {
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
48 // No W axis
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
49 return;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
50 }
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
51
8330
e87a993c6611 Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents: 8324
diff changeset
52 if (data.getRange() == null) {
e87a993c6611 Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents: 8324
diff changeset
53 // No active datasets
e87a993c6611 Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents: 8324
diff changeset
54 return;
e87a993c6611 Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents: 8324
diff changeset
55 }
e87a993c6611 Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents: 8324
diff changeset
56
8338
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
57 Range axisRange = inCm(
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
58 plot.getRangeAxis(wAxisIndex).getRange(),
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
59 pnpValue
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
60 );
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
61 Range dataRange = inCm(data.getRange(), pnpValue);
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
62
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
63 // Do we have an index for W in cm?
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
64 NumberAxis wInCmAxis = createWinCMAxis(wAxisIndex);
8338
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
65 wInCmAxis.setRange(axisRange);
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
66
8338
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
67 int wInCmAxisIndex = plot.getRangeAxisCount();
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
68 plot.setRangeAxis(wInCmAxisIndex, wInCmAxis);
ac7cb15e1946 Scale second W-axis in cm according to first axis, which is expanded relative to the data, and set bounds for zooming purposes (plus a bit of cleanup in DiagramGenerator).
"Tom Gottfried <tom@intevation.de>"
parents: 8330
diff changeset
69 combineYBounds(new DoubleBounds(dataRange), wInCmAxisIndex);
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
70 }
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
71
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
72 private static Range inCm(Range r, double pnpValue) {
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
73 double l = r.getLowerBound();
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
74 double u = r.getUpperBound();
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
75 l = (l - pnpValue)*100d;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
76 u = (u - pnpValue)*100d;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
77 return new Range(l, u);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
78 }
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
79
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
80 private NumberAxis createWinCMAxis(int wAxisIndex) {
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
81
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
82 Font labelFont = new Font(
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
83 DEFAULT_FONT_NAME,
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
84 Font.BOLD,
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
85 getYAxisFontSize(wAxisIndex));
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
86
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
87 String axisName = "W.in.cm";
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
88
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
89 // TODO: I18N
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
90 IdentifiableNumberAxis axis = new IdentifiableNumberAxis(
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
91 axisName, "W.in.cm");
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
92
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
93 axis.setAutoRangeIncludesZero(false);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
94 axis.setLabelFont(labelFont);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
95 axis.setTickLabelFont(labelFont);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
96
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
97 return axis;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
98 }
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
99 }
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
100 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org