Package org.jboss.kernel.plugins.event

Source Code of org.jboss.kernel.plugins.event.AbstractEventEmitter

/*     */ package org.jboss.kernel.plugins.event;
/*     */
/*     */ import java.util.Iterator;
/*     */ import java.util.List;
/*     */ import java.util.ListIterator;
/*     */ import java.util.Map;
/*     */ import java.util.Map.Entry;
/*     */ import java.util.Set;
/*     */ import java.util.concurrent.ConcurrentHashMap;
/*     */ import java.util.concurrent.CopyOnWriteArrayList;
/*     */ import org.jboss.kernel.spi.event.KernelEvent;
/*     */ import org.jboss.kernel.spi.event.KernelEventEmitter;
/*     */ import org.jboss.kernel.spi.event.KernelEventFilter;
/*     */ import org.jboss.kernel.spi.event.KernelEventListener;
/*     */ import org.jboss.logging.Logger;
/*     */
/*     */ public class AbstractEventEmitter
/*     */   implements KernelEventEmitter
/*     */ {
/*  46 */   private static final Logger log = Logger.getLogger(AbstractEventEmitter.class);
/*     */
/*  49 */   protected static final Object NULL = new Object();
/*     */
/*  52 */   protected static final KernelEventFilter NULL_FILTER = new KernelEventFilter()
/*     */   {
/*     */     public boolean wantEvent(KernelEvent event, Object handback)
/*     */     {
/*  56 */       return false;
/*     */     }
/*  52 */   };
/*     */
/*  61 */   protected Map<KernelEventFilter, Map<Object, List<KernelEventListener>>> eventListenerRegistry = new ConcurrentHashMap();
/*     */
/*  64 */   private long emitterSequence = 0L;
/*     */
/*     */   public boolean hasListeners()
/*     */   {
/*  73 */     return !this.eventListenerRegistry.isEmpty();
/*     */   }
/*     */
/*     */   public KernelEvent createEvent(String type, Object context)
/*     */   {
/*  85 */     return new AbstractEvent(this, type, nextEmitterSequence(), System.currentTimeMillis(), context);
/*     */   }
/*     */
/*     */   public void registerListener(KernelEventListener listener, KernelEventFilter filter, Object handback) throws Throwable
/*     */   {
/*  90 */     KernelEventFilter filterObject = filter == null ? NULL_FILTER : filter;
/*  91 */     Object handbackObject = handback == null ? NULL : handback;
/*     */
/*  93 */     synchronized (this.eventListenerRegistry)
/*     */     {
/*  95 */       Map handbacks = (Map)this.eventListenerRegistry.get(filterObject);
/*  96 */       if (handbacks == null)
/*     */       {
/*  98 */         handbacks = new ConcurrentHashMap();
/*  99 */         this.eventListenerRegistry.put(filterObject, handbacks);
/*     */       }
/* 101 */       List listeners = (List)handbacks.get(handbackObject);
/* 102 */       if (listeners == null)
/*     */       {
/* 104 */         listeners = new CopyOnWriteArrayList();
/* 105 */         handbacks.put(handbackObject, listeners);
/*     */       }
/* 107 */       listeners.add(listener);
/* 108 */       if (log.isTraceEnabled())
/* 109 */         log.trace("Registered listener: " + listener + " with filter=" + filter + " handback=" + handback + " on object " + this);
/*     */     }
/*     */   }
/*     */
/*     */   public void unregisterListener(KernelEventListener listener, KernelEventFilter filter, Object handback)
/*     */     throws Throwable
/*     */   {
/* 116 */     KernelEventFilter filterObject = filter == null ? NULL_FILTER : filter;
/* 117 */     Object handbackObject = handback == null ? NULL : handback;
/*     */
/* 119 */     synchronized (this.eventListenerRegistry)
/*     */     {
/* 121 */       Map handbacks = (Map)this.eventListenerRegistry.get(filterObject);
/* 122 */       if (handbacks != null)
/*     */       {
/* 124 */         List listeners = (List)handbacks.get(handbackObject);
/* 125 */         if ((listeners != null) && (listeners.remove(listener)))
/*     */         {
/* 127 */           if (log.isTraceEnabled())
/* 128 */             log.trace("Unregistered listener: " + listener + " with filter=" + filter + " handback=" + handback + " on object " + this);
/* 129 */           return;
/*     */         }
/*     */       }
/*     */     }
/* 133 */     throw new IllegalStateException("Listener not registered.");
/*     */   }
/*     */
/*     */   public void fireKernelEvent(KernelEvent event)
/*     */   {
/* 138 */     if (log.isTraceEnabled())
/* 139 */       log.trace("Firing event: " + event + " on object " + this);
/*     */     Iterator i;
/* 140 */     if (!this.eventListenerRegistry.isEmpty())
/*     */     {
/* 142 */       for (i = this.eventListenerRegistry.entrySet().iterator(); i.hasNext(); )
/*     */       {
/* 144 */         Map.Entry registryEntry = (Map.Entry)i.next();
/*     */
/* 146 */         Map handbacks = (Map)registryEntry.getValue();
/* 147 */         if (handbacks != null)
/*     */         {
/* 149 */           filter = null;
/* 150 */           Object filterObject = registryEntry.getKey();
/* 151 */           if (filterObject != NULL_FILTER) {
/* 152 */             filter = (KernelEventFilter)filterObject;
/*     */           }
/* 154 */           for (j = handbacks.entrySet().iterator(); j.hasNext(); )
/*     */           {
/* 156 */             Map.Entry handbackEntry = (Map.Entry)j.next();
/* 157 */             List listeners = (List)handbackEntry.getValue();
/* 158 */             if (listeners != null)
/*     */             {
/* 160 */               handback = handbackEntry.getKey();
/* 161 */               if (handback == NULL) {
/* 162 */                 handback = null;
/*     */               }
/* 164 */               for (k = listeners.listIterator(); k.hasNext(); )
/*     */               {
/* 166 */                 KernelEventListener listener = (KernelEventListener)k.next();
/*     */                 try
/*     */                 {
/* 169 */                   if ((filter == null) || (filter.wantEvent(event, handback)))
/* 170 */                     fireKernelEvent(listener, event, handback);
/*     */                 }
/*     */                 catch (Throwable t)
/*     */                 {
/* 174 */                   log.debug("Ignored unhandled throwable: ", t);
/*     */                 }
/*     */               }
/*     */             }
/*     */           }
/*     */         }
/*     */       }
/*     */     }
/*     */     KernelEventFilter filter;
/*     */     Iterator j;
/*     */     Object handback;
/*     */     ListIterator k;
/*     */   }
/*     */
/*     */   protected void fireKernelEvent(KernelEventListener listener, KernelEvent event, Object handback) {
/* 193 */     listener.onEvent(event, handback);
/*     */   }
/*     */
/*     */   protected long nextEmitterSequence()
/*     */   {
/* 203 */     synchronized (this.eventListenerRegistry)
/*     */     {
/* 205 */       return this.emitterSequence++;
/*     */     }
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.kernel.plugins.event.AbstractEventEmitter
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.kernel.plugins.event.AbstractEventEmitter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.