001         package com.croftsoft.apps.vaft.util.broadcast;
002    
003         import java.util.*;
004    
005         /*********************************************************************
006         * <P>
007         * Used to broadcast BroadcastEvent objects to BroadcastListener
008         * objects.
009         * <P>
010         * @author
011         *   <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A>
012         * @version
013         *   1998-04-05
014         *********************************************************************/
015    
016         public class  Broadcast implements Broadcaster
017         //////////////////////////////////////////////////////////////////////
018         //////////////////////////////////////////////////////////////////////
019         {
020    
021         private Broadcaster  broadcaster;
022         private Vector       listeners;
023    
024         //////////////////////////////////////////////////////////////////////
025         // Constructor method
026         //////////////////////////////////////////////////////////////////////
027    
028         public  Broadcast ( Broadcaster  broadcaster )
029         //////////////////////////////////////////////////////////////////////
030         {
031           this.broadcaster = broadcaster;
032           listeners = new Vector ( );
033         }
034    
035         //////////////////////////////////////////////////////////////////////
036         // Access methods
037         //////////////////////////////////////////////////////////////////////
038    
039         public Broadcaster  getBroadcaster ( ) { return broadcaster; }
040         public Vector       getListeners   ( ) { return listeners  ; }
041    
042         //////////////////////////////////////////////////////////////////////
043         //////////////////////////////////////////////////////////////////////
044    
045         public String  getBroadcastName ( )
046         //////////////////////////////////////////////////////////////////////
047         {
048           return broadcaster.toString ( );
049         }
050    
051         public synchronized boolean  addBroadcastListener (
052           BroadcastListener  bl )
053         //////////////////////////////////////////////////////////////////////
054         {
055           if ( listeners.contains ( bl ) ) return false;
056           listeners.addElement ( bl );
057           return true;
058         }
059    
060         public boolean  removeBroadcastListener ( BroadcastListener  bl )
061         //////////////////////////////////////////////////////////////////////
062         {
063           return listeners.removeElement ( bl );
064         }
065    
066         //////////////////////////////////////////////////////////////////////
067         //////////////////////////////////////////////////////////////////////
068    
069         public void  broadcast ( String  announcement )
070         //////////////////////////////////////////////////////////////////////
071         {
072           broadcast ( new BroadcastEvent ( broadcaster, announcement ) );
073         }
074    
075         protected synchronized void  broadcast ( BroadcastEvent  be )
076         //////////////////////////////////////////////////////////////////////
077         {
078           Enumeration  e = listeners.elements ( );
079           while ( e.hasMoreElements ( ) )
080           {
081             BroadcastListener  broadcastListener
082               = ( BroadcastListener ) e.nextElement ( );
083             broadcastListener.broadcastSent ( be );
084           }
085         }
086    
087         //////////////////////////////////////////////////////////////////////
088         //////////////////////////////////////////////////////////////////////
089         }