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 bt...@apache.org on 2018/12/04 08:48:56 UTC

[3/8] james-project git commit: MAILBOX-354 MailboxListeners should be registered by MailboxId

MAILBOX-354 MailboxListeners should be registered by MailboxId

It was previously done on MailboxPath, which is mutable.

Mutability leads to significantly harder code when it comes to mailbox renames.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d9bcebc7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d9bcebc7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d9bcebc7

Branch: refs/heads/master
Commit: d9bcebc7dd546bd5f11f3d9b496491e7c9042fe2
Parents: d22fe0e
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Nov 30 10:52:11 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Dec 4 15:47:32 2018 +0700

----------------------------------------------------------------------
 .../james/mailbox/MailboxListenerSupport.java   |   9 +-
 .../james/mailbox/MailboxManagerStressTest.java |   7 +-
 .../mailbox/store/StoreMailboxManager.java      |   8 +-
 .../event/DefaultDelegatingMailboxListener.java |  21 ++--
 .../store/event/MailboxListenerRegistry.java    |  24 ++---
 .../DefaultDelegatingMailboxListenerTest.java   |  61 +++--------
 .../event/MailboxListenerRegistryTest.java      | 100 +++++++------------
 .../james/imap/processor/IdleProcessor.java     |   4 +-
 .../processor/base/SelectedMailboxImpl.java     |   7 +-
 .../processor/base/SelectedMailboxImplTest.java |   8 +-
 10 files changed, 93 insertions(+), 156 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
index 1f5e35d..f76b70f 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListenerSupport.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox;
 
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 
 /**
@@ -37,7 +38,7 @@ public interface MailboxListenerSupport {
      * everyone has removed itself.
      * </p>
      * 
-     * @param mailboxPath
+     * @param mailboxId
      *            not null
      * @param listener
      *            not null
@@ -45,17 +46,17 @@ public interface MailboxListenerSupport {
      *            not null
      * @throws MailboxException
      */
-    void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException;
+    void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException;
 
     /**
      * Remove the {@link MailboxListener}
      * 
-     * @param mailboxPath
+     * @param mailboxId
      * @param listner
      * @param session
      * @throws MailboxException
      */
-    void removeListener(MailboxPath mailboxPath, MailboxListener listner, MailboxSession session) throws MailboxException;
+    void removeListener(MailboxId mailboxId, MailboxListener listner, MailboxSession session) throws MailboxException;
     
     /**
      * Add a {@link MailboxListener} which get fired for ever

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
index 8f41eb7..9f13dec 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
@@ -22,6 +22,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.CountDownLatch;
@@ -32,6 +33,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.ComposedMessageId;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mime4j.dom.Message;
 import org.junit.Test;
@@ -61,9 +63,8 @@ public abstract class MailboxManagerStressTest {
         MailboxSession session = mailboxManager.createSystemSession(username);
         mailboxManager.startProcessingRequest(session);
         final MailboxPath path = MailboxPath.forUser(username, "INBOX");
-        mailboxManager.createMailbox(path, session);
-        mailboxManager.addListener(path, new MailboxListener() {
-
+        Optional<MailboxId> mailboxId = mailboxManager.createMailbox(path, session);
+        mailboxManager.addListener(mailboxId.get(), new MailboxListener() {
             @Override
             public ListenerType getType() {
                 return ListenerType.MAILBOX;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 7eb53d8..63c30ef 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -768,8 +768,8 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public void addListener(MailboxPath path, MailboxListener listener, MailboxSession session) throws MailboxException {
-        delegatingListener.addListener(path, listener, session);
+    public void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException {
+        delegatingListener.addListener(mailboxId, listener, session);
     }
 
     /**
@@ -803,8 +803,8 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public void removeListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException {
-        delegatingListener.removeListener(mailboxPath, listener, session);
+    public void removeListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException {
+        delegatingListener.removeListener(mailboxId, listener, session);
 
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
index a380304..59b91cc 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
@@ -27,14 +27,14 @@ import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.metrics.api.NoopMetricFactory;
 
 import com.google.common.annotations.VisibleForTesting;
 
 /**
  * Receive a {@link org.apache.james.mailbox.MailboxListener.MailboxEvent} and delegate it to an other
- * {@link MailboxListener} depending on the registered name
+ * {@link MailboxListener} depending on the registered mailboxId
  *
  * This is a mono instance Thread safe implementation for DelegatingMailboxListener
  */
