1 7 package org.mmbase.core.event; 8 9 import java.util.*; 10 11 import javax.swing.border.TitledBorder ; 12 13 import org.mmbase.util.HashCodeUtil; 14 import org.mmbase.util.logging.Logger; 15 import org.mmbase.util.logging.Logging; 16 17 import sun.rmi.runtime.GetThreadPoolAction; 18 import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArraySet; 19 20 40 public abstract class AbstractEventBroker { 41 42 private static final Logger log = Logging.getLoggerInstance(AbstractEventBroker.class); 43 44 protected Set listeners = new CopyOnWriteArraySet(); 45 46 54 public abstract boolean canBrokerForListener(EventListener listener); 55 56 64 public abstract boolean canBrokerForEvent(Event event); 65 66 76 protected abstract void notifyEventListener(Event event, EventListener listener) throws ClassCastException ; 77 78 public boolean addListener(EventListener listener) { 79 if (canBrokerForListener(listener)) { 80 if (! listeners.add(listener)) { 81 if (log.isDebugEnabled()) { 82 log.debug("" + listener + " was already in " + getClass() + ". Ignored."); 83 } 84 return false; 85 } else if (log.isDebugEnabled()) { 86 log.debug("listener added to " + getClass()); 87 } 88 return true; 89 } else { 90 log.warn("Ignored listener for" + getClass() + " because it cannot broker for that."); 91 } 92 return false; 93 } 94 95 public void removeListener(EventListener listener) { 96 if (! listeners.remove(listener)) { 97 log.warn("Tried to remove " + listener + " from " + getClass()+ " but it was not found. Ignored."); 98 } 99 100 } 101 102 public void notifyForEvent(Event event) { 103 if(log.isDebugEnabled())log.debug("will notify " + listeners.size() + " listeners"); 104 for (Iterator i = listeners.iterator(); i.hasNext();) { 105 EventListener listener = (EventListener) i.next(); 106 try { 107 notifyEventListener(event, listener); 108 } catch (ClassCastException e) { 109 log.error("could not notify listener " + listener + " of event " + event); 111 } 112 } 113 } 114 115 public String toString(){ 116 return "Abstract Event Broker"; 117 } 118 119 public boolean equals(Object o) { 120 return this.getClass().getName().equals(o.getClass().getName()); 122 } 123 124 public int hashCode() { 125 int result = 0; 126 result = HashCodeUtil.hashCode(result, toString()); 127 result = HashCodeUtil.hashCode(result, this.getClass().getName()); 128 return result; 129 } 130 } 131 | Popular Tags |