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 limitShouldCreateLimitThatCorrectlyTruncateStream() { Limit testee = Limit.limit(3); assertThat(testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(ImmutableList.of(1, 2, 3)); }
@Test void limitShouldCreateLimitThatCorrectlyTruncateStream() { Limit testee = Limit.limit(3); assertThat(testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(ImmutableList.of(1, 2, 3)); }
@Test void unlimitedShouldCreateLimitThatDoesNotAffectStream() { Limit testee = Limit.unlimited(); assertThat( testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(aList); }
@Test public void unlimitedShouldCreateLimitThatDoesNotAffectStream() { Limit testee = Limit.unlimited(); assertThat( testee .applyOnStream(aList.stream()) .collect(Guavate.toImmutableList()) ).isEqualTo(aList); }
private List<MailQueueItemDTO> listMails(ManageableMailQueue queue, Optional<Boolean> isDelayed, Limit limit) { try { return limit.applyOnStream(Iterators.toStream(queue.browse())) .map(Throwing.function(MailQueueItemDTO::from).sneakyThrow()) .filter(item -> filter(item, isDelayed)) .collect(Guavate.toImmutableList()); } catch (MailQueueException e) { throw ErrorResponder.builder() .statusCode(HttpStatus.BAD_REQUEST_400) .type(ErrorType.INVALID_ARGUMENT) .message("Invalid request for listing the mails from the mail queue " + queue) .cause(e) .haltError(); } }