ingo@2327: package de.intevation.flys.jfree;
ingo@2327: 
ingo@2327: 
ingo@2327: import org.jfree.chart.axis.ValueAxis;
ingo@2327: import org.jfree.data.Range;
ingo@2327: 
ingo@2327: 
ingo@2327: /**
ingo@2327:  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
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. <b>A DoubleBounds has always set lower &lt;
ingo@2330:      * upper!</b>
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: 
felix@3723:     /**
felix@3723:      * Set extended range to ValueAxis.
felix@3723:      * @param percent how many percent to extend (in each direction,
felix@3723:      *        thus 10 percent on [0,100] -> [-10,110].
felix@3723:      */
ingo@2327:     @Override
ingo@2330:     public void applyBounds(ValueAxis axis, int percent) {
ingo@2330:         double space = (upper - lower) / 100 * percent;
ingo@2330:         axis.setRange(new Range(lower-space, upper+space));
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 :