/*******************************************************************************
 * Copyright (C) 2007 The University of Manchester   
 * 
 *  Modifications to the initial code base are copyright of their
 *  respective authors, or their employers as appropriate.
 * 
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2.1 of
 *  the License, or (at your option) any later version.
 *    
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *    
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ******************************************************************************/
package net.sf.taverna.t2.lang.observer;

import java.util.List;

/**
 * Implements this if you want to notify other classes about changes
 * 
 * @author Ian Dunlop
 * @author Stian Soiland
 * 
 * @param <Message>
 */
public interface Observable<Message> {
	/**
	 * Register an {@link Observer}
	 * 
	 * @param observer
	 *            the class who wants notified of changes
	 */
	public void addObserver(Observer<Message> observer);

	/**
	 * Remove a class who is currently observing
	 * 
	 * @param observer
	 *            the class who no longer wants notified
	 */
	public void removeObserver(Observer<Message> observer);

	/**
	 * A list of all the currently registered {@link Observer}s
	 * 
	 * @return
	 */
	public List<Observer<Message>> getObservers();
}
