/*
 * JBoss, the OpenSource J2EE webOS
 * 
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package org.jboss.aop.patterns.observable;

import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * The subject implementation.
 * 
 * @author <a href="adrian@jboss.com">Adrian Brock</a>
 * @version $Revision: 1.1 $
 */
public class SubjectImpl implements Subject
{
   /** The observers */
   private Set observers = Collections.synchronizedSet(new HashSet());
   
   /** The subject */
   private Object subject;

   public SubjectImpl(Object subject)
   {
      this.subject = subject;
   }
   
   public void addObserver(Observer observer)
   {
      observers.add(observer);
   }
   
   public void removeObserver(Observer observer)
   {
      observers.remove(observer);
   }
   
   public void notifyObservers()
   {
      Subject obj = (Subject) subject;
      
      synchronized (observers)
      {
         for (Iterator i = observers.iterator(); i.hasNext();)
         {
            Observer observer = (Observer) i.next();
            observer.fireChange(obj);
         }
      }
   }
}