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