MAILBOX-364 EventFactory should expose a builder for Added 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/e829c8ed Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e829c8ed Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e829c8ed Branch: refs/heads/master Commit: e829c8edacc3839992bef750774cccdd08ee4378 Parents: 7ceb951 Author: Benoit Tellier <btell...@linagora.com> Authored: Wed Dec 19 13:31:29 2018 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Tue Jan 8 14:40:28 2019 +0700 ---------------------------------------------------------------------- .../spamassassin/SpamAssassinListenerTest.java | 22 ++++--- .../james/mailbox/store/event/EventFactory.java | 63 +++++++++++++++++--- .../store/event/MailboxEventDispatcher.java | 6 +- .../base/MailboxEventAnalyserTest.java | 22 +++---- .../processor/base/SelectedMailboxImplTest.java | 14 ++--- 5 files changed, 85 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/e829c8ed/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 0496ac5..ff0db16 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 @@ -37,7 +37,6 @@ import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageMoveEvent; -import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; @@ -58,14 +57,10 @@ import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage; import org.junit.Before; import org.junit.Test; -import com.google.common.collect.ImmutableSortedMap; - public class SpamAssassinListenerTest { - public static final String USER = "user"; private static final MailboxSession MAILBOX_SESSION = MailboxSessionUtil.create(USER); private static final int UID_VALIDITY = 43; - private static final MessageUid UID = MessageUid.of(45); private static final TestMessageId MESSAGE_ID = TestMessageId.of(45); private SpamAssassin spamAssassin; @@ -237,9 +232,11 @@ public class SpamAssassinListenerTest { public void eventShouldCallSpamAssassinHamLearningWhenTheMessageIsAddedInInbox() throws Exception { SimpleMailboxMessage message = createMessage(inbox); - ImmutableSortedMap<MessageUid, MessageMetaData> sortedMap = ImmutableSortedMap.of(UID, message.metaData()); - MailboxListener.Added addedEvent = new EventFactory().added( - MAILBOX_SESSION, sortedMap, inbox); + MailboxListener.Added addedEvent = new EventFactory().added() + .mailboxSession(MAILBOX_SESSION) + .mailbox(inbox) + .addMessage(message) + .build(); listener.event(addedEvent); @@ -250,10 +247,11 @@ public class SpamAssassinListenerTest { public void eventShouldNotCallSpamAssassinHamLearningWhenTheMessageIsAddedInAMailboxOtherThanInbox() throws Exception { SimpleMailboxMessage message = createMessage(mailbox1); - MailboxListener.Added addedEvent = new EventFactory().added( - MAILBOX_SESSION, - ImmutableSortedMap.of(UID, message.metaData()), - mailbox1); + MailboxListener.Added addedEvent = new EventFactory().added() + .mailboxSession(MAILBOX_SESSION) + .mailbox(mailbox1) + .addMessage(message) + .build(); listener.event(addedEvent); http://git-wip-us.apache.org/repos/asf/james-project/blob/e829c8ed/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 a05e561..cd8a38c 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,7 +21,6 @@ package org.apache.james.mailbox.store.event; import java.util.Collection; import java.util.Map; -import java.util.SortedMap; import org.apache.james.core.User; import org.apache.james.core.quota.QuotaCount; @@ -39,6 +38,7 @@ import org.apache.james.mailbox.model.MessageMoves; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.model.UpdatedFlags; import org.apache.james.mailbox.store.mail.model.Mailbox; +import org.apache.james.mailbox.store.mail.model.MailboxMessage; import com.github.steveash.guavate.Guavate; import com.google.common.base.Preconditions; @@ -93,6 +93,59 @@ public class EventFactory { } } + public abstract static class MessageMetaDataEventBuilder<T extends MessageMetaDataEventBuilder> extends MailboxEventBuilder<T> { + protected final ImmutableList.Builder<MessageMetaData> metaData; + + protected MessageMetaDataEventBuilder() { + metaData = ImmutableList.builder(); + } + + protected abstract T backReference(); + + public T addMessage(MailboxMessage message) { + this.addMetaData(message.metaData()); + return backReference(); + } + + public T addMessages(Iterable<MailboxMessage> messages) { + this.addMetaData(ImmutableList.copyOf(messages) + .stream() + .map(MailboxMessage::metaData) + .collect(Guavate.toImmutableList())); + return backReference(); + } + + public T addMetaData(MessageMetaData metaData) { + this.metaData.add(metaData); + return backReference(); + } + + public T addMetaData(Iterable<MessageMetaData> metaData) { + this.metaData.addAll(metaData); + return backReference(); + } + } + + public static class AddedBuilder extends MessageMetaDataEventBuilder<AddedBuilder> { + @Override + protected AddedBuilder backReference() { + return this; + } + + public MailboxListener.Added build() { + mailboxEventChecks(); + + return new MailboxListener.Added( + sessionId, + user, + path, + mailboxId, + metaData.build() + .stream() + .collect(Guavate.toImmutableSortedMap(MessageMetaData::getUid))); + } + } + public static class MailboxAddedBuilder extends MailboxEventBuilder<MailboxAddedBuilder> { @Override protected MailboxAddedBuilder backReference() { @@ -172,12 +225,8 @@ public class EventFactory { } } - public MailboxListener.Added added(MailboxSession session, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox) { - return added(session.getSessionId(), session.getUser(), uids, mailbox); - } - - public MailboxListener.Added added(MailboxSession.SessionId sessionId, User user, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox) { - return new MailboxListener.Added(sessionId, user, mailbox.generateAssociatedPath(), mailbox.getMailboxId(), uids); + public AddedBuilder added() { + return new AddedBuilder(); } public MailboxListener.Expunged expunged(MailboxSession session, Map<MessageUid, MessageMetaData> uids, Mailbox mailbox) { http://git-wip-us.apache.org/repos/asf/james-project/blob/e829c8ed/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 ca4076f..6684b8a 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 @@ -83,7 +83,11 @@ public class MailboxEventDispatcher { * @param mailbox The mailbox */ public void added(MailboxSession session, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox) { - event(eventFactory.added(session, uids, mailbox)); + event(eventFactory.added() + .mailbox(mailbox) + .mailboxSession(session) + .addMetaData(uids.values()) + .build()); } public void added(MailboxSession session, Mailbox mailbox, MailboxMessage mailboxMessage) { http://git-wip-us.apache.org/repos/asf/james-project/blob/e829c8ed/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 9581044..165ff04 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 @@ -53,7 +53,6 @@ import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSortedMap; public class MailboxEventAnalyserTest { private static final MessageUid UID = MessageUid.of(900); @@ -107,7 +106,6 @@ public class MailboxEventAnalyserTest { } } - private static final MessageUid MESSAGE_UID = MessageUid.of(1); private static final MailboxSession MAILBOX_SESSION = MailboxSessionUtil.create("user"); private static final MailboxSession OTHER_MAILBOX_SESSION = MailboxSessionUtil.create("user"); @@ -116,6 +114,11 @@ public class MailboxEventAnalyserTest { private static final TestId MAILBOX_ID = TestId.of(36); private static final int UID_VALIDITY = 1024; private static final SimpleMailbox DEFAULT_MAILBOX = new SimpleMailbox(MAILBOX_PATH, UID_VALIDITY, MAILBOX_ID); + private static final MailboxListener.Added ADDED = new EventFactory().added() + .mailboxSession(MAILBOX_SESSION) + .mailbox(DEFAULT_MAILBOX) + .addMetaData(new MessageMetaData(MessageUid.of(11), 0, new Flags(), 45, new Date(), new DefaultMessageId())) + .build(); private SelectedMailboxImpl testee; private EventFactory eventFactory; @@ -164,23 +167,14 @@ public class MailboxEventAnalyserTest { @Test public void testShouldBeNoSizeChangeOnAdded() { - MailboxListener.Added mailboxAdded = eventFactory.added( - MAILBOX_SESSION, - ImmutableSortedMap.of(MessageUid.of(11), - new MessageMetaData(MessageUid.of(11), 0, new Flags(), 45, new Date(), new DefaultMessageId())), - DEFAULT_MAILBOX); - testee.event(mailboxAdded); + testee.event(ADDED); + assertThat(testee.isSizeChanged()).isTrue(); } @Test public void testShouldNoSizeChangeAfterReset() { - MailboxListener.Added mailboxAdded = eventFactory.added( - MAILBOX_SESSION, - ImmutableSortedMap.of(MessageUid.of(11), - new MessageMetaData(MessageUid.of(11), 0, new Flags(), 45, new Date(), new DefaultMessageId())), - DEFAULT_MAILBOX); - testee.event(mailboxAdded); + testee.event(ADDED); testee.resetEvents(); assertThat(testee.isSizeChanged()).isFalse(); http://git-wip-us.apache.org/repos/asf/james-project/blob/e829c8ed/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 437c41f..86a5023 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,10 +26,8 @@ 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; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; @@ -37,12 +35,12 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.mail.Flags; -import org.apache.james.core.User; import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.model.MailboxConstants; @@ -165,10 +163,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 MessageMetaData(EMITTED_EVENT_UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId())); - mailboxListener.event(new EventFactory().added(MailboxSession.SessionId.of(random.nextLong()), - mock(User.class), result, mailbox)); + mailboxListener.event(new EventFactory().added() + .mailbox(mailbox) + .addMetaData(new MessageMetaData(EMITTED_EVENT_UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId())) + .mailboxSession(MailboxSessionUtil.create("user")) + .build()); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org