@@ -61,11 +61,11 @@ public class DefaultDelegatingMailboxListener implements DelegatingMailboxListen
     }
 
     @Override
-    public void addListener(MailboxPath path, MailboxListener listener, MailboxSession session) throws MailboxException {
+    public void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException {
         if (listener.getType() != ListenerType.MAILBOX) {
             throw new MailboxException(listener.getClass().getCanonicalName() + " registred on specific MAILBOX operation while its listener type was " + listener.getType());
         }
-        registry.addListener(path, listener);
+        registry.addListener(mailboxId, listener);
     }
 
     @Override
@@ -77,12 +77,12 @@ public class DefaultDelegatingMailboxListener implements DelegatingMailboxListen
     }
 
     @Override
-    public void removeListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException {
-        registry.removeListener(mailboxPath, listener);
+    public void removeListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) {
+        registry.removeListener(mailboxId, listener);
     }
 
     @Override
-    public void removeGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException {
+    public void removeGlobalListener(MailboxListener listener, MailboxSession session) {
         registry.removeGlobalListener(listener);
     }
 
@@ -95,12 +95,9 @@ public class DefaultDelegatingMailboxListener implements DelegatingMailboxListen
     }
 
     private void mailboxEvent(MailboxEvent mailboxEvent) {
-        Collection<MailboxListener> listenerSnapshot = registry.getLocalMailboxListeners(mailboxEvent.getMailboxPath());
+        Collection<MailboxListener> listenerSnapshot = registry.getLocalMailboxListeners(mailboxEvent.getMailboxId());
         if (mailboxEvent instanceof MailboxDeletion && listenerSnapshot.size() > 0) {
-            registry.deleteRegistryFor(mailboxEvent.getMailboxPath());
-        } else if (mailboxEvent instanceof MailboxRenamed && listenerSnapshot.size() > 0) {
-            MailboxRenamed renamed = (MailboxRenamed) mailboxEvent;
-            registry.handleRename(renamed.getMailboxPath(), renamed.getNewPath());
+            registry.deleteRegistryFor(mailboxEvent.getMailboxId());
         }
         deliverEventToMailboxListeners(mailboxEvent, listenerSnapshot);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
index d29caff..83461e6 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxListenerRegistry.java
@@ -23,7 +23,7 @@ import java.util.List;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableList;
@@ -32,7 +32,7 @@ import com.google.common.collect.Multimaps;
 
 public class MailboxListenerRegistry {
 
-    private final Multimap<MailboxPath, MailboxListener> listeners;
+    private final Multimap<MailboxId, MailboxListener> listeners;
     private final ConcurrentLinkedQueue<MailboxListener> globalListeners;
 
     public MailboxListenerRegistry() {
@@ -40,36 +40,32 @@ public class MailboxListenerRegistry {
         this.listeners = Multimaps.synchronizedMultimap(HashMultimap.create());
     }
 
-    public void addListener(MailboxPath path, MailboxListener listener) {
-        listeners.put(path, listener);
+    public void addListener(MailboxId mailboxId, MailboxListener listener) {
+        listeners.put(mailboxId, listener);
     }
 
     public void addGlobalListener(MailboxListener listener) {
         globalListeners.add(listener);
     }
 
-    public void removeListener(MailboxPath mailboxPath, MailboxListener listener) {
-        listeners.remove(mailboxPath, listener);
+    public void removeListener(MailboxId mailboxId, MailboxListener listener) {
+        listeners.remove(mailboxId, listener);
     }
 
     public void removeGlobalListener(MailboxListener listener) {
         globalListeners.remove(listener);
     }
 
-    public List<MailboxListener> getLocalMailboxListeners(MailboxPath path) {
-        return ImmutableList.copyOf(listeners.get(path));
+    public List<MailboxListener> getLocalMailboxListeners(MailboxId mailboxId) {
+        return ImmutableList.copyOf(listeners.get(mailboxId));
     }
 
     public List<MailboxListener> getGlobalListeners() {
         return ImmutableList.copyOf(globalListeners);
     }
 
-    public void deleteRegistryFor(MailboxPath path) {
-        listeners.removeAll(path);
-    }
-
-    public void handleRename(MailboxPath oldName, MailboxPath newName) {
-        listeners.putAll(newName, listeners.removeAll(oldName));
+    public void deleteRegistryFor(MailboxId mailboxId) {
+        listeners.removeAll(mailboxId);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
index 190e0b2..c9a411a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
@@ -45,6 +45,7 @@ public class DefaultDelegatingMailboxListenerTest {
     private static final MailboxPath MAILBOX_PATH = new MailboxPath("namespace", "user", "name");
     private static final MailboxPath OTHER_MAILBOX_PATH = new MailboxPath("namespace", "other", "name");
     private static final MailboxId MAILBOX_ID = TestId.of(100);
+    private static final MailboxId OTHER_MAILBOX_ID = TestId.of(42);
 
     private DefaultDelegatingMailboxListener defaultDelegatingMailboxListener;
     private EventCollector mailboxEventCollector;
@@ -57,7 +58,7 @@ public class DefaultDelegatingMailboxListenerTest {
         eachNodeEventCollector = new EventCollector(MailboxListener.ListenerType.EACH_NODE);
         onceEventCollector = new EventCollector(MailboxListener.ListenerType.ONCE);
         defaultDelegatingMailboxListener = new DefaultDelegatingMailboxListener();
-        defaultDelegatingMailboxListener.addListener(MAILBOX_PATH, mailboxEventCollector, null);
+        defaultDelegatingMailboxListener.addListener(MAILBOX_ID, mailboxEventCollector, null);
         defaultDelegatingMailboxListener.addGlobalListener(onceEventCollector, null);
         defaultDelegatingMailboxListener.addGlobalListener(eachNodeEventCollector, null);
     }
@@ -65,13 +66,13 @@ public class DefaultDelegatingMailboxListenerTest {
     @Test(expected = MailboxException.class)
     public void addListenerShouldThrowOnEACH_NODEListenerType() throws Exception {
         MailboxListener mailboxListener = new EventCollector(MailboxListener.ListenerType.EACH_NODE);
-        defaultDelegatingMailboxListener.addListener(MAILBOX_PATH, mailboxListener, null);
+        defaultDelegatingMailboxListener.addListener(MAILBOX_ID, mailboxListener, null);
     }
 
     @Test(expected = MailboxException.class)
     public void addListenerShouldThrowOnONCEListenerType() throws Exception {
         MailboxListener mailboxListener = new EventCollector(MailboxListener.ListenerType.ONCE);
-        defaultDelegatingMailboxListener.addListener(MAILBOX_PATH, mailboxListener, null);
+        defaultDelegatingMailboxListener.addListener(MAILBOX_ID, mailboxListener, null);
     }
 
     @Test(expected = MailboxException.class)
@@ -81,7 +82,7 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void eventShouldWork() throws Exception {
+    public void eventShouldWork() {
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, MAILBOX_PATH, MAILBOX_ID) {};
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
@@ -90,8 +91,8 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void eventShouldOnlyTriggerMAILBOXListenerRelatedToTheEvent() throws Exception {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, OTHER_MAILBOX_PATH, MAILBOX_ID) {};
+    public void eventShouldOnlyTriggerMAILBOXListenerRelatedToTheEvent() {
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, OTHER_MAILBOX_PATH, OTHER_MAILBOX_ID) {};
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).isEmpty();
         assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
@@ -99,39 +100,7 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void mailboxRenamedEventShouldUnregisterMAILBOXFromTheirPreviousPath() throws Exception {
-        MailboxListener.MailboxRenamed event = new MailboxListener.MailboxRenamed(null, MAILBOX_PATH, MAILBOX_ID) {
-            @Override
-            public MailboxPath getNewPath() {
-                return OTHER_MAILBOX_PATH;
-            }
-        };
-        defaultDelegatingMailboxListener.event(event);
-        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxEvent(null, MAILBOX_PATH, MAILBOX_ID) {};
-        defaultDelegatingMailboxListener.event(secondEvent);
-        assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
-        assertThat(eachNodeEventCollector.getEvents()).containsOnly(event, secondEvent);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event, secondEvent);
-    }
-
-    @Test
-    public void mailboxRenamedEventShouldRegisterMAILBOXToTheirNewPath() throws Exception {
-        MailboxListener.MailboxRenamed event = new MailboxListener.MailboxRenamed(null, MAILBOX_PATH, MAILBOX_ID) {
-            @Override
-            public MailboxPath getNewPath() {
-                return OTHER_MAILBOX_PATH;
-            }
-        };
-        defaultDelegatingMailboxListener.event(event);
-        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxEvent(null, OTHER_MAILBOX_PATH, MAILBOX_ID) {};
-        defaultDelegatingMailboxListener.event(secondEvent);
-        assertThat(mailboxEventCollector.getEvents()).containsOnly(event, secondEvent);
-        assertThat(eachNodeEventCollector.getEvents()).containsOnly(event, secondEvent);
-        assertThat(onceEventCollector.getEvents()).containsExactly(event, secondEvent);
-    }
-
-    @Test
-    public void mailboxDeletionShouldUnregisterMAILBOXListeners() throws Exception {
+    public void mailboxDeletionShouldUnregisterMAILBOXListeners() {
         QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
         QuotaCount deletedMessageCount = QuotaCount.count(123);
         QuotaSize totalDeletedSize = QuotaSize.size(456);
@@ -145,7 +114,7 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void mailboxDeletionShouldNotRegisterMAILBOXListenerToOtherPaths() throws Exception {
+    public void mailboxDeletionShouldNotRegisterMAILBOXListenerToOtherPaths() {
         QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
         QuotaCount quotaCount = QuotaCount.count(123);
         QuotaSize quotaSize = QuotaSize.size(456);
@@ -159,8 +128,8 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void removeListenerShouldWork() throws Exception {
-        defaultDelegatingMailboxListener.removeListener(MAILBOX_PATH, mailboxEventCollector, null);
+    public void removeListenerShouldWork() {
+        defaultDelegatingMailboxListener.removeListener(MAILBOX_ID, mailboxEventCollector, null);
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, MAILBOX_PATH, MAILBOX_ID) {};
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).isEmpty();
@@ -169,8 +138,8 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void removeListenerShouldNotRemoveAListenerFromADifferentPath() throws Exception {
-        defaultDelegatingMailboxListener.removeListener(OTHER_MAILBOX_PATH, mailboxEventCollector, null);
+    public void removeListenerShouldNotRemoveAListenerFromADifferentPath() {
+        defaultDelegatingMailboxListener.removeListener(OTHER_MAILBOX_ID, mailboxEventCollector, null);
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, MAILBOX_PATH, MAILBOX_ID) {};
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
@@ -179,7 +148,7 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void removeGlobalListenerShouldWorkForONCE() throws Exception {
+    public void removeGlobalListenerShouldWorkForONCE() {
         defaultDelegatingMailboxListener.removeGlobalListener(eachNodeEventCollector, null);
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, MAILBOX_PATH, MAILBOX_ID) {};
         defaultDelegatingMailboxListener.event(event);
@@ -189,7 +158,7 @@ public class DefaultDelegatingMailboxListenerTest {
     }
 
     @Test
-    public void removeGlobalListenerShouldWorkForEACH_NODE() throws Exception {
+    public void removeGlobalListenerShouldWorkForEACH_NODE() {
         defaultDelegatingMailboxListener.removeGlobalListener(onceEventCollector, null);
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxEvent(null, MAILBOX_PATH, MAILBOX_ID) {};
         defaultDelegatingMailboxListener.event(event);

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
index 58b0e11..04d2b1a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxListenerRegistryTest.java
@@ -23,15 +23,15 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.TestId;
 import org.junit.Before;
 import org.junit.Test;
 
-
 public class MailboxListenerRegistryTest {
+    private static final MailboxId MAILBOX_ID = TestId.of(42);
+    private static final MailboxId OTHER_MAILBOX_ID = TestId.of(43);
 
-    private static final MailboxPath MAILBOX_PATH = MailboxPath.forUser("user", "INBOX");
-    private static final MailboxPath OTHER_MAILBOX_PATH = MailboxPath.forUser("user", "other");
     private MailboxListenerRegistry testee;
     private MailboxListener mailboxListener;
     private MailboxListener otherMailboxListener;
@@ -50,36 +50,36 @@ public class MailboxListenerRegistryTest {
 
     @Test
     public void getLocalMailboxListenersShouldReturnEmptyList() {
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).isEmpty();
+        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).isEmpty();
     }
 
     @Test
-    public void addGlobalListenerShouldAddAGlobalListener() throws Exception {
+    public void addGlobalListenerShouldAddAGlobalListener() {
         testee.addGlobalListener(mailboxListener);
 
         assertThat(testee.getGlobalListeners()).containsOnly(mailboxListener);
     }
 
     @Test
-    public void addListenerShouldAddAListener() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
+    public void addListenerShouldAddAListener() {
+        testee.addListener(MAILBOX_ID, mailboxListener);
 
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).containsOnly(mailboxListener);
+        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).containsOnly(mailboxListener);
     }
 
     @Test
-    public void addListenerTwiceShouldAddAListenerOnlyOnce() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
-        testee.addListener(MAILBOX_PATH, mailboxListener);
+    public void addListenerTwiceShouldAddAListenerOnlyOnce() {
+        testee.addListener(MAILBOX_ID, mailboxListener);
+        testee.addListener(MAILBOX_ID, mailboxListener);
 
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).containsExactly(mailboxListener);
+        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).containsExactly(mailboxListener);
     }
 
     @Test
-    public void addListenerShouldAddAListenerOnCorrectPath() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
+    public void addListenerShouldAddAListenerOnCorrectPath() {
+        testee.addListener(MAILBOX_ID, mailboxListener);
 
-        assertThat(testee.getLocalMailboxListeners(OTHER_MAILBOX_PATH)).isEmpty();
+        assertThat(testee.getLocalMailboxListeners(OTHER_MAILBOX_ID)).isEmpty();
     }
 
     @Test
@@ -92,16 +92,16 @@ public class MailboxListenerRegistryTest {
     }
 
     @Test
-    public void removeListenerShouldWork() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
+    public void removeListenerShouldWork() {
+        testee.addListener(MAILBOX_ID, mailboxListener);
 
-        testee.removeListener(MAILBOX_PATH, mailboxListener);
+        testee.removeListener(MAILBOX_ID, mailboxListener);
 
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).isEmpty();
+        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).isEmpty();
     }
 
     @Test
-    public void removeGlobalListenerShouldNotRemoveOtherListeners() throws Exception {
+    public void removeGlobalListenerShouldNotRemoveOtherListeners() {
         testee.addGlobalListener(mailboxListener);
         testee.addGlobalListener(otherMailboxListener);
 
@@ -111,64 +111,32 @@ public class MailboxListenerRegistryTest {
     }
 
     @Test
-    public void removeListenerShouldNotRemoveOtherListeners() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
-        testee.addListener(MAILBOX_PATH, otherMailboxListener);
-
-        testee.removeListener(MAILBOX_PATH, mailboxListener);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).containsOnly(otherMailboxListener);
-    }
-
-    @Test
-    public void deleteRegistryForShouldRemoveAllListeners() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
-        testee.addListener(MAILBOX_PATH, otherMailboxListener);
-
-        testee.deleteRegistryFor(MAILBOX_PATH);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).isEmpty();
-    }
-
-    @Test
-    public void handleRenameShouldMoveListeners() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
-        testee.addListener(MAILBOX_PATH, otherMailboxListener);
-
-        testee.handleRename(MAILBOX_PATH, OTHER_MAILBOX_PATH);
-
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).isEmpty();
-        assertThat(testee.getLocalMailboxListeners(OTHER_MAILBOX_PATH)).containsOnly(mailboxListener, otherMailboxListener);
-    }
-
-    @Test
-    public void handleRenameShouldPreservePreviouslyRegisteredListeners() throws Exception {
-        testee.addListener(OTHER_MAILBOX_PATH, mailboxListener);
+    public void removeListenerShouldNotRemoveOtherListeners() {
+        testee.addListener(MAILBOX_ID, mailboxListener);
+        testee.addListener(MAILBOX_ID, otherMailboxListener);
 
-        testee.handleRename(MAILBOX_PATH, OTHER_MAILBOX_PATH);
+        testee.removeListener(MAILBOX_ID, mailboxListener);
 
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).isEmpty();
-        assertThat(testee.getLocalMailboxListeners(OTHER_MAILBOX_PATH)).containsOnly(mailboxListener);
+        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).containsOnly(otherMailboxListener);
     }
 
     @Test
-    public void handleRenameShouldMergeListenersIfNeeded() throws Exception {
-        testee.addListener(MAILBOX_PATH, mailboxListener);
-        testee.addListener(OTHER_MAILBOX_PATH, otherMailboxListener);
+    public void deleteRegistryForShouldRemoveAllListeners() {
+        testee.addListener(MAILBOX_ID, mailboxListener);
+        testee.addListener(MAILBOX_ID, otherMailboxListener);
 
-        testee.handleRename(MAILBOX_PATH, OTHER_MAILBOX_PATH);
+        testee.deleteRegistryFor(MAILBOX_ID);
 
-        assertThat(testee.getLocalMailboxListeners(MAILBOX_PATH)).isEmpty();
-        assertThat(testee.getLocalMailboxListeners(OTHER_MAILBOX_PATH)).containsOnly(mailboxListener, otherMailboxListener);
+        assertThat(testee.getLocalMailboxListeners(MAILBOX_ID)).isEmpty();
     }
 
     @Test
-    public void removeGlobalListenerShouldNotThrowOnAbsentListener() throws Exception {
+    public void removeGlobalListenerShouldNotThrowOnAbsentListener() {
         testee.removeGlobalListener(mailboxListener);
     }
 
     @Test
-    public void removeListenerShouldNotThrowOnAbsentListener() throws Exception {
-        testee.removeListener(MAILBOX_PATH, mailboxListener);
+    public void removeListenerShouldNotThrowOnAbsentListener() {
+        testee.removeListener(MAILBOX_ID, mailboxListener);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 01cab31..684c9e9 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -93,7 +93,7 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
             final IdleMailboxListener idleListener;
             if (sm != null) {
                 idleListener = new IdleMailboxListener(session, responder);
-                mailboxManager.addListener(sm.getPath(), idleListener, mailboxSession);
+                mailboxManager.addListener(sm.getMailboxId(), idleListener, mailboxSession);
             } else {
                 idleListener = null;
             }
@@ -112,7 +112,7 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
 
                     if (idleListener != null) {
                         try {
-                            mailboxManager.removeListener(sm.getPath(), idleListener, mailboxSession);
+                            mailboxManager.removeListener(sm.getMailboxId(), idleListener, mailboxSession);
                         } catch (MailboxException e) {
                                 LOGGER.error("Unable to remove idle listener for mailbox {}", sm.getPath(), e);
                         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index 9402ba1..f0eb68e 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -93,10 +93,11 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
 
         uidMsnConverter = new UidMsnConverter();
 
-        mailboxManager.addListener(path, this, mailboxSession);
-
         MessageManager messageManager = mailboxManager.getMailbox(path, mailboxSession);
         mailboxId = messageManager.getId();
+
+        mailboxManager.addListener(mailboxId, this, mailboxSession);
+
         applicableFlags = messageManager.getApplicableFlags(mailboxSession);
         uidMsnConverter.addAll(ImmutableList.copyOf(
             messageManager.search(new SearchQuery(SearchQuery.all()), mailboxSession)));
@@ -122,7 +123,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
         MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
 
         try {
-            mailboxManager.removeListener(path, this, mailboxSession);
+            mailboxManager.removeListener(mailboxId, this, mailboxSession);
         } catch (MailboxException e) {
             LOGGER.error("Unable to remove listener {} from mailbox while closing it", this, e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d9bcebc7/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
index b640cba..12daae0 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
@@ -46,6 +46,7 @@ import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.store.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
@@ -74,6 +75,7 @@ public class SelectedMailboxImplTest {
     private MailboxPath mailboxPath;
     private ImapSession imapSession;
     private Mailbox mailbox;
+    private TestId mailboxId;
 
     @Before
     public void setUp() throws Exception {
@@ -83,6 +85,7 @@ public class SelectedMailboxImplTest {
         messageManager = mock(MessageManager.class);
         imapSession = mock(ImapSession.class);
         mailbox = mock(Mailbox.class);
+        mailboxId = TestId.of(42);
 
         when(mailboxManager.getMailbox(eq(mailboxPath), any(MailboxSession.class)))
             .thenReturn(messageManager);
@@ -90,6 +93,7 @@ public class SelectedMailboxImplTest {
             .thenReturn(new Flags());
         when(messageManager.search(any(SearchQuery.class), any(MailboxSession.class)))
             .then(delayedSearchAnswer());
+        when(messageManager.getId()).thenReturn(mailboxId);
 
         when(imapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mock(MailboxSession.class));
 
@@ -107,7 +111,7 @@ public class SelectedMailboxImplTest {
         final AtomicInteger successCount = new AtomicInteger(0);
         doAnswer(generateEmitEventAnswer(successCount))
             .when(mailboxManager)
-            .addListener(eq(mailboxPath), any(MailboxListener.class), any(MailboxSession.class));
+            .addListener(eq(mailboxId), any(MailboxListener.class), any(MailboxSession.class));
 
         SelectedMailboxImpl selectedMailbox = new SelectedMailboxImpl(
             mailboxManager,
@@ -122,7 +126,7 @@ public class SelectedMailboxImplTest {
         final AtomicInteger successCount = new AtomicInteger(0);
         doAnswer(generateEmitEventAnswer(successCount))
             .when(mailboxManager)
-            .addListener(eq(mailboxPath), any(MailboxListener.class), any(MailboxSession.class));
+            .addListener(eq(mailboxId), any(MailboxListener.class), any(MailboxSession.class));
 
         new SelectedMailboxImpl(
             mailboxManager,


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org