home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Main.bin / EventBroadcaster.java < prev    next >
Text File  |  1998-09-22  |  2KB  |  111 lines

  1. package com.symantec.itools.beans;
  2.  
  3.  
  4. import java.lang.reflect.Method;
  5. import java.util.EventListener;
  6. import java.util.EventObject;
  7. import java.util.Enumeration;
  8. import java.util.Vector;
  9.  
  10.  
  11. /**
  12.  * EventBroadcaster provides a generic way to broadcast events
  13.  * to a group of listeners.
  14.  *
  15.  * @author Symantec Internet Tools Division
  16.  * @version 1.0
  17.  * @since VCafe 3.0
  18.  */
  19.  
  20. public class EventBroadcaster
  21. {
  22.     /**
  23.      * @since VCafe 3.0
  24.      */
  25.     protected Vector listeners;
  26.  
  27.     {
  28.         listeners = new Vector();
  29.     }
  30.  
  31.     public EventBroadcaster()
  32.     {
  33.     }
  34.  
  35.     /**
  36.      * @param listener TODO
  37.      * @param unique TODO
  38.      * @since VCafe 3.0
  39.      */
  40.  
  41.     public synchronized void addListener(EventListener listener, boolean unique)
  42.     {
  43.         if(unique)
  44.         {
  45.             if(listeners.contains(listener))
  46.             {
  47.                 return;
  48.             }
  49.         }
  50.  
  51.         listeners.addElement(listener);
  52.     }
  53.  
  54.     /**
  55.      * @param listener TODO
  56.      * @param all TODO
  57.      * @since VCafe 3.0
  58.      */
  59.  
  60.     public synchronized void removeListener(EventListener listener, boolean all)
  61.     {
  62.         listeners.removeElement(listener);
  63.  
  64.         if(all)
  65.         {
  66.             while(listeners.removeElement(listener))
  67.             {
  68.             }
  69.         }
  70.     }
  71.  
  72.     /**
  73.      * @param event TODO
  74.      * @param methodName TODO
  75.      * @since VCafe 3.0
  76.      */
  77.  
  78.     public void fireEvent(EventObject event, String methodName)
  79.     {
  80.         Vector        fireToListeners;
  81.         Class[]       argIDs;
  82.         EventObject[] args;
  83.  
  84.         synchronized(listeners)
  85.         {
  86.             fireToListeners = (Vector)listeners.clone();
  87.         }
  88.  
  89.         argIDs    = new Class[1];
  90.         argIDs[0] = event.getClass();
  91.         args      = new EventObject[1];
  92.         args[0]   = event;
  93.  
  94.         for(Enumeration e = fireToListeners.elements(); e.hasMoreElements();)
  95.         {
  96.             try
  97.             {
  98.                 EventListener listener;
  99.                 Method        method;
  100.  
  101.                 listener = (EventListener)e.nextElement();
  102.                 method   = listener.getClass().getMethod(methodName, argIDs);
  103.                 method.invoke(listener, args);
  104.             }
  105.             catch(Exception ex)
  106.             {
  107.                 ex.printStackTrace();
  108.             }
  109.         }
  110.     }
  111. }