Author: norman
Date: Mon Apr 11 18:52:18 2011
New Revision: 1091166

URL: http://svn.apache.org/viewvc?rev=1091166&view=rev
Log:
Allow to register MailboxListener which will get notified for every 
MailboxPath. See MAILBOX-35

Modified:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/HashMapDelegatingMailboxListener.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java?rev=1091166&r1=1091165&r2=1091166&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
 Mon Apr 11 18:52:18 2011
@@ -36,4 +36,14 @@ public interface MailboxListenerSupport 
      * @throws MailboxException
      */
     void addListener(MailboxPath mailboxPath, MailboxListener listener, 
MailboxSession session) throws MailboxException;
+    
+    /**
+     * Add a {@link MailboxListener} which get fired for ever {@link 
MailboxPath}
+     * 
+     * @param listener
+     * @param session
+     * @throws MailboxException
+     */
+    void addGlobalListener(MailboxListener listener, MailboxSession session) 
throws MailboxException;
+
 }

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java?rev=1091166&r1=1091165&r2=1091166&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java
 Mon Apr 11 18:52:18 2011
@@ -74,7 +74,27 @@ public abstract class AbstractDelegating
                     listeners.remove(path);
                 }
             }
-        }        
+        }  
+        
+        List<MailboxListener> globalListeners = getGlobalListeners();
+        if (globalListeners != null && globalListeners.isEmpty() == false) {
+            List<MailboxListener> closedListener = new 
ArrayList<MailboxListener>();
+            
+            int sz = globalListeners.size();
+            for (int i = 0; i < sz; i++) {
+                MailboxListener l = globalListeners.get(i);
+                if (l.isClosed()) {
+                    closedListener.add(l);
+                } else {
+                    l.event(event);
+                }
+            }
+            
+          
+            if (closedListener.isEmpty() == false) {
+                globalListeners.removeAll(closedListener);
+            }
+        }  
     }
 
     /**
@@ -107,10 +127,26 @@ public abstract class AbstractDelegating
         }        
     }
 
+
+    /*
+     * (non-Javadoc)
+     * @see 
org.apache.james.mailbox.MailboxListenerSupport#addGlobalListener(org.apache.james.mailbox.MailboxListener,
 org.apache.james.mailbox.MailboxSession)
+     */
+    public synchronized void addGlobalListener(MailboxListener listener, 
MailboxSession session) throws MailboxException {
+        getGlobalListeners().add(listener);
+    }
+
     /**
      * Return the {@link Map} which is used to store the {@link 
MailboxListener}
      * 
      * @return listeners
      */
     protected abstract Map<MailboxPath, List<MailboxListener>> getListeners();
+    
+    /**
+     * Return the {@link List} which is used tos tore the global {@link 
MailboxListener}
+     * 
+     * @return globalListeners
+     */
+    protected abstract List<MailboxListener> getGlobalListeners();
 }

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/HashMapDelegatingMailboxListener.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/HashMapDelegatingMailboxListener.java?rev=1091166&r1=1091165&r2=1091166&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/HashMapDelegatingMailboxListener.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/HashMapDelegatingMailboxListener.java
 Mon Apr 11 18:52:18 2011
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.store;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,10 +34,16 @@ import org.apache.james.mailbox.MailboxP
 public class HashMapDelegatingMailboxListener extends 
AbstractDelegatingMailboxListener{
 
     private Map<MailboxPath, List<MailboxListener>> listeners = new 
HashMap<MailboxPath, List<MailboxListener>>();
+    private List<MailboxListener> globalListeners = new 
ArrayList<MailboxListener>();
 
     @Override
     protected Map<MailboxPath, List<MailboxListener>> getListeners() {
         return listeners;
     }
+
+    @Override
+    protected List<MailboxListener> getGlobalListeners() {
+        return globalListeners;
+    }
     
 }

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1091166&r1=1091165&r2=1091166&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 Mon Apr 11 18:52:18 2011
@@ -477,6 +477,14 @@ public abstract class StoreMailboxManage
         return Collections.unmodifiableList(mList);
         
     }
+
+    /*
+     * (non-Javadoc)
+     * @see 
org.apache.james.mailbox.MailboxListenerSupport#addGlobalListener(org.apache.james.mailbox.MailboxListener,
 org.apache.james.mailbox.MailboxSession)
+     */
+    public void addGlobalListener(MailboxListener listener, MailboxSession 
session) throws MailboxException {
+        delegatingListener.addGlobalListener(listener, session);
+    }
     
     
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to