Mercurial > dive4elements > river
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 : |