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

Reply via email to