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 c8d7d244260a72f49a9c2bb52b9e017037786e4c
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Wed Oct 16 18:38:20 2019 +0700

    JAMES-2632 Allow bulk mailbox counter retrieval
    
    StoreMailboxManager should have the capacity to load
    mailboxCounters all at one.
---
 .../cassandra/mail/CassandraMailboxCounterDAO.java |  4 +--
 .../cassandra/mail/CassandraMessageMapper.java     | 28 ++++++++++++++++++
 .../mail/CassandraMailboxCounterDAOTest.java       |  8 ++---
 .../james/mailbox/jpa/mail/JPAMessageMapper.java   | 33 ++++++++++++++++++---
 .../jpa/mail/TransactionalMessageMapper.java       |  7 +++++
 .../mailbox/maildir/mail/MaildirMessageMapper.java |  9 ++++++
 .../inmemory/mail/InMemoryMessageMapper.java       | 34 ++++++++++++++++++++--
 .../james/mailbox/store/StoreMailboxManager.java   | 10 +++++++
 .../james/mailbox/store/mail/MessageMapper.java    |  4 +++
 .../StoreMailboxMessageResultIteratorTest.java     | 12 +++++---
 .../store/mail/model/MessageMapperTest.java        | 18 ++++++++++++
 11 files changed, 149 insertions(+), 18 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
index 1069bcc..d1c3180 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
@@ -74,9 +74,7 @@ public class CassandraMailboxCounterDAO {
                 .where(eq(CassandraMailboxCountersTable.MAILBOX_ID, 
bindMarker(CassandraMailboxCountersTable.MAILBOX_ID))));
     }
 
