JAMES-2616 Strong Typing SessionId

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

Branch: refs/heads/master
Commit: 713c8240f126f5299c6b58df0ced8996e5675a68
Parents: 7406e00
Author: tran tien duc <dt...@linagora.com>
Authored: Mon Dec 3 16:38:08 2018 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Fri Dec 7 07:52:51 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/Event.java    |  6 +-
 .../apache/james/mailbox/MailboxListener.java   | 31 +++++-----
 .../apache/james/mailbox/MailboxSession.java    | 43 +++++++++++++-
 .../james/mailbox/mock/MockMailboxSession.java  |  8 +--
 .../spamassassin/SpamAssassinListenerTest.java  |  5 +-
 .../mailbox/store/SimpleMailboxSession.java     |  8 +--
 .../mailbox/store/StoreMailboxManager.java      |  6 +-
 .../james/mailbox/store/event/EventFactory.java | 61 ++++++++++++++------
 .../store/event/MailboxEventDispatcher.java     |  1 +
 .../mailbox/store/event/MessageMoveEvent.java   | 13 +++--
 .../store/MailboxEventDispatcherTest.java       |  4 +-
 .../mailbox/store/json/EventSerializerTest.java |  0
 .../processor/base/SelectedMailboxImpl.java     | 10 +++-
 .../james/imap/processor/CopyProcessorTest.java |  9 +--
 .../james/imap/processor/MoveProcessorTest.java |  9 +--
 .../processor/base/SelectedMailboxImplTest.java |  5 +-
 16 files changed, 153 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java
index 7282cb9..4e80830 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.mailbox;
 
+import java.util.Optional;
+
 import org.apache.james.core.User;
 
 public interface Event {
@@ -28,7 +30,7 @@ public interface Event {
         return getSession().getUser().getCoreUser();
     }
 
-    default long getSessionId() {
-        return getSession().getSessionId();
+    default Optional<MailboxSession.SessionId> getSessionId() {
+        return Optional.ofNullable(getSession().getSessionId());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 9e9c228..eb80e4b 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -149,8 +149,8 @@ public interface MailboxListener {
             }
 
             @Override
-            public long getSessionId() {
-                return 0;
+            public SessionId getSessionId() {
+                return MailboxSession.SessionId.random();
             }
 
             @Override
@@ -198,7 +198,7 @@ public interface MailboxListener {
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
-        private final long sessionId;
+        private final Optional<MailboxSession.SessionId> sessionId;
 
         @Deprecated
         public MailboxEvent(MailboxSession session, MailboxPath path, 
MailboxId mailboxId) {
@@ -211,11 +211,10 @@ public interface MailboxListener {
                 .map(MailboxSession.User::getCoreUser)
                 .orElse(null);
             this.sessionId = Optional.ofNullable(session)
-                .map(MailboxSession::getSessionId)
-                .orElse(0L);
+                .map(MailboxSession::getSessionId);
         }
 
-        public MailboxEvent(long sessionId, User user, MailboxPath path, 
MailboxId mailboxId) {
+        public MailboxEvent(Optional<MailboxSession.SessionId> sessionId, User 
user, MailboxPath path, MailboxId mailboxId) {
             this.user = user;
             this.path = path;
             this.mailboxId = mailboxId;
@@ -253,7 +252,7 @@ public interface MailboxListener {
          * @return sessionId
          */
         @Override
-        public long getSessionId() {
+        public Optional<MailboxSession.SessionId> getSessionId() {
             return sessionId;
         }
 
@@ -299,7 +298,7 @@ public interface MailboxListener {
             this.totalDeletedSize = totalDeletedSize;
         }
 
-        public MailboxDeletion(long sessionId, User user, MailboxPath path, 
QuotaRoot quotaRoot, QuotaCount deletedMessageCOunt, QuotaSize totalDeletedSize,
+        public MailboxDeletion(Optional<MailboxSession.SessionId> sessionId, 
User user, MailboxPath path, QuotaRoot quotaRoot, QuotaCount 
deletedMessageCOunt, QuotaSize totalDeletedSize,
                                MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
             this.quotaRoot = quotaRoot;
@@ -334,7 +333,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public MailboxAdded(long sessionId, User user, MailboxPath path, 
MailboxId mailboxId) {
+        public MailboxAdded(Optional<MailboxSession.SessionId> sessionId, User 
user, MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
     }
@@ -353,7 +352,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public MailboxRenamed(long sessionId, User user, MailboxPath path, 
MailboxId mailboxId) {
+        public MailboxRenamed(Optional<MailboxSession.SessionId> sessionId, 
User user, MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
 
@@ -379,7 +378,7 @@ public interface MailboxListener {
             this.aclDiff = aclDiff;
         }
 
-        public MailboxACLUpdated(long sessionId, User user, MailboxPath path, 
ACLDiff aclDiff, MailboxId mailboxId) {
+        public MailboxACLUpdated(Optional<MailboxSession.SessionId> sessionId, 
User user, MailboxPath path, ACLDiff aclDiff, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
             this.aclDiff = aclDiff;
         }
@@ -405,7 +404,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public MessageEvent(long sessionId, User user, MailboxPath path, 
MailboxId mailboxId) {
+        public MessageEvent(Optional<MailboxSession.SessionId> sessionId, User 
user, MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
 
@@ -424,7 +423,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public MetaDataHoldingEvent(long sessionId, User user, MailboxPath 
path, MailboxId mailboxId) {
+        public MetaDataHoldingEvent(Optional<MailboxSession.SessionId> 
sessionId, User user, MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
 
@@ -449,7 +448,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public Expunged(long sessionId, User user, MailboxPath path, MailboxId 
mailboxId) {
+        public Expunged(Optional<MailboxSession.SessionId> sessionId, User 
user, MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
 
@@ -477,7 +476,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public FlagsUpdated(long sessionId, User user, MailboxPath path, 
MailboxId mailboxId) {
+        public FlagsUpdated(Optional<MailboxSession.SessionId> sessionId, User 
user, MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
 
@@ -499,7 +498,7 @@ public interface MailboxListener {
             super(session, path, mailboxId);
         }
 
-        public Added(long sessionId, User user, MailboxPath path, MailboxId 
mailboxId) {
+        public Added(Optional<MailboxSession.SessionId> sessionId, User user, 
MailboxPath path, MailboxId mailboxId) {
             super(sessionId, user, path, mailboxId);
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
index 50136b9..e2c00f9 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
@@ -23,12 +23,53 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
 
 /**
  * Mailbox session.
  */
 public interface MailboxSession {
 
+    class SessionId {
+
+        public static SessionId of(long sessionId) {
+            return new SessionId(sessionId);
+        }
+
+        private final long sessionId;
+
+        private SessionId(long sessionId) {
+            this.sessionId = sessionId;
+        }
+
+        public long getValue() {
+            return sessionId;
+        }
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof SessionId) {
+                SessionId that = (SessionId) o;
+
+                return Objects.equals(this.sessionId, that.sessionId);
+            }
+            return false;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(sessionId);
+        }
+
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(this)
+                .add("sessionId", sessionId)
+                .toString();
+        }
+    }
 
     /**
      * Id which will be used for a System session
@@ -59,7 +100,7 @@ public interface MailboxSession {
      * 
      * @return session id
      */
-    long getSessionId();
+    SessionId getSessionId();
 
     /**
      * Is this session open?

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
index 71d32a3..608f0a3 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
@@ -32,15 +32,15 @@ public class MockMailboxSession implements MailboxSession {
     private final User user;
     private final Map<Object, Object> attrs = new HashMap<>();
     private static final Random RANDOM = new Random();
-    private final long sessionId;
+    private final SessionId sessionId;
     private final SessionType type;
     private boolean open;
     
     public MockMailboxSession(String username) {
-        this(username, RANDOM.nextLong());
+        this(username, SessionId.of(RANDOM.nextLong()));
     }
 
-    public MockMailboxSession(String username, long sessionId) {
+    public MockMailboxSession(String username, SessionId sessionId) {
         this.user = new User() {
 
             @Override
@@ -92,7 +92,7 @@ public class MockMailboxSession implements MailboxSession {
     }
 
     @Override
-    public long getSessionId() {
+    public SessionId getSessionId() {
         return sessionId;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
 
b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
index 19e7755..9f4c7ae 100644
--- 
a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
+++ 
b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.when;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
+import java.util.Optional;
 
 import javax.mail.Flags;
 import javax.mail.util.SharedByteArrayInputStream;
@@ -251,7 +252,7 @@ public class SpamAssassinListenerTest {
         SimpleMailboxMessage message = createMessage(inboxId);
         EventFactory eventFactory = new EventFactory();
         AddedImpl addedEvent = eventFactory.new AddedImpl(
-                MAILBOX_SESSION.getSessionId(),
+                Optional.of(MAILBOX_SESSION.getSessionId()),
                 MAILBOX_SESSION.getUser().getCoreUser(),
                 inbox,
                 ImmutableSortedMap.of(MessageUid.of(45), new 
SimpleMessageMetaData(message)),
@@ -267,7 +268,7 @@ public class SpamAssassinListenerTest {
         SimpleMailboxMessage message = createMessage(mailboxId1);
         EventFactory eventFactory = new EventFactory();
         AddedImpl addedEvent = eventFactory.new AddedImpl(
-                MAILBOX_SESSION.getSessionId(),
+                Optional.of(MAILBOX_SESSION.getSessionId()),
                 MAILBOX_SESSION.getUser().getCoreUser(),
                 mailbox1,
                 ImmutableSortedMap.of(MessageUid.of(45), new 
SimpleMessageMetaData(message)),

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
index e24f6ac..3d2101c 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
@@ -40,7 +40,7 @@ public class SimpleMailboxSession implements MailboxSession, 
MailboxSession.User
 
     private final String personalSpace;
     
-    private final long sessionId;
+    private final SessionId sessionId;
 
     private final String userName;
     
@@ -57,12 +57,12 @@ public class SimpleMailboxSession implements 
MailboxSession, MailboxSession.User
     private final SessionType type;
 
     
-    public SimpleMailboxSession(long sessionId, String userName, String 
password,
+    public SimpleMailboxSession(SessionId sessionId, String userName, String 
password,
                                 List<Locale> localePreferences, char 
pathSeparator, SessionType type) {
         this(sessionId, userName, password, localePreferences, new 
ArrayList<>(), null, pathSeparator, type);
     }
 
-    public SimpleMailboxSession(long sessionId, String userName, String 
password,
+    public SimpleMailboxSession(SessionId sessionId, String userName, String 
password,
                                 List<Locale> localePreferences, List<String> 
sharedSpaces, String otherUsersSpace, char pathSeparator, SessionType type) {
         this.sessionId = sessionId;
         this.userName = userName;
@@ -88,7 +88,7 @@ public class SimpleMailboxSession implements MailboxSession, 
MailboxSession.User
     }
 
     @Override
-    public long getSessionId() {
+    public SessionId getSessionId() {
         return sessionId;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/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 7f3d040..b978ed8 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
@@ -357,7 +357,11 @@ public class StoreMailboxManager implements MailboxManager 
{
      */
 
     protected MailboxSession createSession(String userName, String password, 
SessionType type) {
-        return new SimpleMailboxSession(randomId(), userName, password, new 
ArrayList<>(), getDelimiter(), type);
+        return new SimpleMailboxSession(newSessionId(), userName, password, 
new ArrayList<>(), getDelimiter(), type);
+    }
+
+    private MailboxSession.SessionId newSessionId() {
+        return MailboxSession.SessionId.of(randomId());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
index 483101c..2b8632e 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
@@ -21,12 +21,14 @@ package org.apache.james.mailbox.store.event;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.SortedMap;
 
 import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.acl.ACLDiff;
 import org.apache.james.mailbox.model.MailboxId;
@@ -53,7 +55,7 @@ public class EventFactory {
         private final Map<MessageUid, MailboxMessage> availableMessages;
         private final Mailbox mailbox;
 
-        public AddedImpl(long sessionId, User user, Mailbox mailbox, 
SortedMap<MessageUid, MessageMetaData> uids, Map<MessageUid, MailboxMessage> 
availableMessages) {
+        public AddedImpl(Optional<MailboxSession.SessionId> sessionId, User 
user, Mailbox mailbox, SortedMap<MessageUid, MessageMetaData> uids, 
Map<MessageUid, MailboxMessage> availableMessages) {
             super(sessionId, user, new StoreMailboxPath(mailbox), 
mailbox.getMailboxId());
             this.added = ImmutableMap.copyOf(uids);
             this.mailbox = mailbox;
@@ -84,7 +86,7 @@ public class EventFactory {
         private final Map<MessageUid, MessageMetaData> uids;
         private final Mailbox mailbox;
 
-        public ExpungedImpl(long sessionId, User user, Mailbox mailbox,  
Map<MessageUid, MessageMetaData> uids) {
+        public ExpungedImpl(Optional<MailboxSession.SessionId> sessionId, User 
user, Mailbox mailbox,  Map<MessageUid, MessageMetaData> uids) {
             super(sessionId, user,  new StoreMailboxPath(mailbox), 
mailbox.getMailboxId());
             this.uids = ImmutableMap.copyOf(uids);
             this.mailbox = mailbox;
@@ -113,7 +115,7 @@ public class EventFactory {
 
         private final List<UpdatedFlags> uFlags;
 
-        public FlagsUpdatedImpl(long sessionId, User user, Mailbox mailbox, 
List<MessageUid> uids, List<UpdatedFlags> uFlags) {
+        public FlagsUpdatedImpl(Optional<MailboxSession.SessionId> sessionId, 
User user, Mailbox mailbox, List<MessageUid> uids, List<UpdatedFlags> uFlags) {
             super(sessionId, user, new StoreMailboxPath(mailbox), 
mailbox.getMailboxId());
             this.uids = ImmutableList.copyOf(uids);
             this.uFlags = ImmutableList.copyOf(uFlags);
@@ -140,7 +142,7 @@ public class EventFactory {
     public final class MailboxDeletionImpl extends 
MailboxListener.MailboxDeletion implements MailboxAware {
         private final Mailbox mailbox;
 
-        public MailboxDeletionImpl(long sessionId, User user, Mailbox mailbox, 
QuotaRoot quotaRoot, QuotaCount deletedMessageCount, QuotaSize 
totalDeletedSize) {
+        public MailboxDeletionImpl(Optional<MailboxSession.SessionId> 
sessionId, User user, Mailbox mailbox, QuotaRoot quotaRoot, QuotaCount 
deletedMessageCount, QuotaSize totalDeletedSize) {
             super(sessionId, user, new StoreMailboxPath(mailbox), quotaRoot, 
deletedMessageCount, totalDeletedSize, mailbox.getMailboxId());
             this.mailbox = mailbox;
         }
@@ -157,7 +159,7 @@ public class EventFactory {
 
         private final Mailbox mailbox;
 
-        public MailboxAddedImpl(long sessionId, User user, Mailbox mailbox) {
+        public MailboxAddedImpl(Optional<MailboxSession.SessionId> sessionId, 
User user, Mailbox mailbox) {
             super(sessionId, user,  new StoreMailboxPath(mailbox), 
mailbox.getMailboxId());
             this.mailbox = mailbox;
         }
@@ -175,7 +177,7 @@ public class EventFactory {
         private final MailboxPath newPath;
         private final Mailbox newMailbox;
 
-        public MailboxRenamedEventImpl(long sessionId, User user, MailboxPath 
oldPath, Mailbox newMailbox) {
+        public MailboxRenamedEventImpl(Optional<MailboxSession.SessionId> 
sessionId, User user, MailboxPath oldPath, Mailbox newMailbox) {
             super(sessionId, user, oldPath, newMailbox.getMailboxId());
             this.newPath = new StoreMailboxPath(newMailbox);
             this.newMailbox = newMailbox;
@@ -192,38 +194,63 @@ public class EventFactory {
         }
     }
 
-    public MailboxListener.Added added(long sessionId, User user, 
SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox, Map<MessageUid, 
MailboxMessage> cachedMessages) {
-        return new AddedImpl(sessionId, user, mailbox, uids, cachedMessages);
+    public MailboxListener.Added added(Optional<MailboxSession.SessionId> 
maybeSessionId, User user, SortedMap<MessageUid, MessageMetaData> uids, Mailbox 
mailbox, Map<MessageUid, MailboxMessage> cachedMessages) {
+        return new AddedImpl(maybeSessionId, user, mailbox, uids, 
cachedMessages);
     }
 
-    public MailboxListener.Expunged expunged(long sessionId, User user,  
Map<MessageUid, MessageMetaData> uids, Mailbox mailbox) {
+    public MailboxListener.Added added(MailboxSession.SessionId sessionId, 
User user, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox, 
Map<MessageUid, MailboxMessage> cachedMessages) {
+        return added(Optional.ofNullable(sessionId), user, uids, mailbox, 
cachedMessages);
+    }
+
+    public MailboxListener.Expunged 
expunged(Optional<MailboxSession.SessionId> sessionId, User user, 
Map<MessageUid, MessageMetaData> uids, Mailbox mailbox) {
         return new ExpungedImpl(sessionId, user, mailbox, uids);
     }
 
-    public MailboxListener.FlagsUpdated flagsUpdated(long sessionId, User 
user, List<MessageUid> uids, Mailbox mailbox, List<UpdatedFlags> uflags) {
+    public MailboxListener.Expunged expunged(MailboxSession.SessionId 
sessionId, User user,  Map<MessageUid, MessageMetaData> uids, Mailbox mailbox) {
+        return expunged(Optional.ofNullable(sessionId), user, uids, mailbox);
+    }
+
+    public MailboxListener.FlagsUpdated 
flagsUpdated(Optional<MailboxSession.SessionId> sessionId, User user, 
List<MessageUid> uids, Mailbox mailbox, List<UpdatedFlags> uflags) {
         return new FlagsUpdatedImpl(sessionId, user, mailbox, uids, uflags);
     }
 
-    public MailboxListener.MailboxRenamed mailboxRenamed(long sessionId, User 
user, MailboxPath from, Mailbox to) {
+    public MailboxListener.FlagsUpdated flagsUpdated(MailboxSession.SessionId 
sessionId, User user, List<MessageUid> uids, Mailbox mailbox, 
List<UpdatedFlags> uflags) {
+        return flagsUpdated(Optional.ofNullable(sessionId), user, uids, 
mailbox, uflags);
+    }
+
+    public MailboxListener.MailboxRenamed 
mailboxRenamed(Optional<MailboxSession.SessionId> sessionId, User user, 
MailboxPath from, Mailbox to) {
         return new MailboxRenamedEventImpl(sessionId, user, from, to);
     }
 
-    public MailboxListener.MailboxDeletion mailboxDeleted(long sessionId, User 
user, Mailbox mailbox, QuotaRoot quotaRoot,
+    public MailboxListener.MailboxRenamed 
mailboxRenamed(MailboxSession.SessionId sessionId, User user, MailboxPath from, 
Mailbox to) {
+        return mailboxRenamed(Optional.ofNullable(sessionId), user, from, to);
+    }
+
+    public MailboxListener.MailboxDeletion 
mailboxDeleted(Optional<MailboxSession.SessionId> sessionId, User user, Mailbox 
mailbox, QuotaRoot quotaRoot,
                                                           QuotaCount 
deletedMessageCount, QuotaSize totalDeletedSize) {
         return new MailboxDeletionImpl(sessionId, user, mailbox, quotaRoot, 
deletedMessageCount, totalDeletedSize);
     }
 
-    public MailboxListener.MailboxAdded mailboxAdded(long sessionId, User 
user, Mailbox mailbox) {
+    public MailboxListener.MailboxDeletion 
mailboxDeleted(MailboxSession.SessionId sessionId, User user, Mailbox mailbox, 
QuotaRoot quotaRoot,
+                                                          QuotaCount 
deletedMessageCount, QuotaSize totalDeletedSize) {
+        return new MailboxDeletionImpl(Optional.ofNullable(sessionId), user, 
mailbox, quotaRoot, deletedMessageCount, totalDeletedSize);
+    }
+
+    public MailboxListener.MailboxAdded 
mailboxAdded(Optional<MailboxSession.SessionId> sessionId, User user, Mailbox 
mailbox) {
         return new MailboxAddedImpl(sessionId, user, mailbox);
     }
 
-    public MailboxListener.MailboxACLUpdated aclUpdated(long sessionId, User 
user, MailboxPath mailboxPath, ACLDiff aclDiff, MailboxId mailboxId) {
-        return new MailboxListener.MailboxACLUpdated(sessionId, user, 
mailboxPath, aclDiff, mailboxId);
+    public MailboxListener.MailboxAdded mailboxAdded(MailboxSession.SessionId 
sessionId, User user, Mailbox mailbox) {
+        return new MailboxAddedImpl(Optional.ofNullable(sessionId), user, 
mailbox);
+    }
+
+    public MailboxListener.MailboxACLUpdated 
aclUpdated(MailboxSession.SessionId sessionId, User user, MailboxPath 
mailboxPath, ACLDiff aclDiff, MailboxId mailboxId) {
+        return new 
MailboxListener.MailboxACLUpdated(Optional.ofNullable(sessionId), user, 
mailboxPath, aclDiff, mailboxId);
     }
 
-    public MessageMoveEvent moved(long sessionId, User user, MessageMoves 
messageMoves, Map<MessageUid, MailboxMessage> messages) {
+    public MessageMoveEvent moved(MailboxSession.SessionId sessionId, User 
user, MessageMoves messageMoves, Map<MessageUid, MailboxMessage> messages) {
         return MessageMoveEvent.builder()
-                .sessionId(sessionId)
+                .sessionId(Optional.ofNullable(sessionId))
                 .user(user)
                 .messageMoves(messageMoves)
                 .messages(messages)

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
index c7df6a5..1ae5ca0 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.store.event;
 import java.time.Instant;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.SortedMap;
 
 import javax.inject.Inject;

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MessageMoveEvent.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MessageMoveEvent.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MessageMoveEvent.java
index 3526af2..5ba1ddf 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MessageMoveEvent.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MessageMoveEvent.java
@@ -19,6 +19,7 @@
 package org.apache.james.mailbox.store.event;
 
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.james.core.User;
 import org.apache.james.mailbox.Event;
@@ -40,7 +41,7 @@ public class MessageMoveEvent implements Event {
 
     public static class Builder {
 
-        private long sessionId;
+        private Optional<MailboxSession.SessionId> sessionId;
         private User user;
         private MessageMoves messageMoves;
         private ImmutableMap.Builder<MessageUid, MailboxMessage> 
messagesBuilder;
@@ -50,12 +51,12 @@ public class MessageMoveEvent implements Event {
         }
 
         public Builder session(MailboxSession session) {
-            this.sessionId = session.getSessionId();
+            this.sessionId = Optional.ofNullable(session.getSessionId());
             this.user = session.getUser().getCoreUser();
             return this;
         }
 
-        public Builder sessionId(long sessionId) {
+        public Builder sessionId(Optional<MailboxSession.SessionId> sessionId) 
{
             this.sessionId = sessionId;
             return this;
         }
@@ -86,13 +87,13 @@ public class MessageMoveEvent implements Event {
         }
     }
 
-    private final long sessionId;
+    private final Optional<MailboxSession.SessionId> sessionId;
     private final User user;
     private final MessageMoves messageMoves;
     private final Map<MessageUid, MailboxMessage> messages;
 
     @VisibleForTesting
-    MessageMoveEvent(long sessionId, User user, MessageMoves messageMoves, 
Map<MessageUid, MailboxMessage> messages) {
+    MessageMoveEvent(Optional<MailboxSession.SessionId> sessionId, User user, 
MessageMoves messageMoves, Map<MessageUid, MailboxMessage> messages) {
         this.sessionId = sessionId;
         this.user = user;
         this.messageMoves = messageMoves;
@@ -114,7 +115,7 @@ public class MessageMoveEvent implements Event {
     }
 
     @Override
-    public long getSessionId() {
+    public Optional<MailboxSession.SessionId> getSessionId() {
         return sessionId;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java
index d67b242..691ec79 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java
@@ -48,7 +48,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 public class MailboxEventDispatcherTest {
-    private static final int sessionId = 10;
+    private static final MailboxSession.SessionId SESSION_ID = 
MailboxSession.SessionId.of(10);
     private static final int MOD_SEQ = -1;
     public static final Condition<Event> INSTANCE_OF_EVENT_FLAGS_UPDATED = new 
Condition<Event>() {
         @Override
@@ -64,7 +64,7 @@ public class MailboxEventDispatcherTest {
     private MessageResult result;
     private Mailbox mailbox;
 
-    private MailboxSession session = new MockMailboxSession("test", sessionId);
+    private MailboxSession session = new MockMailboxSession("test", 
SESSION_ID);
 
     @Before
     public void setUp() throws Exception {

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/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 31a43d4..0ebaac5 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
@@ -66,7 +66,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, 
MailboxListener {
 
     private final ImapSession session;
 
-    private final long sessionId;
+    private final MailboxSession.SessionId sessionId;
     private final Set<MessageUid> flagUpdateUids = new TreeSet<>();
     private final Flags.Flag uninterestingFlag = Flags.Flag.RECENT;
     private final Set<MessageUid> expungedUids = new TreeSet<>();
@@ -329,7 +329,7 @@ public class SelectedMailboxImpl implements 
SelectedMailbox, MailboxListener {
     private void mailboxEvent(MailboxEvent mailboxEvent) {
         // Check if the event was for the mailbox we are observing
         if (mailboxEvent.getMailboxId().equals(getMailboxId())) {
-            final long eventSessionId = mailboxEvent.getSessionId();
+            MailboxSession.SessionId eventSessionId = 
extractSessionId(mailboxEvent);
             if (mailboxEvent instanceof MessageEvent) {
                 final MessageEvent messageEvent = (MessageEvent) mailboxEvent;
                 if (messageEvent instanceof Added) {
@@ -407,6 +407,12 @@ public class SelectedMailboxImpl implements 
SelectedMailbox, MailboxListener {
         }
     }
 
+    private MailboxSession.SessionId extractSessionId(MailboxEvent 
mailboxEvent) {
+        return mailboxEvent.getSessionId()
+            .orElseThrow(() -> new RuntimeException(String.format("Event of of 
mailbox %s does not carry sessionId",
+                mailboxEvent.getMailboxId().serialize())));
+    }
+
     @Override
     public synchronized int msn(MessageUid uid) {
         return uidMsnConverter.getMsn(uid).orElse(NO_SUCH_MESSAGE);

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
index db5e8c4..245f90f 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
@@ -57,6 +57,7 @@ import com.google.common.collect.Lists;
 public class CopyProcessorTest {
 
     public static final String TAG = "TAG";
+    private static final MailboxSession.SessionId SESSION_ID_42 = 
MailboxSession.SessionId.of(42L);
 
     private CopyProcessor testee;
     private ImapProcessor mockNextProcessor;
@@ -85,7 +86,7 @@ public class CopyProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);
@@ -123,7 +124,7 @@ public class CopyProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);
@@ -160,7 +161,7 @@ public class CopyProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);
@@ -191,7 +192,7 @@ public class CopyProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
index fd9785b..38fb706 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
@@ -60,6 +60,7 @@ import com.google.common.collect.Lists;
 public class MoveProcessorTest {
 
     public static final String TAG = "TAG";
+    private static final MailboxSession.SessionId SESSION_ID_42 = 
MailboxSession.SessionId.of(42L);
 
     private MoveProcessor testee;
     private ImapProcessor mockNextProcessor;
@@ -102,7 +103,7 @@ public class MoveProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);
@@ -142,7 +143,7 @@ public class MoveProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);
@@ -180,7 +181,7 @@ public class MoveProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);
@@ -211,7 +212,7 @@ public class MoveProcessorTest {
         MailboxSession.User user = mock(MailboxSession.User.class);
         when(user.getUserName()).thenReturn("username");
         when(mockMailboxSession.getUser()).thenReturn(user);
-        when(mockMailboxSession.getSessionId()).thenReturn(42L);
+        when(mockMailboxSession.getSessionId()).thenReturn(SESSION_ID_42);
         when(mockImapSession.getState()).thenReturn(ImapSessionState.SELECTED);
         
when(mockImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)).thenReturn(mockMailboxSession);
         MailboxPath inbox = MailboxPath.inbox(mockMailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/713c8240/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 d05ccf3..dfb1797 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
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.security.SecureRandom;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.TreeMap;
@@ -166,8 +167,10 @@ public class SelectedMailboxImplTest {
     }
 
     private void emitEvent(MailboxListener mailboxListener) {
+        SecureRandom random = new SecureRandom();
         TreeMap<MessageUid, MessageMetaData> result = new TreeMap<>();
         result.put(EMITTED_EVENT_UID, new 
SimpleMessageMetaData(EMITTED_EVENT_UID, MOD_SEQ, new Flags(), SIZE, new 
Date(), new DefaultMessageId()));
-        mailboxListener.event(new EventFactory().added(0L, mock(User.class), 
result, mailbox, ImmutableMap.of()));
+        mailboxListener.event(new 
EventFactory().added(MailboxSession.SessionId.of(random.nextLong()),
+            mock(User.class), result, mailbox, ImmutableMap.of()));
     }
 }


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

Reply via email to