content: /*
   * @(#)AbstractAxis.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.model.drawing.axis;
  
  import com.egantt.model.drawing.DrawingAxis;
  
  import com.egantt.model.drawing.axis.event.AxisEvent;
  import com.egantt.model.drawing.axis.event.AxisListener;
  
  import java.util.ArrayList;
  import java.util.Iterator;
  
  /**
    * AbstractAxis handles the basic implementation of an Axis which are not related
    * to the type of data that the Axis shall be supporting
    */
  public abstract class AbstractAxis implements DrawingAxis
  {
  	protected AxisInterval interval;
  	protected ArrayList <AxisListener> listeners = new ArrayList<AxisListener>(2); /** notification list */
  
  	// __________________________________________________________________________
  
  	public AxisInterval getInterval()
  	{
  		return interval;
  	}
  
  	// __________________________________________________________________________
  
  	public synchronized void setInterval(AxisInterval interval)
  	{
  		this.interval = interval;
  		fireStateChanged(new AxisEvent(this)); // notify changes
  	}
  
  	// __________________________________________________________________________
  
  	public boolean addAxisListener(AxisListener listener)
  	{
  		synchronized (listeners)
  		{
  		   return listeners.add(listener);
  		}
  	}
  
  	public boolean removeAxisListener(AxisListener listener)
  	{
  		synchronized (listeners)
  		{
  		   return listeners.remove(listeners);
  		}
  	}
  
  	// __________________________________________________________________________
  
  	protected void fireStateChanged(AxisEvent event)
  	{
  		synchronized (listeners)
  		{
  		   for (Iterator iter = listeners.iterator(); iter.hasNext();)
  			   ((AxisListener) iter.next()).stateChanged(event);
  		}
  	}
  }
  