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 2010/12/26 12:43:26 UTC
svn commit: r1052879 - in /james/mailbox/trunk:
api/src/main/java/org/apache/james/mailbox/
api/src/test/java/org/apache/james/mailbox/
jcr/src/test/java/org/apache/james/mailbox/jcr/
jpa/src/test/java/org/apache/james/mailbox/jpa/ maildir/src/test/jav...
Author: norman
Date: Sun Dec 26 11:43:25 2010
New Revision: 1052879
URL: http://svn.apache.org/viewvc?rev=1052879&view=rev
Log:
Allow to inject an AbstractDelegatingMailboxListener which is a special MailboxListener implementation that take care of delegate work to other MailboxListener. See MAILBOX-22
Added:
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
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java
james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java
james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java
james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirHostSystem.java
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirStressTest.java
james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryHostSystem.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/DelegatingMailboxListener.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
Added: 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=1052879&view=auto
==============================================================================
--- james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java (added)
+++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java Sun Dec 26 11:43:25 2010
@@ -0,0 +1,39 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox;
+
+public interface MailboxListenerSupport {
+
+
+ /**
+ * <p>Implementations of Mailbox may interpret the fact that someone is
+ * listening and do some caching and even postpone persistence until
+ * everyone has removed itself.
+ * </p><p>
+ * Listeners should return true from {@link MailboxListener#isClosed()}
+ * when they are ready to be removed.
+ * </p>
+ * @param mailboxPath not null
+ * @param listener not null
+ * @param session not null
+ * @throws MailboxException
+ */
+ void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException;
+}
Modified: james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java (original)
+++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java Sun Dec 26 11:43:25 2010
@@ -57,7 +57,7 @@ import org.apache.commons.logging.Log;
* </p>
*/
-public interface MailboxManager extends RequestAware {
+public interface MailboxManager extends RequestAware, MailboxListenerSupport {
/**
* Return the delimter to use for folders
@@ -194,20 +194,6 @@ public interface MailboxManager extends
void logout(MailboxSession session, boolean force) throws MailboxException;
- /**
- * <p>Implementations of Mailbox may interpret the fact that someone is
- * listening and do some caching and even postpone persistence until
- * everyone has removed itself.
- * </p><p>
- * Listeners should return true from {@link MailboxListener#isClosed()}
- * when they are ready to be removed.
- * </p>
- * @param mailboxPath not null
- * @param listener not null
- * @param session not null
- * @throws MailboxException
- */
- void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException;
/**
* Return a unmodifiable {@link List} of {@link MailboxPath} objects
Modified: james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java (original)
+++ james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java Sun Dec 26 11:43:25 2010
@@ -169,8 +169,9 @@ public abstract class MailboxManagerTest
* Implement this method to create the mailboxManager.
*
* @return
+ * @throws MailboxException
*/
- protected abstract void createMailboxManager();
+ protected abstract void createMailboxManager() throws MailboxException;
/**
* Setter to inject the mailboxManager.
Modified: james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java (original)
+++ james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java Sun Dec 26 11:43:25 2010
@@ -74,6 +74,8 @@ public class JCRHostSystem extends ImapH
JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos);
mailboxManager = new JCRMailboxManager(mf, userManager, uidProvider);
+ mailboxManager.init();
+
final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new JCRSubscriptionManager(mf));
resetUserMetaData();
MailboxSession session = mailboxManager.createSystemSession("test", new SimpleLog("TestLog"));
Modified: james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java (original)
+++ james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java Sun Dec 26 11:43:25 2010
@@ -73,7 +73,7 @@ public class JCRMailboxManagerTest exten
/* (non-Javadoc)
* @see org.apache.james.mailbox.MailboxManagerTest#createMailboxManager()
*/
- protected void createMailboxManager() {
+ protected void createMailboxManager() throws MailboxException {
new File(JACKRABBIT_HOME).delete();
@@ -99,8 +99,9 @@ public class JCRMailboxManagerTest exten
JCRCachingUidProvider uidProvider = new JCRCachingUidProvider(sessionRepos);
JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos);
- setMailboxManager(new JCRMailboxManager(mf, null, uidProvider));
-
+ JCRMailboxManager manager = new JCRMailboxManager(mf, null, uidProvider);
+ manager.init();
+ setMailboxManager(manager);
}
}
Modified: james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java (original)
+++ james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java Sun Dec 26 11:43:25 2010
@@ -26,6 +26,7 @@ import org.apache.commons.logging.impl.S
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.config.RepositoryConfig;
import org.apache.james.imap.functional.AbstractStressTest;
+import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.jcr.GlobalMailboxSessionJCRRepository;
@@ -48,7 +49,7 @@ public class JCRStressTest extends Abstr
@Before
- public void setUp() throws RepositoryException {
+ public void setUp() throws RepositoryException, MailboxException {
new File(JACKRABBIT_HOME).delete();
@@ -66,6 +67,7 @@ public class JCRStressTest extends Abstr
JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos);
mailboxManager = new JCRMailboxManager(mf, null, uidProvider);
+ mailboxManager.init();
}
Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java Sun Dec 26 11:43:25 2010
@@ -82,6 +82,7 @@ public class JPAHostSystem extends ImapH
JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory);
mailboxManager = new OpenJPAMailboxManager(mf, userManager, uidProvider);
+ mailboxManager.init();
SubscriptionManager subscriptionManager = new JPASubscriptionManager(mf);
final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, subscriptionManager);
resetUserMetaData();
Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java Sun Dec 26 11:43:25 2010
@@ -78,7 +78,7 @@ public class JPAMailboxManagerTest exten
* @see org.apache.james.mailbox.MailboxManagerTest#createMailboxManager()
*/
@Override
- protected void createMailboxManager() {
+ protected void createMailboxManager() throws MailboxException {
HashMap<String, String> properties = new HashMap<String, String>();
properties.put("openjpa.ConnectionDriverName", "org.h2.Driver");
@@ -100,8 +100,10 @@ public class JPAMailboxManagerTest exten
JPACachingUidProvider uidProvider = new JPACachingUidProvider(entityManagerFactory);
JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory);
- setMailboxManager(new OpenJPAMailboxManager(mf, null, uidProvider));
-
+ JPAMailboxManager mailboxManager = new OpenJPAMailboxManager(mf, null, uidProvider);
+ mailboxManager.init();
+
+ setMailboxManager(mailboxManager);
}
}
Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java Sun Dec 26 11:43:25 2010
@@ -54,7 +54,7 @@ public class JPAStressTest extends Abstr
private EntityManagerFactory entityManagerFactory;
@Before
- public void setUp() {
+ public void setUp() throws MailboxException {
HashMap<String, String> properties = new HashMap<String, String>();
properties.put("openjpa.ConnectionDriverName", "org.h2.Driver");
@@ -77,7 +77,8 @@ public class JPAStressTest extends Abstr
JPACachingUidProvider uidProvider = new JPACachingUidProvider(entityManagerFactory);
JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory);
mailboxManager = new OpenJPAMailboxManager(mf, null, uidProvider);
-
+ mailboxManager.init();
+
// Set the lock timeout via SQL because of a bug in openJPA
// https://issues.apache.org/jira/browse/OPENJPA-1656
setH2LockTimeout();
Modified: james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirHostSystem.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirHostSystem.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirHostSystem.java (original)
+++ james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirHostSystem.java Sun Dec 26 11:43:25 2010
@@ -27,6 +27,7 @@ import org.apache.james.imap.functional.
import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
+import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.maildir.MaildirMailboxManager;
import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory;
import org.apache.james.mailbox.maildir.MaildirStore;
@@ -46,13 +47,14 @@ public class MaildirHostSystem extends I
return new MaildirHostSystem();
}
- public MaildirHostSystem() {
+ public MaildirHostSystem() throws MailboxException {
userManager = new InMemoryUserManager();
MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%user");
mailboxSessionMapperFactory = new MaildirMailboxSessionMapperFactory(store);
MaildirSubscriptionManager sm = new MaildirSubscriptionManager(mailboxSessionMapperFactory);
mailboxManager = new MaildirMailboxManager(mailboxSessionMapperFactory, userManager, store);
-
+ mailboxManager.init();
+
final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, sm);
configure(new DefaultImapDecoderFactory().buildImapDecoder(),
new DefaultImapEncoderFactory().buildImapEncoder(),
Modified: james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java (original)
+++ james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java Sun Dec 26 11:43:25 2010
@@ -84,7 +84,9 @@ public class MaildirMailboxManagerTest e
private void doTestListWithMaildirStoreConfiguration(String maildirStoreConfiguration) throws MailboxException, UnsupportedEncodingException {
MaildirStore store = new MaildirStore(MAILDIR_HOME + maildirStoreConfiguration);
MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store);
- setMailboxManager(new MaildirMailboxManager(mf, null, store));
+ MaildirMailboxManager manager = new MaildirMailboxManager(mf, null, store);
+ manager.init();
+ setMailboxManager(manager);
super.testList();
try {
tearDown();
Modified: james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirStressTest.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirStressTest.java (original)
+++ james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirStressTest.java Sun Dec 26 11:43:25 2010
@@ -37,11 +37,13 @@ public class MaildirStressTest extends A
private MaildirMailboxManager mailboxManager;
@Before
- public void setUp() {
+ public void setUp() throws MailboxException {
MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%user");
MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store);
mailboxManager = new MaildirMailboxManager(mf, null, store);
+ mailboxManager.init();
+
}
@After
Modified: james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryHostSystem.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryHostSystem.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryHostSystem.java (original)
+++ james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryHostSystem.java Sun Dec 26 11:43:25 2010
@@ -25,6 +25,7 @@ import org.apache.james.imap.functional.
import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
+import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.inmemory.InMemorySubscriptionManager;
@@ -42,7 +43,7 @@ public class InMemoryHostSystem extends
return host;
}
- private InMemoryHostSystem() {
+ private InMemoryHostSystem() throws MailboxException {
initFields();
}
@@ -56,11 +57,13 @@ public class InMemoryHostSystem extends
initFields();
}
- private void initFields() {
+ private void initFields() throws MailboxException {
userManager = new InMemoryUserManager();
factory = new InMemoryMailboxSessionMapperFactory();
InMemoryCachingUidProvider uidProvider = new InMemoryCachingUidProvider();
mailboxManager = new InMemoryMailboxManager(factory, userManager, uidProvider);
+ mailboxManager.init();
+
final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new InMemorySubscriptionManager(factory));
configure(new DefaultImapDecoderFactory().buildImapDecoder(),
new DefaultImapEncoderFactory().buildImapEncoder(),
Added: 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=1052879&view=auto
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java (added)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractDelegatingMailboxListener.java Sun Dec 26 11:43:25 2010
@@ -0,0 +1,103 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mailbox.store;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.MailboxListenerSupport;
+import org.apache.james.mailbox.MailboxPath;
+import org.apache.james.mailbox.MailboxSession;
+
+public abstract class AbstractDelegatingMailboxListener implements MailboxListener, MailboxListenerSupport{
+
+ /**
+ * Receive the event and dispatch it to the right {@link MailboxListener} depending on {@link Event#getMailboxPath()}
+ */
+ public void event(Event event) {
+ MailboxPath path = event.getMailboxPath();
+ Map<MailboxPath, List<MailboxListener>> listeners = getListeners();
+
+ List<MailboxListener> mListeners = listeners.get(path);
+ if (mListeners != null && mListeners.isEmpty() == false) {
+ List<MailboxListener> closedListener = new ArrayList<MailboxListener>();
+
+ int sz = mListeners.size();
+ for (int i = 0; i < sz; i++) {
+ MailboxListener l = mListeners.get(i);
+ if (l.isClosed()) {
+ closedListener.add(l);
+ } else {
+ l.event(event);
+ }
+ }
+
+ if (event instanceof MailboxDeletion) {
+ // remove listeners if the mailbox was deleted
+ listeners.remove(path);
+ } else if (event instanceof MailboxRenamed) {
+ // handle rename events
+ MailboxRenamed renamed = (MailboxRenamed) event;
+ List<MailboxListener> l = listeners.remove(path);
+ if (l != null) {
+ listeners.put(renamed.getNewPath(), l);
+ }
+ }
+ if (closedListener.isEmpty() == false) {
+ mListeners.removeAll(closedListener);
+ if (mListeners.isEmpty()) {
+ listeners.remove(path);
+ }
+ }
+ }
+ }
+
+ /**
+ * Is never closed
+ */
+ public boolean isClosed() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.mailbox.MailboxListenerSupport#addListener(org.apache.james.mailbox.MailboxPath, org.apache.james.mailbox.MailboxListener, org.apache.james.mailbox.MailboxSession)
+ */
+ public synchronized void addListener(MailboxPath path, MailboxListener listener, MailboxSession session) throws MailboxException {
+ Map<MailboxPath, List<MailboxListener>> listeners = getListeners();
+ List<MailboxListener> mListeners = listeners.get(path);
+ if (mListeners == null) {
+ mListeners = new ArrayList<MailboxListener>();
+ listeners.put(path, mListeners);
+ }
+ if (mListeners.contains(listener) == false) {
+ mListeners.add(listener);
+ }
+ }
+
+ /**
+ * Return the {@link Map} which is used to store the {@link MailboxListener}
+ *
+ * @return listeners
+ */
+ protected abstract Map<MailboxPath, List<MailboxListener>> getListeners();
+}
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/DelegatingMailboxListener.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/DelegatingMailboxListener.java?rev=1052879&r1=1052878&r2=1052879&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/DelegatingMailboxListener.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/DelegatingMailboxListener.java Sun Dec 26 11:43:25 2010
@@ -19,7 +19,6 @@
package org.apache.james.mailbox.store;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -31,67 +30,13 @@ import org.apache.james.mailbox.MailboxP
* Receive a {@link Event} and delegate it to an other {@link MailboxListener} depending on the registered name
*
*/
-public class DelegatingMailboxListener implements MailboxListener{
+public class DelegatingMailboxListener extends AbstractDelegatingMailboxListener{
private Map<MailboxPath, List<MailboxListener>> listeners = new HashMap<MailboxPath, List<MailboxListener>>();
- public synchronized void addListener(MailboxPath path, MailboxListener listener) {
- List<MailboxListener> mListeners = listeners.get(path);
- if (mListeners == null) {
- mListeners = new ArrayList<MailboxListener>();
- listeners.put(path, mListeners);
- }
- if (mListeners.contains(listener) == false) {
- mListeners.add(listener);
- }
- }
-
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.mailbox.MailboxListener#event(org.apache.james.mailbox.MailboxListener.Event)
- */
- public synchronized void event(Event event) {
- MailboxPath path = event.getMailboxPath();
- List<MailboxListener> mListeners = listeners.get(path);
- if (mListeners != null && mListeners.isEmpty() == false) {
- List<MailboxListener> closedListener = new ArrayList<MailboxListener>();
-
- int sz = mListeners.size();
- for (int i = 0; i < sz; i++) {
- MailboxListener l = mListeners.get(i);
- if (l.isClosed()) {
- closedListener.add(l);
- } else {
- l.event(event);
- }
- }
-
- if (event instanceof MailboxDeletion) {
- // remove listeners if the mailbox was deleted
- listeners.remove(path);
- } else if (event instanceof MailboxRenamed) {
- // handle rename events
- MailboxRenamed renamed = (MailboxRenamed) event;
- List<MailboxListener> l = listeners.remove(path);
- if (l != null) {
- listeners.put(renamed.getNewPath(), l);
- }
- }
- if (closedListener.isEmpty() == false) {
- mListeners.removeAll(closedListener);
- if (mListeners.isEmpty()) {
- listeners.remove(path);
- }
- }
- }
- }
-
- /**
- * Is never closed
- */
- public boolean isClosed() {
- return false;
+ @Override
+ protected Map<MailboxPath, List<MailboxListener>> getListeners() {
+ return listeners;
}
}
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=1052879&r1=1052878&r2=1052879&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 Sun Dec 26 11:43:25 2010
@@ -67,7 +67,7 @@ public abstract class StoreMailboxManage
public static final char SQL_WILDCARD_CHAR = '%';
private final MailboxEventDispatcher dispatcher = new MailboxEventDispatcher();
- private final DelegatingMailboxListener delegatingListener = new DelegatingMailboxListener();
+ private AbstractDelegatingMailboxListener delegatingListener = null;
protected final MailboxMapperFactory<Id> mailboxSessionMapperFactory;
private final Authenticator authenticator;
@@ -84,10 +84,37 @@ public abstract class StoreMailboxManage
this.locker = locker;
this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
this.uidProvider = uidProvider;
- // The dispatcher need to have the delegating listener added
- dispatcher.addMailboxListener(delegatingListener);
+
}
+ /**
+ * Init the {@link MailboxManager}
+ *
+ * @throws MailboxException
+ */
+ public void init() throws MailboxException{
+ // The dispatcher need to have the delegating listener added
+ dispatcher.addMailboxListener(getDelegationListener());
+ }
+
+ protected AbstractDelegatingMailboxListener getDelegationListener() {
+ if (delegatingListener == null) {
+ delegatingListener = new DelegatingMailboxListener();
+ }
+ return delegatingListener;
+ }
+
+ /**
+ * Set the {@link AbstractDelegatingMailboxListener} to use with this {@link MailboxManager} instance. If none is set here a {@link DelegatingMailboxListener} instance will
+ * be created lazy
+ *
+ * @param delegatingListener
+ */
+ public void setDelegatingMailboxListener(AbstractDelegatingMailboxListener delegatingListener) {
+ this.delegatingListener = delegatingListener;
+ }
+
+
protected Log getLog() {
return log;
}
@@ -411,7 +438,7 @@ public abstract class StoreMailboxManage
* @see org.apache.james.mailbox.MailboxManager#addListener(org.apache.james.imap.api.MailboxPath, org.apache.james.mailbox.MailboxListener, org.apache.james.mailbox.MailboxSession)
*/
public void addListener(MailboxPath path, MailboxListener listener, MailboxSession session) throws MailboxException {
- delegatingListener.addListener(path, listener);
+ delegatingListener.addListener(path, listener, session);
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org