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