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