You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/04/11 20:52:18 UTC

svn commit: r1091166 - in /james/mailbox/trunk: api/src/main/java/org/apache/james/mailbox/ store/src/main/java/org/apache/james/mailbox/store/

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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org