You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/01/08 08:00:42 UTC

[23/47] james-project git commit: MAILBOX-364 EventFactory should expose a builder for FlagsUpdated event

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 <bt...@linagora.com>
Authored: Wed Dec 19 11:51:43 2018 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org