# HG changeset patch # User Sascha L. Teichmann # Date 1411573169 -7200 # Node ID b1303070c0506d787222e98b453c8dbd2f2f673b # Parent 3c534a1bcf8ebf73a80a2fd158517bf4264a0bd5 Generate a W in CM axis if there are W data. diff -r 3c534a1bcf8e -r b1303070c050 artifacts/src/main/java/org/dive4elements/river/exports/DischargeGenerator.java --- 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 :