
import java.lang.ref.WeakReference;
import java.util.ArrayList;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Andréa
 */
public class Observable {

    protected ArrayList<WeakReference<Observer>> observers = new ArrayList();

    public Observable(){}
    
    public void addObserver(Observer o){
        observers.add(new WeakReference(o));
    }

    public void removeObserver(Observer o){
        for(int i=0;i<observers.size();i++)
            if(observers.get(i).get() == o){
                observers.remove(i);
                break;
            }
        observers.add(new WeakReference(o));
    }

    public void notifyObservers(Triplet.FieldName fieldName, Integer newValue){
        for(WeakReference<Observer> o : observers)
            if(o.get() != null)
                o.get().update(fieldName, newValue);
            else
                System.out.println("Listener lost !");

    }

}
