public MultimailboxesSearchQuery build() { return new MultimailboxesSearchQuery(searchQuery, mailboxIds.build(), notInMailboxIds.build()); }
@Override public List<MessageId> search(MultimailboxesSearchQuery expression, MailboxSession session, long limit) throws MailboxException { ImmutableSet<MailboxId> wantedMailboxesId = getInMailboxes(expression.getInMailboxes(), session) .filter(id -> !expression.getNotInMailboxes().contains(id)) .collect(Guavate.toImmutableSet()); return index.search(session, wantedMailboxesId, expression.getSearchQuery(), limit); }
@Test public void buildShouldBuildWheninMailboxes() { ImmutableSet<MailboxId> inMailboxes = ImmutableSet.of(); ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.of(); MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes); MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).build(); assertThat(actual).isEqualToComparingFieldByField(expected); }
@Test(expected = NullPointerException.class) public void buildShouldThrowWhenQueryIsNull() { MultimailboxesSearchQuery.from(null); }
@Test public void buildShouldBuildWhenEmptyNotInMailboxes() { ImmutableSet<MailboxId> inMailboxes = ImmutableSet.of(); ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.of(); MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes); MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).notInMailboxes().build(); assertThat(actual).isEqualToComparingFieldByField(expected); }
private Optional<MessageId> findMessageIdForRFC822MessageId(String messageId, MailAddress recipient) { LOGGER.debug("Searching message {} for recipient {}", messageId, recipient.asPrettyString()); try { MailboxSession session = mailboxManager.createSystemSession(recipient.asString()); int limit = 1; MultimailboxesSearchQuery searchByRFC822MessageId = MultimailboxesSearchQuery .from(new SearchQuery(SearchQuery.mimeMessageID(messageId))) .build(); return mailboxManager.search(searchByRFC822MessageId, session, limit).stream().findFirst(); } catch (MailboxException e) { LOGGER.error("unable to find message with Message-Id: " + messageId, e); } return Optional.empty(); }
@Test public void buildShouldBuildWhenOneMailbox() { ImmutableSet<MailboxId> inMailboxes = ImmutableSet.of(ID_1); ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.of(); MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes); MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes(ID_1).build(); assertThat(actual).isEqualToComparingFieldByField(expected); }
private void updateFlag(String messageId, MailboxSession session, Flags flag) throws MailboxException { int limit = 2; MultimailboxesSearchQuery searchByRFC822MessageId = MultimailboxesSearchQuery .from(new SearchQuery(SearchQuery.mimeMessageID(messageId))) .build(); List<MessageId> references = mailboxManager.search(searchByRFC822MessageId, session, limit); try { MessageId reference = Iterables.getOnlyElement(references); List<MailboxId> mailboxIds = messageIdManager.getMessages(references, FetchGroupImpl.MINIMAL, session).stream() .map(MessageResult::getMailboxId) .collect(Guavate.toImmutableList()); messageIdManager.setFlags(flag, FlagsUpdateMode.ADD, reference, mailboxIds, session); } catch (NoSuchElementException e) { logger.info("Unable to find a message with this Mime Message Id: " + messageId); } catch (IllegalArgumentException e) { logger.info("Too many messages are matching this Mime Message Id: " + messageId); } } }
@Test public void buildShouldBuildWhenEmptyMailboxes() { ImmutableSet<MailboxId> inMailboxes = ImmutableSet.of(); ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.of(); MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes); MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes().build(); assertThat(actual).isEqualToComparingFieldByField(expected); }
private MultimailboxesSearchQuery convertToSearchQuery(GetMessageListRequest messageListRequest) { SearchQuery searchQuery = messageListRequest.getFilter() .map(filter -> new FilterToSearchQuery().convert(filter)) .orElse(new SearchQuery()); Set<MailboxId> inMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), FilterCondition::getInMailboxes); Set<MailboxId> notInMailboxes = buildFilterMailboxesSet(messageListRequest.getFilter(), FilterCondition::getNotInMailboxes); List<SearchQuery.Sort> sorts = SortConverter.convertToSorts(messageListRequest.getSort()); if (!sorts.isEmpty()) { searchQuery.setSorts(sorts); } return MultimailboxesSearchQuery .from(searchQuery) .inMailboxes(inMailboxes) .notInMailboxes(notInMailboxes) .build(); }
@Test public void buildShouldBuildWhenOneNotInMailbox() { ImmutableSet<MailboxId> inMailboxes = ImmutableSet.of(); ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.of(ID_1); MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes); MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).notInMailboxes(ID_1).build(); assertThat(actual).isEqualToComparingFieldByField(expected); }
@Test public void buildShouldBuildWhenAllDefined() { ImmutableSet<MailboxId> inMailboxes = ImmutableSet.of(ID_1); ImmutableSet<MailboxId> notInMailboxes = ImmutableSet.of(ID_2); MultimailboxesSearchQuery expected = new MultimailboxesSearchQuery(EMPTY_QUERY, inMailboxes, notInMailboxes); MultimailboxesSearchQuery actual = MultimailboxesSearchQuery.from(EMPTY_QUERY).inMailboxes(ID_1).notInMailboxes(ID_2).build(); assertThat(actual).isEqualToComparingFieldByField(expected); }