content: /*
   * @(#)DoubleInterval.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.model.drawing.axis.interval;
  
  import com.egantt.model.drawing.DrawingTransform;
  import com.egantt.model.drawing.axis.AxisInterval;
  import com.egantt.model.drawing.axis.MutableInterval;
  import com.egantt.model.drawing.transform.DoubleTransform;
  
  public class DoubleInterval implements MutableInterval
  {
  	protected double start;
  	protected double finish;
  
  	public DoubleInterval(double start, double finish)
  	{
  		this.start = start;
  		this.finish = finish;
  	}
  
  	//___________________________________________________________________________
  	
  	public void setStart(Object start)
  	{
  		this.start = ((Double)start).doubleValue();
  	}
  
  	public void setFinish(Object finish)
  	{
  		this.finish = ((Double)finish).doubleValue();
  	}
  	
  	//___________________________________________________________________________
  
  	public Object getStart()
  	{
  		return new Double(start);
  	}
  
  	public Object getFinish()
  	{
  		return new Double(finish);
  	}
  
  	//___________________________________________________________________________
  
  	public Object getRange()
  	{
  		return new Double(finish - start);
  	}
  
  	//___________________________________________________________________________
  
  	public double getStartValue()
  	{
  		return start;
  	}
  
  	public double getFinishValue()
  	{
  		return finish;
  	}
  
  	//___________________________________________________________________________
  
  	public double getRangeValue()
  	{
  		return finish - start;
  	}
  
  	// __________________________________________________________________________
  	
  	public boolean containsValue(Object o)
  	{
  		if (o == null || !(o instanceof Double))
  			return false;
  		
  		double value = ((Double) o).doubleValue();
  		return this.start <= value  && this.finish >= value;
  	}
  
  	public boolean contains(AxisInterval i)
  	{
  		if (i == null || !(i instanceof DoubleInterval interval))
  			return false;
  
  		return this.start <= interval.getStartValue() &&
  		   this.finish >= interval.getFinishValue();
  	}
  
  	public boolean intersects(AxisInterval i)
  	{
  		if (i == null || !(i instanceof DoubleInterval interval))
  			return false;
  
  		return ! (finish < interval.getStartValue())
  		   || ! (start > interval.getFinishValue());
  	}
  	
  	//	________________________________________________________________________
  	
  	public AxisInterval union(AxisInterval i) {
  		if (i == null)
  			return new DoubleInterval(new Double(getStartValue()), new Double(getFinishValue()));
  	
  		if (!(i instanceof DoubleInterval interval))
  			return null;
  
  		return new DoubleInterval(
  				Math.min(getStartValue(), interval.getStartValue()), 
  				Math.max(getFinishValue(), interval.getFinishValue()));
  	}
  	
  	//	________________________________________________________________________
  	
  	public Object clone() {
  		return new DoubleInterval(getStartValue(), getFinishValue());
  	}
  
  	public DrawingTransform getTransform() {
  		return new DoubleTransform(getStartValue(), getFinishValue() - getStartValue());
  	}
  }
  