JAMES-2169 refactor GetMailboxesMethod.retrieveMailboxes in a more functional way
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2a23a974 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2a23a974 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2a23a974 Branch: refs/heads/master Commit: 2a23a97446bddc79462e3b45d980bd8ce1a48db2 Parents: 94b2fa5 Author: Matthieu Baechler <matth...@apache.org> Authored: Wed Sep 27 12:31:16 2017 +0200 Committer: benwa <btell...@linagora.com> Committed: Tue Oct 3 09:23:48 2017 +0700 ---------------------------------------------------------------------- .../james/jmap/methods/GetMailboxesMethod.java | 52 +++++++++++--------- 1 file changed, 30 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/2a23a974/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java index 1b042af..b6f575c 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java @@ -45,6 +45,7 @@ import org.apache.james.metrics.api.TimeMetric; import org.apache.james.util.MDCBuilder; import org.apache.james.util.OptionalUtils; +import com.github.fge.lambdas.Throwing; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; @@ -120,27 +121,34 @@ public class GetMailboxesMethod implements Method { } private Stream<Mailbox> retrieveMailboxes(Optional<ImmutableList<MailboxId>> mailboxIds, MailboxSession mailboxSession) throws MailboxException { - if (mailboxIds.isPresent()) { - return mailboxIds.get() - .stream() - .map(mailboxId -> mailboxFactory.builder() - .id(mailboxId) - .session(mailboxSession) - .build()) - .flatMap(OptionalUtils::toStream); - } else { - List<MailboxMetaData> userMailboxes = mailboxManager.search( - MailboxQuery.builder(mailboxSession).privateUserMailboxes().build(), - mailboxSession); - return userMailboxes - .stream() - .map(MailboxMetaData::getId) - .map(mailboxId -> mailboxFactory.builder() - .id(mailboxId) - .session(mailboxSession) - .usingPreloadedMailboxesMetadata(userMailboxes) - .build()) - .flatMap(OptionalUtils::toStream); - } + return mailboxIds + .map(ids -> retrieveSpecificMailboxes(mailboxSession, ids)) + .orElseGet(Throwing.supplier(() -> retrieveAllMailboxes(mailboxSession)).sneakyThrow()); + } + + private Stream<Mailbox> retrieveSpecificMailboxes(MailboxSession mailboxSession, ImmutableList<MailboxId> mailboxIds) { + return mailboxIds + .stream() + .map(mailboxId -> mailboxFactory.builder() + .id(mailboxId) + .session(mailboxSession) + .build()) + .flatMap(OptionalUtils::toStream); } + + private Stream<Mailbox> retrieveAllMailboxes(MailboxSession mailboxSession) throws MailboxException { + List<MailboxMetaData> userMailboxes = mailboxManager.search( + MailboxQuery.builder(mailboxSession).privateUserMailboxes().build(), + mailboxSession); + return userMailboxes + .stream() + .map(MailboxMetaData::getId) + .map(mailboxId -> mailboxFactory.builder() + .id(mailboxId) + .session(mailboxSession) + .usingPreloadedMailboxesMetadata(userMailboxes) + .build()) + .flatMap(OptionalUtils::toStream); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org