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