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 :

http://dive4elements.wald.intevation.org