MAILBOX-364 EventFactory should expose a builder for FlagsUpdated event
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/886ad168 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/886ad168 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/886ad168 Branch: refs/heads/master Commit: 886ad168872a4cc894c45fa4cb1e0b5b40e1c182 Parents: 8550ce9 Author: Benoit Tellier <btell...@linagora.com> Authored: Wed Dec 19 11:51:43 2018 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Tue Jan 8 14:40:28 2019 +0700 ---------------------------------------------------------------------- .../james/mailbox/store/event/EventFactory.java | 87 ++++++++++---- .../store/event/MailboxEventDispatcher.java | 8 +- .../base/MailboxEventAnalyserTest.java | 120 +++++++++---------- 3 files changed, 130 insertions(+), 85 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/886ad168/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 13c6f9d..e87f967 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 @@ -20,7 +20,6 @@ package org.apache.james.mailbox.store.event; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.SortedMap; @@ -41,57 +40,103 @@ import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.model.UpdatedFlags; import org.apache.james.mailbox.store.mail.model.Mailbox; +import com.github.steveash.guavate.Guavate; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; public class EventFactory { - public static class MailboxAddedBuilder { - private MailboxPath path; - private MailboxId mailboxId; - private User user; - private MailboxSession.SessionId sessionId; + public abstract static class MailboxEventBuilder<T extends MailboxEventBuilder> { + protected MailboxPath path; + protected MailboxId mailboxId; + protected User user; + protected MailboxSession.SessionId sessionId; - public MailboxAddedBuilder mailbox(Mailbox mailbox) { + abstract T backReference(); + + public T mailbox(Mailbox mailbox) { path(mailbox.generateAssociatedPath()); mailboxId(mailbox.getMailboxId()); - return this; + return backReference(); } - public MailboxAddedBuilder mailboxSession(MailboxSession mailboxSession) { + public T mailboxSession(MailboxSession mailboxSession) { user(mailboxSession.getUser()); sessionId(mailboxSession.getSessionId()); - return this; + return backReference(); } - public MailboxAddedBuilder mailboxId(MailboxId mailboxId) { + public T mailboxId(MailboxId mailboxId) { this.mailboxId = mailboxId; - return this; + return backReference(); } - public MailboxAddedBuilder path(MailboxPath path) { + public T path(MailboxPath path) { this.path = path; - return this; + return backReference(); } - public MailboxAddedBuilder user(User user) { + public T user(User user) { this.user = user; - return this; + return backReference(); } - public MailboxAddedBuilder sessionId(MailboxSession.SessionId sessionId) { + public T sessionId(MailboxSession.SessionId sessionId) { this.sessionId = sessionId; - return this; + return backReference(); } - public MailboxListener.MailboxAdded build() { + void mailboxEventChecks() { Preconditions.checkState(user != null, "Field `user` is compulsory"); Preconditions.checkState(mailboxId != null, "Field `mailboxId` is compulsory"); Preconditions.checkState(path != null, "Field `path` is compulsory"); Preconditions.checkState(sessionId != null, "Field `sessionId` is compulsory"); + } + } + + public static class MailboxAddedBuilder extends MailboxEventBuilder<MailboxAddedBuilder> { + @Override + MailboxAddedBuilder backReference() { + return this; + } + + public MailboxListener.MailboxAdded build() { + mailboxEventChecks(); return new MailboxListener.MailboxAdded(sessionId, user, path, mailboxId); } } + public static class FlagsUpdatedBuilder extends MailboxEventBuilder<FlagsUpdatedBuilder> { + private final ImmutableList.Builder<UpdatedFlags> updatedFlags; + + public FlagsUpdatedBuilder() { + updatedFlags = ImmutableList.builder(); + } + + public FlagsUpdatedBuilder updatedFags(Iterable<UpdatedFlags> updatedFlags) { + this.updatedFlags.addAll(updatedFlags); + return this; + } + + public FlagsUpdatedBuilder updatedFags(UpdatedFlags updatedFlags) { + this.updatedFlags.add(updatedFlags); + return this; + } + + @Override + FlagsUpdatedBuilder backReference() { + return this; + } + + public MailboxListener.FlagsUpdated build() { + mailboxEventChecks(); + + ImmutableList<UpdatedFlags> updatedFlags = this.updatedFlags.build(); + + return new MailboxListener.FlagsUpdated(sessionId, user, path, mailboxId, updatedFlags); + } + } + public MailboxListener.Added added(MailboxSession session, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox) { return added(session.getSessionId(), session.getUser(), uids, mailbox); } @@ -108,8 +153,8 @@ public class EventFactory { return new MailboxListener.Expunged(sessionId, user, mailbox.generateAssociatedPath(), mailbox.getMailboxId(), uids); } - public MailboxListener.FlagsUpdated flagsUpdated(MailboxSession session, Mailbox mailbox, List<UpdatedFlags> uflags) { - return new MailboxListener.FlagsUpdated(session.getSessionId(), session.getUser(), mailbox.generateAssociatedPath(), mailbox.getMailboxId(), uflags); + public FlagsUpdatedBuilder flagsUpdated() { + return new FlagsUpdatedBuilder(); } public MailboxListener.MailboxRenamed mailboxRenamed(MailboxSession session, MailboxPath from, Mailbox to) { http://git-wip-us.apache.org/repos/asf/james-project/blob/886ad168/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 fa0b0bc..aabd204 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 @@ -125,7 +125,11 @@ public class MailboxEventDispatcher { * registered MailboxListener will get triggered then */ public void flagsUpdated(MailboxSession session, Mailbox mailbox, List<UpdatedFlags> uflags) { - event(eventFactory.flagsUpdated(session, mailbox, uflags)); + event(eventFactory.flagsUpdated() + .mailbox(mailbox) + .mailboxSession(session) + .updatedFags(uflags) + .build()); } public void flagsUpdated(MailboxSession session, Mailbox mailbox, UpdatedFlags uflags) { @@ -153,7 +157,7 @@ public class MailboxEventDispatcher { * MailboxListener will get triggered then */ public void mailboxAdded(MailboxSession session, Mailbox mailbox) { - listener.event(eventFactory.mailboxAdded() + event(eventFactory.mailboxAdded() .mailbox(mailbox) .mailboxSession(session) .build()); http://git-wip-us.apache.org/repos/asf/james-project/blob/886ad168/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java index 1dc277a..9581044 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java @@ -56,6 +56,25 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSortedMap; public class MailboxEventAnalyserTest { + private static final MessageUid UID = MessageUid.of(900); + private static final UpdatedFlags ADD_RECENT_UPDATED_FLAGS = UpdatedFlags.builder() + .uid(UID) + .modSeq(-1) + .oldFlags(new Flags()) + .newFlags(new Flags(Flags.Flag.RECENT)) + .build(); + private static final UpdatedFlags ADD_ANSWERED_UPDATED_FLAGS = UpdatedFlags.builder() + .uid(UID) + .modSeq(-1) + .oldFlags(new Flags()) + .newFlags(new Flags(Flags.Flag.ANSWERED)) + .build(); + private static final UpdatedFlags NOOP_UPDATED_FLAGS = UpdatedFlags.builder() + .uid(UID) + .modSeq(-1) + .oldFlags(new Flags()) + .newFlags(new Flags()) + .build(); public static class SingleMessageResultIterator implements MessageResultIterator { private final MessageResult messageResult; @@ -169,15 +188,12 @@ public class MailboxEventAnalyserTest { @Test public void testShouldNotSetUidWhenNoSystemFlagChange() { - MailboxListener.FlagsUpdated update = eventFactory.flagsUpdated( - MAILBOX_SESSION, - DEFAULT_MAILBOX, - ImmutableList.of(UpdatedFlags.builder() - .uid(MessageUid.of(90)) - .modSeq(-1) - .oldFlags(new Flags()) - .newFlags(new Flags()) - .build())); + MailboxListener.FlagsUpdated update = new EventFactory().flagsUpdated() + .mailboxSession(MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .updatedFags(NOOP_UPDATED_FLAGS) + .build(); + testee.event(update); assertThat(testee.flagUpdateUids()).isEmpty(); @@ -185,36 +201,27 @@ public class MailboxEventAnalyserTest { @Test public void testShouldSetUidWhenSystemFlagChange() { - MessageUid uid = MessageUid.of(900); - - MailboxListener.FlagsUpdated update = eventFactory.flagsUpdated( - OTHER_MAILBOX_SESSION, - DEFAULT_MAILBOX, - ImmutableList.of(UpdatedFlags.builder() - .uid(uid) - .modSeq(-1) - .oldFlags(new Flags()) - .newFlags(new Flags(Flags.Flag.ANSWERED)) - .build())); + MailboxListener.FlagsUpdated update = new EventFactory().flagsUpdated() + .mailboxSession(OTHER_MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .updatedFags(ADD_ANSWERED_UPDATED_FLAGS) + .build(); + testee.event(update); - assertThat(testee.flagUpdateUids().iterator()).containsExactly(uid); + assertThat(testee.flagUpdateUids().iterator()).containsExactly(UID); } @Test public void testShouldClearFlagUidsUponReset() { - MessageUid uid = MessageUid.of(900); SelectedMailboxImpl analyser = this.testee; - - MailboxListener.FlagsUpdated update = eventFactory.flagsUpdated( - MAILBOX_SESSION, - DEFAULT_MAILBOX, - ImmutableList.of(UpdatedFlags.builder() - .uid(uid) - .modSeq(-1) - .oldFlags(new Flags()) - .newFlags(new Flags(Flags.Flag.ANSWERED)) - .build())); + + MailboxListener.FlagsUpdated update = new EventFactory().flagsUpdated() + .mailboxSession(MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .updatedFags(ADD_ANSWERED_UPDATED_FLAGS) + .build(); + analyser.event(update); analyser.event(update); analyser.deselect(); @@ -224,35 +231,27 @@ public class MailboxEventAnalyserTest { @Test public void testShouldSetUidWhenSystemFlagChangeDifferentSessionInSilentMode() { - MessageUid uid = MessageUid.of(900); - - MailboxListener.FlagsUpdated update = eventFactory.flagsUpdated( - OTHER_MAILBOX_SESSION, - DEFAULT_MAILBOX, - ImmutableList.of(UpdatedFlags.builder() - .uid(uid) - .modSeq(-1) - .oldFlags(new Flags()) - .newFlags(new Flags(Flags.Flag.ANSWERED)) - .build())); + MailboxListener.FlagsUpdated update = new EventFactory().flagsUpdated() + .mailboxSession(OTHER_MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .updatedFags(ADD_ANSWERED_UPDATED_FLAGS) + .build(); + testee.event(update); testee.setSilentFlagChanges(true); testee.event(update); - assertThat(testee.flagUpdateUids().iterator()).containsExactly(uid); + assertThat(testee.flagUpdateUids().iterator()).containsExactly(UID); } @Test public void testShouldNotSetUidWhenSystemFlagChangeSameSessionInSilentMode() { - MailboxListener.FlagsUpdated update = eventFactory.flagsUpdated( - MAILBOX_SESSION, - DEFAULT_MAILBOX, - ImmutableList.of(UpdatedFlags.builder() - .uid(MessageUid.of(345)) - .modSeq(-1) - .oldFlags(new Flags()) - .newFlags(new Flags()) - .build())); + MailboxListener.FlagsUpdated update = new EventFactory().flagsUpdated() + .mailboxSession(MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .updatedFags(NOOP_UPDATED_FLAGS) + .build(); + testee.event(update); testee.setSilentFlagChanges(true); testee.event(update); @@ -262,15 +261,12 @@ public class MailboxEventAnalyserTest { @Test public void testShouldNotSetUidWhenOnlyRecentFlagUpdated() { - MailboxListener.FlagsUpdated update = eventFactory.flagsUpdated( - MAILBOX_SESSION, - DEFAULT_MAILBOX, - ImmutableList.of(UpdatedFlags.builder() - .uid(MessageUid.of(886)) - .modSeq(-1) - .oldFlags(new Flags()) - .newFlags(new Flags(Flags.Flag.RECENT)) - .build())); + MailboxListener.FlagsUpdated update = new EventFactory().flagsUpdated() + .mailboxSession(MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .updatedFags(ADD_RECENT_UPDATED_FLAGS) + .build(); + testee.event(update); assertThat(testee.flagUpdateUids().iterator()).isEmpty(); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org