public static Limit from(Optional<Integer> limit) { return limit.map(Limit::from) .orElse(unlimited()); }
@Override public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange messageRange, FetchType ftype, int max) throws MailboxException { CassandraId mailboxId = (CassandraId) mailbox.getMailboxId(); return retrieveMessages(retrieveMessageIds(mailboxId, messageRange), ftype, Limit.from(max)) .join() .map(SimpleMailboxMessage -> (MailboxMessage) SimpleMailboxMessage) .sorted(Comparator.comparing(MailboxMessage::getUid)) .iterator(); }
public CompletableFuture<Stream<MessageResult>> retrieveMessages(List<ComposedMessageIdWithMetaData> messageIds, FetchType fetchType, Limit limit) { return CompletableFutureUtil.chainAll( limit.applyOnStream(messageIds.stream().distinct()) .collect(JamesCollectors.chunker(configuration.getMessageReadChunkSize())), ids -> rowToMessages(fetchType, ids)) .thenApply(stream -> stream.flatMap(Function.identity())); }
@Test public void unlimitedShouldCreateLimitThatDoesNotAffectStream() { Limit testee = Limit.unlimited(); assertThat( testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(aList); }
@Test public void limitShouldCreateLimitThatCorrectlyTruncateStream() { Limit testee = Limit.limit(3); assertThat(testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(ImmutableList.of(1, 2, 3)); }
public static Limit unlimited() { return new Limit(Optional.empty()); }
@Test public void limitShouldThrowAnErrorWhenCalledWithZero() { expectedException.expect(IllegalArgumentException.class); Limit.limit(0); }
@Test void unlimitedShouldCreateLimitThatDoesNotAffectStream() { Limit testee = Limit.unlimited(); assertThat( testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(aList); }
@Test void limitShouldCreateLimitThatCorrectlyTruncateStream() { Limit testee = Limit.limit(3); assertThat(testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(ImmutableList.of(1, 2, 3)); }
public static Limit unlimited() { return new Limit(Optional.empty()); }