You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/01/24 08:04:17 UTC

[08/11] james-project git commit: JAMES-2293 Allow to retrieve repository size

JAMES-2293 Allow to retrieve repository size


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

Branch: refs/heads/master
Commit: 438c3a4bdcc07d54c4a2e69c0eff244cbde39e96
Parents: 452183a
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 11:41:33 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jan 24 15:00:05 2018 +0700

----------------------------------------------------------------------
 .../mailrepository/file/MBoxMailRepository.java | 14 ++++++--
 .../lib/AbstractMailRepository.java             |  6 ++++
 .../mailrepository/api/MailRepository.java      |  5 +++
 .../mailrepository/MailRepositoryContract.java  | 38 ++++++++++++++++++++
 .../memory/MemoryMailRepository.java            |  7 ++++
 5 files changed, 68 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/438c3a4b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
index e378f28..b2f7510 100755
--- a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
@@ -77,6 +77,7 @@ import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Iterators;
 import com.google.common.hash.Hashing;
 
 /**
@@ -495,8 +496,7 @@ public class MBoxMailRepository implements MailRepository, Configurable {
      * @see org.apache.james.mailrepository.api.MailRepository#list()
      */
     public Iterator<String> list() {
-        loadKeys();
-        ArrayList<String> keys = new ArrayList<>(mList.keySet());
+        ArrayList<String> keys = loadKeysAsArray();
 
         if (!keys.isEmpty()) {
             // find the first message. This is a trick to make sure that if
@@ -512,6 +512,11 @@ public class MBoxMailRepository implements MailRepository, Configurable {
         return keys.iterator();
     }
 
+    private ArrayList<String> loadKeysAsArray() {
+        loadKeys();
+        return new ArrayList<>(mList.keySet());
+    }
+
     /**
      * @see org.apache.james.mailrepository.api.MailRepository#retrieve(String)
      */
@@ -690,4 +695,9 @@ public class MBoxMailRepository implements MailRepository, Configurable {
     public boolean unlock(String key) {
         return false;
     }
+
+    @Override
+    public long size() throws MessagingException {
+        return loadKeysAsArray().size();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/438c3a4b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
index 7778880..11f3eb6 100644
--- a/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
@@ -33,6 +33,8 @@ import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Iterators;
+
 /**
  * This class represent an AbstractMailRepository. All MailRepositories should
  * extend this class.
@@ -157,4 +159,8 @@ public abstract class AbstractMailRepository implements MailRepository, Configur
      */
     protected abstract void internalRemove(String key) throws MessagingException;
 
+    @Override
+    public long size() throws MessagingException {
+        return Iterators.size(list());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/438c3a4b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
index e1a4092..95d7a89 100644
--- a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
+++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
@@ -32,6 +32,11 @@ import org.apache.mailet.Mail;
 public interface MailRepository {
 
     /**
+     * @return Number of mails stored in that repository
+     */
+    long size() throws MessagingException;
+
+    /**
      * Stores a message in this repository. 
      * 
      * TODO: Shouldn't this return the key under which it is stored?

http://git-wip-us.apache.org/repos/asf/james-project/blob/438c3a4b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
index 3dae16a..7594fde 100644
--- a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
+++ b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
@@ -96,6 +96,44 @@ public interface MailRepositoryContract {
     MailRepository retrieveRepository() throws Exception;
 
     @Test
+    default void sizeShouldReturnZeroWhenEmpty() throws Exception {
+        MailRepository testee = retrieveRepository();
+        assertThat(testee.size()).isEqualTo(0L);
+    }
+
+    @Test
+    default void sizeShouldReturnMailCount() throws Exception {
+        MailRepository testee = retrieveRepository();
+
+        testee.store(createMail("mail1"));
+        testee.store(createMail("mail2"));
+
+        assertThat(testee.size()).isEqualTo(2L);
+    }
+
+    @Test
+    default void sizeShouldBeIncrementedByOneWhenDuplicates() throws Exception {
+        MailRepository testee = retrieveRepository();
+
+        String key = "mail1";
+        testee.store(createMail(key));
+        testee.store(createMail(key));
+
+        assertThat(testee.size()).isEqualTo(1L);
+    }
+
+    @Test
+    default void sizeShouldBeDecrementedByRemove() throws Exception {
+        MailRepository testee = retrieveRepository();
+
+        String key = "mail1";
+        testee.store(createMail(key));
+        testee.remove(key);
+
+        assertThat(testee.size()).isEqualTo(0L);
+    }
+
+    @Test
     default void storeRegularMailShouldNotFail() throws Exception {
         MailRepository testee = retrieveRepository();
         Mail mail = createMail("mail1");

http://git-wip-us.apache.org/repos/asf/james-project/blob/438c3a4b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
index e281d83..e6b0bbf 100644
--- a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
+++ b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
@@ -23,6 +23,8 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.mail.MessagingException;
+
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.mailet.Mail;
 
@@ -73,4 +75,9 @@ public class MemoryMailRepository implements MailRepository {
     public boolean unlock(String key) {
         return false;
     }
+
+    @Override
+    public long size() {
+        return mails.size();
+    }
 }


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