Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java @ 8353:a82f24b773e7
Use i18n string for w in cm axis.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 01 Oct 2014 13:37:27 +0200 |
parents | ac7cb15e1946 |
children | bc803f4b6784 |
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; |
8353
a82f24b773e7
Use i18n string for w in cm axis.
Raimund Renkert <rrenkert@intevation.de>
parents:
8338
diff
changeset
|
13 import org.dive4elements.river.artifacts.resources.Resources; |
8320
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.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
|
15 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
|
16 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
|
17 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
|
18 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
|
19 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
|
20 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
21 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
|
22 extends DiagramGenerator |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
23 implements InjectorConstants |
8165
cfb3a4d0c637
Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
24 { |
8323
c44775cd79f2
Use right logger in DischargeGenerator.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8320
diff
changeset
|
25 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
|
26 |
8353
a82f24b773e7
Use i18n string for w in cm axis.
Raimund Renkert <rrenkert@intevation.de>
parents:
8338
diff
changeset
|
27 private String I18N_AXIS_LABEL = "chart.discharge.curve.yaxis.cm.label"; |
a82f24b773e7
Use i18n string for w in cm axis.
Raimund Renkert <rrenkert@intevation.de>
parents:
8338
diff
changeset
|
28 |
8165
cfb3a4d0c637
Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
29 public DischargeGenerator() { |
cfb3a4d0c637
Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
30 } |
8320
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
31 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
32 @Override |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
33 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
|
34 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
|
35 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
36 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
|
37 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
|
38 return; |
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 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
41 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
|
42 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
43 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
|
44 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
|
45 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
|
46 return; |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
47 } |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
48 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
49 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
|
50 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
|
51 // 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
|
52 return; |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
53 } |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
54 |
8330
e87a993c6611
Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents:
8324
diff
changeset
|
55 if (data.getRange() == null) { |
e87a993c6611
Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents:
8324
diff
changeset
|
56 // No active datasets |
e87a993c6611
Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents:
8324
diff
changeset
|
57 return; |
e87a993c6611
Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents:
8324
diff
changeset
|
58 } |
e87a993c6611
Avoid NPE if no dataset is activated in theme list.
"Tom Gottfried <tom@intevation.de>"
parents:
8324
diff
changeset
|
59 |
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
|
60 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
|
61 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
|
62 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
|
63 ); |
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
|
64 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
|
65 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
66 // 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
|
67 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
|
68 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
|
69 |
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
|
70 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
|
71 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
|
72 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
|
73 } |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
74 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
75 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
|
76 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 } |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
82 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
83 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
|
84 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
85 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
|
86 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
|
87 Font.BOLD, |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
88 getYAxisFontSize(wAxisIndex)); |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
89 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
90 String axisName = "W.in.cm"; |
8353
a82f24b773e7
Use i18n string for w in cm axis.
Raimund Renkert <rrenkert@intevation.de>
parents:
8338
diff
changeset
|
91 String axisLabel = Resources.getMsg(context.getMeta(), |
a82f24b773e7
Use i18n string for w in cm axis.
Raimund Renkert <rrenkert@intevation.de>
parents:
8338
diff
changeset
|
92 I18N_AXIS_LABEL, "W [cm]"); |
8320
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
93 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
94 IdentifiableNumberAxis axis = new IdentifiableNumberAxis( |
8353
a82f24b773e7
Use i18n string for w in cm axis.
Raimund Renkert <rrenkert@intevation.de>
parents:
8338
diff
changeset
|
95 axisName, axisLabel); |
8320
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 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
|
98 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
|
99 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
|
100 |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
101 return axis; |
b1303070c050
Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8165
diff
changeset
|
102 } |
8165
cfb3a4d0c637
Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
103 } |
cfb3a4d0c637
Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
104 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |