1 package za.org.coefficient.events; 2 3 import java.util.*; 4 import java.util.HashMap ; 5 import java.util.Map ; 6 7 import org.apache.log4j.Logger; 8 9 10 20 public class EventHandlerRegistry { 21 22 25 private static final Logger log = org.apache.log4j.Logger.getLogger(EventHandlerRegistry.class); 26 27 30 private static EventHandlerRegistry instance; 31 32 35 private Map registry = new HashMap (); 36 37 40 private EventHandlerRegistry(){} 41 42 46 public static EventHandlerRegistry getInstance(){ 47 if (instance == null) instance = new EventHandlerRegistry(); 48 return instance; 49 } 50 51 56 public synchronized CoefficientEventHandler[] getHandlers(String eventType){ 57 try { 58 return getHandlers(Class.forName(eventType)); 59 } catch (ClassNotFoundException e) { 60 e.printStackTrace(); 61 return new CoefficientEventHandler[]{}; 62 } 63 } 64 65 70 public synchronized CoefficientEventHandler[] getHandlers(Class eventType){ 71 log.info("REGISTRY: getting handlers for class " + eventType.getName()); 72 Set handlers = new HashSet(); 73 Object obj = registry.get(eventType); 74 if (obj != null && obj instanceof List) handlers.addAll((List)obj); 75 Class cls = eventType; 76 while (!Object .class.equals(cls)){ 77 obj = registry.get(cls); 78 if (obj != null && obj instanceof List) handlers.addAll((List)obj); 79 cls = cls.getSuperclass(); 80 } 81 log.info("REGISTRY: found " + handlers.size() + " handlers for class " + eventType.getName()); 82 log.debug("REGISTRY: Handlers for " + eventType.getName() + ":"); 83 for (Iterator iter = handlers.iterator(); iter.hasNext();) { 84 CoefficientEventHandler h = (CoefficientEventHandler) iter.next(); 85 log.debug("\t" + h.getClass().getName() + " : " + h); 86 } 87 return (CoefficientEventHandler[]) handlers.toArray(new CoefficientEventHandler[handlers.size()]); 88 } 89 90 97 public synchronized void registerEventHandler(Class eventType, CoefficientEventHandler handler){ 98 if (eventType == null || handler == null) return; 99 List handlers = (List) registry.get(eventType); 100 if (handlers == null){ 101 handlers = new ArrayList(); 102 registry.put(eventType, handlers); 103 } 104 handlers.add(handler); 105 } 106 107 } 108 | Popular Tags |