annotate artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java @ 8320:b1303070c050

Generate a W in CM axis if there are W data.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 24 Sep 2014 17:39:29 +0200
parents cfb3a4d0c637
children c44775cd79f2
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.commons.logging.Log;
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.apache.commons.logging.LogFactory;
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.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
15 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
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.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
17 import org.dive4elements.river.jfree.AxisDataset;
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.axis.NumberAxis;
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.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
20 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
21
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
22 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
23 extends DiagramGenerator
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
24 implements InjectorConstants
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
25 {
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
26 private static Logger log = Logger.getLogger(DiagramGenerator.class);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
27
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
28 public DischargeGenerator() {
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
29 }
8320
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
30
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
31 @Override
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
32 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
33 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
34
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
35 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
36 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
37 return;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
38 }
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 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
41
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
42 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
43 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
44 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
45 return;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
46 }
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 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
49 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
50 // 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
51 return;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
52 }
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 Range range = inCm(data.getRange(), pnpValue);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
55
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
56 // 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
57 NumberAxis wInCmAxis = createWinCMAxis(wAxisIndex);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
58 wInCmAxis.setRange(range.getLowerBound(), range.getUpperBound());
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
59
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
60 plot.setRangeAxis(plot.getRangeAxisCount(), wInCmAxis);
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
61 }
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 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
64 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
65 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
66 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
67 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
68 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
69 }
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 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
72
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
73 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
74 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
75 Font.BOLD,
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
76 getYAxisFontSize(wAxisIndex));
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
77
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
78 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
79
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
80 // TODO: I18N
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
81 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
82 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
83
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
84 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
85 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
86 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
87
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
88 return axis;
b1303070c050 Generate a W in CM axis if there are W data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8165
diff changeset
89 }
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
90 }
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
91 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org