changeset 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 3c534a1bcf8e
children a5e7e2d833ea
files artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java
diffstat 1 files changed, 77 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java	Wed Sep 24 16:42:55 2014 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java	Wed Sep 24 17:39:29 2014 +0200
@@ -7,9 +7,85 @@
  */
 package org.dive4elements.river.exports;
 
-public class DischargeGenerator extends DiagramGenerator
+import java.awt.Font;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.log4j.Logger;
+import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
+import org.dive4elements.river.exports.injector.InjectorConstants;
+import org.dive4elements.river.jfree.AxisDataset;
+import org.jfree.chart.axis.NumberAxis;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.data.Range;
+
+public class DischargeGenerator
+extends      DiagramGenerator
+implements   InjectorConstants
 {
+    private static Logger log = Logger.getLogger(DiagramGenerator.class);
+
     public DischargeGenerator() {
     }
+
+    @Override
+    public void addDatasets(XYPlot plot) {
+        super.addDatasets(plot);
+
+        Object pnp = context.getContextValue(PNP);
+        if (!(pnp instanceof Number)) {
+            return;
+        }
+
+        double pnpValue = ((Number)pnp).doubleValue();
+
+        int wAxisIndex = diagramAttributes.getAxisIndex("W");
+        if (wAxisIndex == -1) {
+            log.warn("No W axis found.");
+            return;
+        }
+
+        AxisDataset data = datasets.get(wAxisIndex);
+        if (data == null) {
+            // No W axis
+            return;
+        }
+
+        Range range = inCm(data.getRange(), pnpValue);
+
+        // Do we have an index for W in cm?
+        NumberAxis wInCmAxis = createWinCMAxis(wAxisIndex);
+        wInCmAxis.setRange(range.getLowerBound(), range.getUpperBound());
+
+        plot.setRangeAxis(plot.getRangeAxisCount(), wInCmAxis);
+    }
+
+    private static Range inCm(Range r, double pnpValue) {
+        double l = r.getLowerBound();
+        double u = r.getUpperBound();
+        l = (l - pnpValue)*100d;
+        u = (u - pnpValue)*100d;
+        return new Range(l, u);
+    }
+
+    private NumberAxis createWinCMAxis(int wAxisIndex) {
+
+        Font labelFont = new Font(
+            DEFAULT_FONT_NAME,
+            Font.BOLD,
+            getYAxisFontSize(wAxisIndex));
+
+        String axisName = "W.in.cm";
+
+        // TODO: I18N
+        IdentifiableNumberAxis axis = new IdentifiableNumberAxis(
+            axisName, "W.in.cm");
+
+        axis.setAutoRangeIncludesZero(false);
+        axis.setLabelFont(labelFont);
+        axis.setTickLabelFont(labelFont);
+
+        return axis;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org