public EventConverter(MailboxConverter mailboxConverter) { this.eventFactory = new EventFactory(); this.mailboxConverter = mailboxConverter; }
/** * Should get called when a new message was added to a Mailbox. All * registered MailboxListener will get triggered then * * @param session The mailbox session * @param uids Sorted map with uids and message meta data * @param mailbox The mailbox */ public void added(MailboxSession session, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox, Map<MessageUid, MailboxMessage> cachedMessages) { listener.event(eventFactory.added(session, uids, mailbox, cachedMessages)); }
/** * Should get called when a Mailbox was added. All registered * MailboxListener will get triggered then */ public void mailboxAdded(MailboxSession session, Mailbox mailbox) { listener.event(eventFactory.mailboxAdded(session, mailbox)); }
switch (eventDataTransferObject.getType()) { case ADDED: return eventFactory.added(eventDataTransferObject.getSession().getMailboxSession(), retrieveMetadata(eventDataTransferObject.getMetaDataProxyMap()), mailbox, ImmutableMap.<MessageUid, MailboxMessage>of()); case DELETED: return eventFactory.expunged(eventDataTransferObject.getSession().getMailboxSession(), retrieveMetadata(eventDataTransferObject.getMetaDataProxyMap()), mailbox); case FLAGS: return eventFactory.flagsUpdated(eventDataTransferObject.getSession().getMailboxSession(), eventDataTransferObject.getUids(), mailbox, retrieveUpdatedFlags(eventDataTransferObject.getUpdatedFlags())); case MAILBOX_ADDED: return eventFactory.mailboxAdded(eventDataTransferObject.getSession().getMailboxSession(), mailbox); case MAILBOX_DELETED: return eventFactory.mailboxDeleted(eventDataTransferObject.getSession().getMailboxSession(), mailbox, eventDataTransferObject.getQuotaRoot().orElseThrow(() -> new EventNotValidException("Not a Deletion event, missing quotaRoot")), eventDataTransferObject.getDeletedMessageCount().orElseThrow(() -> new EventNotValidException("Not a Deletion event, missing quotaCount")), eventDataTransferObject.getTotalDeletedSize().orElseThrow(() -> new EventNotValidException("Not a Deletion event, missing quotaSize"))); case MAILBOX_RENAMED: return eventFactory.mailboxRenamed(eventDataTransferObject.getSession().getMailboxSession(), eventDataTransferObject.getFrom().getPath(), mailbox);
private void emitEvent(MailboxListener mailboxListener) { 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(mock(MailboxSession.class), result, mailbox, ImmutableMap.of())); } }
/** * Should get called when a Mailbox was deleted. All registered * MailboxListener will get triggered then */ public void mailboxDeleted(MailboxSession session, Mailbox mailbox, QuotaRoot quotaRoot, QuotaCount deletedMessageCount, QuotaSize totalDeletedSize) { listener.event(eventFactory.mailboxDeleted(session, mailbox, quotaRoot, deletedMessageCount, totalDeletedSize)); }
/** * Should get called when a Mailbox was renamed. All registered * MailboxListener will get triggered then */ public void mailboxRenamed(MailboxSession session, MailboxPath from, Mailbox to) { listener.event(eventFactory.mailboxRenamed(session, from, to)); }
/** * Should get called when a message was expunged from a Mailbox. All * registered MailboxListener will get triggered then * * @param session The mailbox session * @param uids Sorted map with uids and message meta data * @param mailbox The mailbox */ public void expunged(MailboxSession session, Map<MessageUid, MessageMetaData> uids, Mailbox mailbox) { if (!uids.isEmpty()) { listener.event(eventFactory.expunged(session, uids, mailbox)); } }
/** * Should get called when the message flags were update in a Mailbox. All * registered MailboxListener will get triggered then */ public void flagsUpdated(MailboxSession session, List<MessageUid> uids, Mailbox mailbox, List<UpdatedFlags> uflags) { if (!uids.isEmpty()) { listener.event(eventFactory.flagsUpdated(session, uids, mailbox, uflags)); } }
@Test void onceEventListenersShouldBeTriggeredOnceAcrossTheCluster() { SimpleMailbox simpleMailbox = new SimpleMailbox(MAILBOX_PATH_1, 42); simpleMailbox.setMailboxId(TestId.of(52)); TreeMap<MessageUid, MessageMetaData> uids = new TreeMap<>(); final MailboxListener.MailboxEvent event = new EventFactory().added(mailboxSession, uids, simpleMailbox, EMPTY_MESSAGE_CACHE); registeredDelegatingMailboxListener1.event(event); assertThat(eventCollectorOnce1.getEvents()).hasSize(1); assertThat(eventCollectorOnce2.getEvents()).isEmpty(); assertThat(eventCollectorOnce3.getEvents()).isEmpty(); }
@Test public void pathToIndexShouldBeNullifiedByDeletedEvents() { MailboxListener.MailboxEvent event = eventFactory.mailboxDeleted(session, MAILBOX); globalRegistration.event(event); assertThat(globalRegistration.getPathToIndex(INBOX)).isEqualTo(Optional.empty()); }
@Test void pathToIndexShouldBeModifiedByRenamedEvents() { MailboxListener.MailboxEvent event = eventFactory.mailboxRenamed(session, INBOX, NEW_MAILBOX); globalRegistration.event(event); assertThat(globalRegistration.getPathToIndex(INBOX).get()).isEqualTo(NEW_PATH); } }
@Test public void expungedEventsShouldBeReported() { TreeMap<MessageUid, MessageMetaData> treeMap = new TreeMap<>(); treeMap.put(UID, new SimpleMessageMetaData(UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId())); MailboxListener.MailboxEvent event = eventFactory.expunged(session, treeMap, MAILBOX); mailboxRegistration.event(event); assertThat(mailboxRegistration.getImpactingEvents(UID)).containsExactly(new MessageDeletedEvent(INBOX, UID)); }
@Test public void flagsEventsShouldBeReported() { MailboxListener.MailboxEvent event = eventFactory.flagsUpdated(session, Lists.newArrayList(UID), MAILBOX, Lists.newArrayList(UpdatedFlags.builder() .uid(UID) .modSeq(MOD_SEQ) .oldFlags(new Flags()) .newFlags(NEW_FLAGS) .build())); mailboxRegistration.event(event); assertThat(mailboxRegistration.getImpactingEvents(UID)).containsExactly(new FlagsMessageEvent(INBOX, UID, NEW_FLAGS)); }
@Test void mailboxEventListenersShouldBeTriggeredIfRegistered() { SimpleMailbox simpleMailbox = new SimpleMailbox(MAILBOX_PATH_1, 42); simpleMailbox.setMailboxId(TestId.of(52)); TreeMap<MessageUid, MessageMetaData> uids = new TreeMap<>(); final MailboxListener.MailboxEvent event = new EventFactory().added(mailboxSession, uids, simpleMailbox, EMPTY_MESSAGE_CACHE); registeredDelegatingMailboxListener1.event(event); assertThat(eventCollectorMailbox1.getEvents()).hasSize(1); assertThat(eventCollectorMailbox2.getEvents()).hasSize(1); assertThat(eventCollectorMailbox3.getEvents()).isEmpty(); }
@Inject public MailboxEventDispatcher(DelegatingMailboxListener delegatingMailboxListener) { this(delegatingMailboxListener, new EventFactory()); }
@Test public void addedEventsShouldNotBeReported() { TreeMap<MessageUid, MessageMetaData> treeMap = new TreeMap<>(); treeMap.put(UID, new SimpleMessageMetaData(UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId())); MailboxListener.MailboxEvent event = eventFactory.added(session, treeMap, MAILBOX, ImmutableMap.<MessageUid, MailboxMessage>of()); mailboxRegistration.event(event); assertThat(mailboxRegistration.getImpactingEvents(UID)).isEmpty(); }
@Test void pathToIndexShouldBeNullifiedByDeletedEvents() { QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty()); QuotaCount quotaCount = QuotaCount.count(123); QuotaSize quotaSize = QuotaSize.size(456); MailboxListener.MailboxEvent event = eventFactory.mailboxDeleted(session, MAILBOX, quotaRoot, quotaCount, quotaSize); globalRegistration.event(event); assertThat(globalRegistration.getPathToIndex(INBOX)).isEqualTo(Optional.empty()); }
@Test void pathToIndexShouldNotBeChangedByAddedEvents() { MailboxListener.MailboxEvent event = eventFactory.mailboxAdded(session, MAILBOX); globalRegistration.event(event); assertThat(globalRegistration.getPathToIndex(INBOX).get()).isEqualTo(INBOX); }
@Test public void pathToIndexShouldBeModifiedByRenamedEvents() { MailboxListener.MailboxEvent event = eventFactory.mailboxRenamed(session, INBOX, NEW_MAILBOX); globalRegistration.event(event); assertThat(globalRegistration.getPathToIndex(INBOX).get()).isEqualTo(NEW_PATH); }