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]