package cnp.ew.util;
import java.util.*;
import java.awt.*;

public class CpDefaultObservable implements CpObservable
{
    Vector observers;

    public Vector getObservers()
    {
        if (observers == null) {
            observers = new Vector();
        }
        return observers;
    }

    // Q: Why is this synchronized?
    public synchronized void addObserver(CpObserver o)
    {
        getObservers().addElement(o);
    }


    synchronized public void removeObserver(CpObserver o)
    {
        getObservers().removeElement(o);
    }

    public void notifyObservers()
    {
        notifyObservers(0, null);
    }

    public void notifyObservers(Object arg)
    {
        notifyObservers(0, arg);
    }

    public void notifyObservers(int facet)
    {
        notifyObservers(facet, null);
    }

    public void notifyObservers(int facet, Object arg)
    {
        CpObserver o;

        for (int i = 0; i < getObservers().size(); i++) {
            o = (CpObserver)getObservers().elementAt(i);
            o.update(this, facet, arg);
        }
    }
}