teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.jfree; ingo@2327: ingo@2327: ingo@2327: import org.jfree.chart.axis.ValueAxis; aheinecke@5673: import org.jfree.chart.axis.LogarithmicAxis; ingo@2327: import org.jfree.data.Range; ingo@2327: ingo@2327: ingo@2327: /** ingo@2327: * @author Ingo Weinzierl ingo@2327: */ ingo@2327: public class DoubleBounds implements Bounds { ingo@2327: ingo@2327: protected double lower; ingo@2327: protected double upper; ingo@2327: ingo@2327: ingo@2330: /** ingo@2330: * Default constructor. A DoubleBounds has always set lower < ingo@2330: * upper! ingo@2330: */ ingo@2327: public DoubleBounds(double lower, double upper) { ingo@2330: this.lower = Math.min(lower, upper); ingo@2330: this.upper = Math.max(lower, upper); ingo@2327: } ingo@2327: ingo@2327: ingo@2327: @Override ingo@2327: public Number getLower() { ingo@2327: return Double.valueOf(lower); ingo@2327: } ingo@2327: ingo@2327: ingo@2327: @Override ingo@2327: public Number getUpper() { ingo@2327: return Double.valueOf(upper); ingo@2327: } ingo@2327: ingo@2327: ingo@2327: @Override ingo@2327: public void applyBounds(ValueAxis axis) { ingo@2327: axis.setRange(new Range(lower, upper)); ingo@2327: } ingo@2327: ingo@2327: ingo@3650: /** ingo@3650: * Set extended range to ValueAxis. ingo@3650: * @param percent how many percent to extend (in each direction, ingo@3650: * thus 10 percent on [0,100] -> [-10,110]. ingo@3650: */ ingo@2327: @Override ingo@2330: public void applyBounds(ValueAxis axis, int percent) { ingo@2330: double space = (upper - lower) / 100 * percent; aheinecke@5673: if (axis instanceof LogarithmicAxis) { aheinecke@5673: axis.setRange(new Range(Math.max(lower-space, 0.0001), aheinecke@5673: Math.max(upper+space, 0.0002))); aheinecke@5673: } else { aheinecke@5673: axis.setRange(new Range(lower-space, upper+space)); aheinecke@5673: } ingo@2330: } ingo@2330: ingo@2330: ingo@2330: @Override ingo@2327: public Bounds combine(Bounds bounds) { ingo@2327: if (bounds == null) { ingo@2327: return this; ingo@2327: } ingo@2327: ingo@2327: DoubleBounds other = (DoubleBounds) bounds; ingo@2327: ingo@2327: double otherLower = other.getLower().doubleValue(); ingo@2327: double otherUpper = other.getUpper().doubleValue(); ingo@2327: ingo@2327: return new DoubleBounds( ingo@2327: otherLower < lower ? otherLower : lower, ingo@2327: otherUpper > upper ? otherUpper : upper); ingo@2327: } ingo@2327: ingo@2327: ingo@2327: @Override ingo@2327: public String toString() { ingo@2327: return "DoubleBounds=[" + lower + " ; " + upper + "]"; ingo@2327: } ingo@2327: } ingo@2327: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :