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