james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From adup...@apache.org
Subject [04/10] james-project git commit: JAMES-1874 Optimize GetMailboxes: do not search all mailboxes when a list of IDs is given
Date Tue, 07 Feb 2017 08:06:53 GMT
JAMES-1874 Optimize GetMailboxes: do not search all mailboxes when a list of IDs is given

It's a rework from a commit of Antoine, but includes:

  - Factorized code
  - No need to filter by mailbox as this filtering is already handled (gain ~ 3ms)


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0054b41a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0054b41a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0054b41a

Branch: refs/heads/master
Commit: 0054b41a68fb0a36f2a30bc132e826b318d7357c
Parents: 3bdf918
Author: Antoine Duprat <aduprat@linagora.com>
Authored: Thu Feb 2 09:57:03 2017 +0100
Committer: Benoit Tellier <btellier@linagora.com>
Committed: Tue Feb 7 08:57:45 2017 +0700

----------------------------------------------------------------------
 .../james/jmap/methods/GetMailboxesMethod.java  | 35 ++++++++++----------
 1 file changed, 18 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0054b41a/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 446336f..d926d21 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
@@ -19,10 +19,10 @@
 
 package org.apache.james.jmap.methods;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import java.util.function.Predicate;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
@@ -89,29 +89,30 @@ public class GetMailboxesMethod implements Method {
     private GetMailboxesResponse getMailboxesResponse(GetMailboxesRequest mailboxesRequest,
MailboxSession mailboxSession) {
         GetMailboxesResponse.Builder builder = GetMailboxesResponse.builder();
         try {
-            retrieveUserMailboxes(mailboxSession)
-                .stream()
-                .map(MailboxMetaData::getPath)
-                .map(mailboxPath -> mailboxFactory.fromMailboxPath(mailboxPath, mailboxSession))
+            Optional<ImmutableList<MailboxId>> mailboxIds = mailboxesRequest.getIds();
+            retrieveMailboxIds(mailboxIds, mailboxSession)
+                .map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, mailboxSession))
                 .filter(Optional::isPresent)
                 .map(Optional::get)
-                .filter(filterMailboxesById(mailboxesRequest.getIds()))
-                .sorted((m1, m2) -> m1.getSortOrder().compareTo(m2.getSortOrder()))
-                .forEach(mailbox -> builder.add(mailbox));
+                .sorted(Comparator.comparing(Mailbox::getSortOrder))
+                .forEach(builder::add);
             return builder.build();
         } catch (MailboxException e) {
             throw Throwables.propagate(e);
         }
     }
 
-    private Predicate<? super Mailbox> filterMailboxesById(Optional<ImmutableList<MailboxId>>
ids) {
-        return (mailbox -> ids.map(list -> list.contains(mailbox.getId())).orElse(true));
-    }
-
-    private List<MailboxMetaData> retrieveUserMailboxes(MailboxSession session) throws
MailboxException {
-        return mailboxManager.search(
-                MailboxQuery.builder(session).privateUserMailboxes().build(),
-                session);
+    private Stream<MailboxId> retrieveMailboxIds(Optional<ImmutableList<MailboxId>>
mailboxIds, MailboxSession mailboxSession) throws MailboxException {
+        if (mailboxIds.isPresent()) {
+            return mailboxIds.get()
+                .stream();
+        } else {
+            List<MailboxMetaData> userMailboxes = mailboxManager.search(
+                MailboxQuery.builder(mailboxSession).privateUserMailboxes().build(),
+                mailboxSession);
+            return userMailboxes
+                .stream()
+                .map(MailboxMetaData::getId);
+        }
     }
-
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message