import java.awt.Point;
import java.io.*;
import java.util.*;


/**
 * An abstract "generator" of position reports
 *
 * @version 1.0
 * @author  Prof. David Bernstein, James Madison University
 *
 */
public abstract class AbstractPositionSubject implements PositionSubject
{
    protected HashSet<PositionListener>  listeners;


    /**
     * Default Constructor
     */
    public AbstractPositionSubject()
    {
       listeners = new HashSet<PositionListener>();
    }




    /**
     * Add a position listener
     */
    public void addPositionListener(PositionListener listener)
    {
       listeners.add(listener);
    }




    /**
     * Notify all position listeners of a position report
     */
    public void notifyListeners(Point position)
    {
       Iterator<PositionListener>      i;
       PositionListener                listener;

       i = listeners.iterator();
       while (i.hasNext()) 
       {
          listener = i.next();
          listener.handlePositionReport(position);
       }
    }




    /**
     * Remove a position listener
     */
    public void removePositionListener(PositionListener listener)
    {
       listeners.remove(listener);
    }


}
