JAMES-2556 Fix limit and offset behaviour in multi-repository context
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d68a63ef Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d68a63ef Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d68a63ef Branch: refs/heads/master Commit: d68a63efda3734eb0b34bc2c7abde327762a02c5 Parents: ea70abc Author: Benoit Tellier <btell...@linagora.com> Authored: Wed Oct 10 10:22:00 2018 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Wed Oct 10 15:46:19 2018 +0700 ---------------------------------------------------------------------- .../service/MailRepositoryStoreService.java | 18 +++++++----------- .../routes/MailRepositoriesRoutesTest.java | 2 -- 2 files changed, 7 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/d68a63ef/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java index ff4ee76..a626655 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java @@ -48,8 +48,8 @@ import org.apache.mailet.Mail; import org.eclipse.jetty.http.HttpStatus; import com.github.fge.lambdas.Throwing; -import com.github.fge.lambdas.functions.ThrowingFunction; import com.github.steveash.guavate.Guavate; +import com.google.common.collect.ImmutableList; public class MailRepositoryStoreService { private final MailRepositoryStore mailRepositoryStore; @@ -70,17 +70,13 @@ public class MailRepositoryStoreService { } public Optional<List<MailKeyDTO>> listMails(MailRepositoryPath path, Offset offset, Limit limit) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException { - ThrowingFunction<MailRepository, Stream<MailKeyDTO>> list = repository -> list(repository, offset, limit); - return Optional.of(getRepositories(path) - .flatMap(Throwing.function(list).sneakyThrow()) - .collect(Guavate.toImmutableList())); - } + Optional<Stream<MailKeyDTO>> maybeMails = Optional.of(getRepositories(path) + .flatMap(Throwing.function((MailRepository repository) -> Iterators.toStream(repository.list())).sneakyThrow()) + .map(MailKeyDTO::new) + .skip(offset.getOffset())); - private Stream<MailKeyDTO> list(MailRepository mailRepository, Offset offset, Limit limit) throws MessagingException { - return limit.applyOnStream( - Iterators.toStream(mailRepository.list()) - .skip(offset.getOffset())) - .map(MailKeyDTO::new); + return maybeMails.map(limit::applyOnStream) + .map(stream -> stream.collect(ImmutableList.toImmutableList())); } public Optional<Long> size(MailRepositoryPath path) throws MailRepositoryStore.MailRepositoryStoreException { http://git-wip-us.apache.org/repos/asf/james-project/blob/d68a63ef/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java index f17b20c..ea78e4c 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java @@ -329,7 +329,6 @@ public class MailRepositoriesRoutesTest { .body("", contains("name2")); } - @Ignore("Limit and offset are applied on a per repository bases") @Test public void listingKeysShouldApplyLimitWhenSeveralRepositories() throws Exception { MailRepository mailRepository1 = mailRepositoryStore.create(URL_MY_REPO); @@ -403,7 +402,6 @@ public class MailRepositoriesRoutesTest { .body("", hasSize(0)); } - @Ignore("Offset is applied on a per mail repository basis") @Test public void offsetShouldBeAplliedOnTheMergedViewOfMailRepositories() throws Exception { MailRepository mailRepository1 = mailRepositoryStore.create(URL_MY_REPO); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org