This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c1b5058b16d2f0b72def97109ad8cda6835da1c1
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Thu Nov 7 14:41:39 2019 +0700

    JAMES-2632 Add MailboxCounters to mailbox metadata
---
 .../james/mailbox/model/MailboxMetaData.java       | 15 ++++++++++--
 .../james/mailbox/store/StoreMailboxManager.java   | 27 ++++++++++++++++++----
 2 files changed, 36 insertions(+), 6 deletions(-)

diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxMetaData.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxMetaData.java
index 004dfff..0cd4dc8 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxMetaData.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxMetaData.java
@@ -61,7 +61,12 @@ public class MailboxMetaData implements 
Comparable<MailboxMetaData> {
     }
 
     public static MailboxMetaData unselectableMailbox(MailboxPath path, 
MailboxId mailboxId, char delimiter) {
-        return new MailboxMetaData(path, mailboxId, delimiter, 
Children.CHILDREN_ALLOWED_BUT_UNKNOWN, Selectability.NONE, new MailboxACL());
+        return new MailboxMetaData(path, mailboxId, delimiter, 
Children.CHILDREN_ALLOWED_BUT_UNKNOWN, Selectability.NONE, new MailboxACL(),
+            MailboxCounters.builder()
+                .mailboxId(mailboxId)
+                .count(0)
+                .unseen(0)
+                .build());
     }
 
     public static  final Comparator<MailboxMetaData> COMPARATOR = Comparator
@@ -74,14 +79,20 @@ public class MailboxMetaData implements 
Comparable<MailboxMetaData> {
     private final Selectability selectability;
     private final MailboxId mailboxId;
     private final MailboxACL resolvedAcls;
+    private final MailboxCounters counters;
 
-    public MailboxMetaData(MailboxPath path, MailboxId mailboxId, char 
delimiter, Children inferiors, Selectability selectability, MailboxACL 
resolvedAcls) {
+    public MailboxMetaData(MailboxPath path, MailboxId mailboxId, char 
delimiter, Children inferiors, Selectability selectability, MailboxACL 
resolvedAcls, MailboxCounters counters) {
         this.path = path;
         this.mailboxId = mailboxId;
         this.delimiter = delimiter;
         this.inferiors = inferiors;
         this.selectability = selectability;
         this.resolvedAcls = resolvedAcls;
+        this.counters = counters;
+    }
+
+    public MailboxCounters getCounters() {
+        return counters;
     }
 
     public MailboxACL getResolvedAcls() {
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 6d36a28..b80196b 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -86,7 +86,9 @@ import org.slf4j.LoggerFactory;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
+import com.google.common.base.Functions;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
@@ -575,15 +577,23 @@ public class StoreMailboxManager implements 
MailboxManager {
             .filter(Throwing.predicate(mailbox -> 
storeRightManager.hasRight(mailbox, right, session)))
             .collect(Guavate.toImmutableList());
 
+        ImmutableMap<MailboxId, MailboxCounters> counters = 
getMailboxCounters(mailboxes, session)
+            .stream()
+            .collect(Guavate.toImmutableMap(
+                MailboxCounters::getMailboxId,
+                Functions.identity()));
+
         return mailboxes
             .stream()
             .filter(mailboxQuery::matches)
-            .map(Throwing.<Mailbox, MailboxMetaData>function(mailbox -> 
toMailboxMetadata(session, mailboxes, mailbox)).sneakyThrow())
+            .map(Throwing.<Mailbox, MailboxMetaData>function(
+                mailbox -> toMailboxMetadata(session, mailboxes, mailbox, 
retrieveCounters(counters, mailbox)))
+                .sneakyThrow())
             .sorted(MailboxMetaData.COMPARATOR)
             .collect(Guavate.toImmutableList());
     }
 
-    public static MailboxQuery.UserBound toSingleUserQuery(MailboxQuery 
mailboxQuery, MailboxSession mailboxSession) {
+    static MailboxQuery.UserBound toSingleUserQuery(MailboxQuery mailboxQuery, 
MailboxSession mailboxSession) {
         return MailboxQuery.builder()
             
.namespace(mailboxQuery.getNamespace().orElse(MailboxConstants.USER_NAMESPACE))
             .username(mailboxQuery.getUser().orElse(mailboxSession.getUser()))
@@ -593,6 +603,14 @@ public class StoreMailboxManager implements MailboxManager 
{
             .asUserBound();
     }
 
+    private MailboxCounters retrieveCounters(ImmutableMap<MailboxId, 
MailboxCounters> counters, Mailbox mailbox) {
+        return counters.getOrDefault(mailbox.getMailboxId(), 
MailboxCounters.builder()
+            .mailboxId(mailbox.getMailboxId())
+            .count(0)
+            .unseen(0)
+            .build());
+    }
+
     private Stream<Mailbox> getDelegatedMailboxes(MailboxMapper mailboxMapper, 
MailboxQuery mailboxQuery,
                                                   Right right, MailboxSession 
session) throws MailboxException {
         if (mailboxQuery.isPrivateMailboxes(session)) {
@@ -601,14 +619,15 @@ public class StoreMailboxManager implements 
MailboxManager {
         return mailboxMapper.findNonPersonalMailboxes(session.getUser(), 
right).stream();
     }
 
-    private MailboxMetaData toMailboxMetadata(MailboxSession session, 
List<Mailbox> mailboxes, Mailbox mailbox) throws UnsupportedRightException {
+    private MailboxMetaData toMailboxMetadata(MailboxSession session, 
List<Mailbox> mailboxes, Mailbox mailbox, MailboxCounters counters) throws 
UnsupportedRightException {
         return new MailboxMetaData(
             mailbox.generateAssociatedPath(),
             mailbox.getMailboxId(),
             getDelimiter(),
             computeChildren(session, mailboxes, mailbox),
             Selectability.NONE,
-            storeRightManager.getResolvedMailboxACL(mailbox, session));
+            storeRightManager.getResolvedMailboxACL(mailbox, session),
+            counters);
     }
 
     private MailboxMetaData.Children computeChildren(MailboxSession session, 
List<Mailbox> potentialChildren, Mailbox mailbox) {


---------------------------------------------------------------------
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