-    public Mono<MailboxCounters> retrieveMailboxCounters(Mailbox mailbox) 
throws MailboxException {
-        CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
-
+    public Mono<MailboxCounters> retrieveMailboxCounters(CassandraId 
mailboxId) {
         return 
cassandraAsyncExecutor.executeSingleRow(bindWithMailbox(mailboxId, 
readStatement))
             .map(row ->  MailboxCounters.builder()
                 .count(row.getLong(CassandraMailboxCountersTable.COUNT))
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 18ac059..de6407ff 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.cassandra.mail;
 
+import java.util.Collection;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
@@ -41,6 +42,7 @@ import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
@@ -60,6 +62,7 @@ import com.google.common.collect.ImmutableList;
 
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
 
 public class CassandraMessageMapper implements MessageMapper {
     public static final MailboxCounters INITIAL_COUNTERS =  
MailboxCounters.builder()
@@ -131,9 +134,34 @@ public class CassandraMessageMapper implements 
MessageMapper {
 
     @Override
     public MailboxCounters getMailboxCounters(Mailbox mailbox) throws 
MailboxException {
+<<<<<<< HEAD
         return mailboxCounterDAO.retrieveMailboxCounters(mailbox)
                 .defaultIfEmpty(INITIAL_COUNTERS)
                 .block();
+=======
+        CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
+        return getMailboxCounters(mailboxId)
+                .block();
+    }
+
+    private Mono<MailboxCounters> getMailboxCounters(CassandraId mailboxId) {
+        return mailboxCounterDAO.retrieveMailboxCounters(mailboxId)
+                .defaultIfEmpty(MailboxCounters.builder()
+                    .mailboxId(mailboxId)
+                    .count(0)
+                    .unseen(0)
+                    .build());
+    }
+
+    @Override
+    public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> 
mailboxIds) {
+        return Flux.fromIterable(mailboxIds)
+            .publishOn(Schedulers.boundedElastic())
+            .map(id -> (CassandraId) id)
+            .concatMap(this::getMailboxCounters)
+            .toStream()
+            .collect(Guavate.toImmutableList());
+>>>>>>> f4ef8da35d... JAMES-2632 Allow bulk mailbox counter retrieval
     }
 
     @Override
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
index a9fae36..073b4a2 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
@@ -65,7 +65,7 @@ class CassandraMailboxCounterDAOTest {
 
     @Test
     void retrieveMailboxCounterShouldReturnEmptyByDefault() throws Exception {
-        
assertThat(testee.retrieveMailboxCounters(mailbox).hasElement().block()).isFalse();
+        
assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).hasElement().block()).isFalse();
     }
 
     @Test
@@ -86,7 +86,7 @@ class CassandraMailboxCounterDAOTest {
     void incrementUnseenShouldAddOneWhenAbsentOnMailboxCounters() throws 
Exception {
         testee.incrementUnseen(MAILBOX_ID).block();
 
-        assertThat(testee.retrieveMailboxCounters(mailbox).block())
+        assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block())
             .isEqualTo(MailboxCounters.builder()
                 .count(0L)
                 .unseen(1L)
@@ -97,7 +97,7 @@ class CassandraMailboxCounterDAOTest {
     void incrementCountShouldAddOneWhenAbsentOnMailboxCounters() throws 
Exception {
         testee.incrementCount(MAILBOX_ID).block();
 
-        assertThat(testee.retrieveMailboxCounters(mailbox).block())
+        assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block())
             .isEqualTo(MailboxCounters.builder()
                 .count(1L)
                 .unseen(0L)
@@ -109,7 +109,7 @@ class CassandraMailboxCounterDAOTest {
         testee.incrementCount(MAILBOX_ID).block();
         testee.incrementUnseen(MAILBOX_ID).block();
 
-        assertThat(testee.retrieveMailboxCounters(mailbox).block())
+        assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block())
             .isEqualTo(MailboxCounters.builder()
                 .count(1L)
                 .unseen(1L)
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index f7fde59..a1ebacd 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.mailbox.jpa.mail;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -41,6 +42,7 @@ import 
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage;
 import 
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMessage;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageRange.Type;
@@ -55,6 +57,7 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.utils.ApplicableFlagCalculator;
 import org.apache.openjpa.persistence.ArgumentException;
 
+import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterators;
@@ -121,27 +124,49 @@ public class JPAMessageMapper extends 
JPATransactionalMapper implements MessageM
 
     @Override
     public long countMessagesInMailbox(Mailbox mailbox) throws 
MailboxException {
+        JPAId mailboxId = (JPAId) mailbox.getMailboxId();
+        return countMessagesInMailbox(mailboxId);
+    }
+
+    private long countMessagesInMailbox(JPAId mailboxId) throws 
MailboxException {
         try {
-            JPAId mailboxId = (JPAId) mailbox.getMailboxId();
             return (Long) 
getEntityManager().createNamedQuery("countMessagesInMailbox")
                     .setParameter("idParam", 
mailboxId.getRawId()).getSingleResult();
         } catch (PersistenceException e) {
-            throw new MailboxException("Count of messages failed in mailbox " 
+ mailbox, e);
+            throw new MailboxException("Count of messages failed in mailbox " 
+ mailboxId, e);
         }
     }
 
     @Override
     public long countUnseenMessagesInMailbox(Mailbox mailbox) throws 
MailboxException {
+        JPAId mailboxId = (JPAId) mailbox.getMailboxId();
+        return countUnseenMessagesInMailbox(mailboxId);
+    }
+
+    private long countUnseenMessagesInMailbox(JPAId mailboxId) throws 
MailboxException {
         try {
-            JPAId mailboxId = (JPAId) mailbox.getMailboxId();
             return (Long) 
getEntityManager().createNamedQuery("countUnseenMessagesInMailbox")
                     .setParameter("idParam", 
mailboxId.getRawId()).getSingleResult();
         } catch (PersistenceException e) {
-            throw new MailboxException("Count of useen messages failed in 
mailbox " + mailbox, e);
+            throw new MailboxException("Count of useen messages failed in 
mailbox " + mailboxId, e);
         }
     }
 
     @Override
+    public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> 
mailboxIds) throws MailboxException {
+        return mailboxIds.stream()
+            .map(id -> (JPAId) id)
+            .map(Throwing.<JPAId, MailboxCounters>function(
+                id -> MailboxCounters.builder()
+                    .mailboxId(id)
+                    .count(countMessagesInMailbox(id))
+                    .unseen(countUnseenMessagesInMailbox(id))
+                    .build())
+                .sneakyThrow())
+            .collect(Guavate.toImmutableList());
+    }
+
+    @Override
     public void delete(Mailbox mailbox, MailboxMessage message) throws 
MailboxException {
         try {
             AbstractJPAMailboxMessage jpaMessage = 
getEntityManager().find(AbstractJPAMailboxMessage.class, buildKey(mailbox, 
message));
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
index 6030d47..6b45c1d 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.jpa.mail;
 
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -31,6 +32,7 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
@@ -151,4 +153,9 @@ public class TransactionalMessageMapper implements 
MessageMapper {
     public Flags getApplicableFlag(Mailbox mailbox) throws MailboxException {
         return messageMapper.getApplicableFlag(mailbox);
     }
+
+    @Override
+    public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> 
mailboxIds) throws MailboxException {
+        throw new NotImplementedException("not implemented");
+    }
 }
diff --git 
a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
 
b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
index a0295d4..17e6f44 100644
--- 
a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
+++ 
b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
@@ -24,6 +24,7 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -35,6 +36,7 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -43,6 +45,8 @@ import org.apache.james.mailbox.maildir.MaildirMessageName;
 import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.maildir.mail.model.MaildirMailboxMessage;
 import org.apache.james.mailbox.model.Mailbox;
+import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageRange.Type;
@@ -149,6 +153,11 @@ public class MaildirMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
+    public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> 
mailboxIds) {
+        throw new NotImplementedException("Not available as maildir relies on 
mailboxPath");
+    }
+
+    @Override
     public Iterator<UpdatedFlags> updateFlags(Mailbox mailbox, 
FlagsUpdateCalculator flagsUpdateCalculator, MessageRange set) throws 
MailboxException {
         final List<UpdatedFlags> updatedFlags = new ArrayList<>();
         final MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
index 58e0613..6ef7781 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox.inmemory.mail;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -34,6 +35,8 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.model.Mailbox;
+import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.store.mail.AbstractMessageMapper;
@@ -56,7 +59,11 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     private Map<MessageUid, MailboxMessage> 
getMembershipByUidForMailbox(Mailbox mailbox) {
-        return getMembershipByUidForId((InMemoryId) mailbox.getMailboxId());
+        return getMembershipByUidForMailbox(mailbox.getMailboxId());
+    }
+
+    private Map<MessageUid, MailboxMessage> 
getMembershipByUidForMailbox(MailboxId mailboxId) {
+        return getMembershipByUidForId((InMemoryId) mailboxId);
     }
 
     private Map<MessageUid, MailboxMessage> getMembershipByUidForId(InMemoryId 
id) {
@@ -70,18 +77,39 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
 
     @Override
     public long countMessagesInMailbox(Mailbox mailbox) {
-        return getMembershipByUidForMailbox(mailbox).size();
+        MailboxId mailboxId = mailbox.getMailboxId();
+        return countMessagesInMailbox(mailboxId);
+    }
+
+    private int countMessagesInMailbox(MailboxId mailboxId) {
+        return getMembershipByUidForMailbox(mailboxId).size();
     }
 
     @Override
     public long countUnseenMessagesInMailbox(Mailbox mailbox) {
-        return getMembershipByUidForMailbox(mailbox).values()
+        MailboxId mailboxId = mailbox.getMailboxId();
+        return countUnseenMessagesInMailbox(mailboxId);
+    }
+
+    private long countUnseenMessagesInMailbox(MailboxId mailboxId) {
+        return getMembershipByUidForMailbox(mailboxId).values()
             .stream()
             .filter(member -> !member.isSeen())
             .count();
     }
 
     @Override
+    public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> 
mailboxIds) {
+        return mailboxIds.stream()
+            .map(id -> MailboxCounters.builder()
+                .mailboxId(id)
+                .count(countMessagesInMailbox(id))
+                .unseen(countUnseenMessagesInMailbox(id))
+                .build())
+            .collect(Guavate.toImmutableList());
+    }
+
+    @Override
     public void delete(Mailbox mailbox, MailboxMessage message) {
         getMembershipByUidForMailbox(mailbox).remove(message.getUid());
     }
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 e11ab25..6d36a28 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
@@ -23,6 +23,7 @@ import static 
org.apache.james.mailbox.store.mail.AbstractMessageMapper.UNLIMITE
 
 import java.security.SecureRandom;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Optional;
@@ -57,6 +58,7 @@ import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxCounters;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxMetaData.Selectability;
@@ -768,4 +770,12 @@ public class StoreMailboxManager implements MailboxManager 
{
         Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
         return mapper.hasChildren(mailbox, session.getPathDelimiter());
     }
+
+    private List<MailboxCounters> getMailboxCounters(Collection<Mailbox> 
mailboxes, MailboxSession session) throws MailboxException {
+        MessageMapper messageMapper = 
mailboxSessionMapperFactory.getMessageMapper(session);
+        return messageMapper.getMailboxCounters(mailboxes.stream()
+            .filter(Throwing.<Mailbox>predicate(mailbox -> 
storeRightManager.hasRight(mailbox, Right.Read, session)).sneakyThrow())
+            .map(Mailbox::getMailboxId)
+            .collect(Guavate.toImmutableList()));
+    }
 }
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
index c17a018..3fab26f 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.mailbox.store.mail;
 
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +30,7 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
@@ -74,6 +76,8 @@ public interface MessageMapper extends Mapper {
 
     MailboxCounters getMailboxCounters(Mailbox mailbox) throws 
MailboxException;
 
+    List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) 
throws MailboxException;
+
     /**
      * Delete the given {@link MailboxMessage}
      */
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
index 5587af4..053dc3d 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.store;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -33,11 +34,11 @@ import java.util.Set;
 import javax.mail.Flags;
 import javax.mail.util.SharedByteArrayInputStream;
 
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxCounters;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageResult.FetchGroup;
@@ -67,8 +68,6 @@ public class StoreMailboxMessageResultIteratorTest {
     }
 
     private final class TestMessageMapper implements MessageMapper {
-        
-
         private final MessageRange messageRange;
 
         public TestMessageMapper(MessageRange messageRange) {
@@ -99,6 +98,11 @@ public class StoreMailboxMessageResultIteratorTest {
         }
 
         @Override
+        public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> 
mailboxIds) throws MailboxException {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
         public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, 
MessageRange set,
                                                               
org.apache.james.mailbox.store.mail.MessageMapper.FetchType type, int limit)
                 throws MailboxException {
@@ -190,7 +194,7 @@ public class StoreMailboxMessageResultIteratorTest {
 
         @Override
         public Flags getApplicableFlag(Mailbox mailbox) throws 
MailboxException {
-            throw new NotImplementedException("Not implemented");
+            throw new UnsupportedOperationException();
         }
     }
 
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index b223a79..f57fde6 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -42,6 +42,7 @@ import 
org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
+import org.apache.james.mailbox.model.MailboxCounters;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageMetaData;
@@ -128,6 +129,23 @@ public abstract class MessageMapperTest {
     }
 
     @Test
+    public void getMailboxCountersShouldReturnStoredValue() throws 
MailboxException {
+        saveMessages();
+        
assertThat(messageMapper.getMailboxCounters(ImmutableList.of(benwaInboxMailbox.getMailboxId(),
 benwaWorkMailbox.getMailboxId())))
+            .containsExactlyInAnyOrder(
+                MailboxCounters.builder()
+                    .mailboxId(benwaInboxMailbox.getMailboxId())
+                    .count(5)
+                    .unseen(5)
+                    .build(),
+                MailboxCounters.builder()
+                    .mailboxId(benwaWorkMailbox.getMailboxId())
+                    .count(1)
+                    .unseen(1)
+                    .build());
+    }
+
+    @Test
     public void mailboxCountShouldBeDecrementedAfterAMessageDelete() throws 
MailboxException {
         saveMessages();
         messageMapper.delete(benwaInboxMailbox, message1);


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