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 2019/03/28 03:22:02 UTC
[james-project] 18/23: MAILBOX-388
DeletedMessagesVault::usersWithVault
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 cfa210532f774947657a97abb422774c129b98c4
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Mar 21 15:51:02 2019 +0700
MAILBOX-388 DeletedMessagesVault::usersWithVault
---
.../java/org/apache/james/vault/DeletedMessageVault.java | 2 ++
.../james/vault/memory/MemoryDeletedMessagesVault.java | 8 ++++++++
.../apache/james/vault/DeletedMessageVaultContract.java | 15 +++++++++++++++
.../james/vault/MailRepositoryDeletedMessageVault.java | 14 ++++++++++++++
4 files changed, 39 insertions(+)
diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVault.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVault.java
index ff10a63..54d3579 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVault.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVault.java
@@ -34,4 +34,6 @@ public interface DeletedMessageVault {
Publisher<Void> delete(User user, MessageId messageId);
Publisher<DeletedMessage> search(User user, Query query);
+
+ Publisher<User> usersWithVault();
}
diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java
index 7e9faa3..3389dcb 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.model.MessageId;
import org.apache.james.vault.DeletedMessage;
import org.apache.james.vault.DeletedMessageVault;
import org.apache.james.vault.search.Query;
+import org.reactivestreams.Publisher;
import com.google.common.base.Preconditions;
import com.google.common.collect.HashBasedTable;
@@ -96,6 +97,13 @@ public class MemoryDeletedMessagesVault implements DeletedMessageVault {
.filter(query.toPredicate());
}
+ @Override
+ public Publisher<User> usersWithVault() {
+ synchronized (table) {
+ return Flux.fromIterable(ImmutableList.copyOf(table.rowKeySet()));
+ }
+ }
+
private Flux<DeletedMessage> listAll(User user) {
synchronized (table) {
return Flux.fromIterable(ImmutableList.copyOf(table.row(user).values()))
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
index 7405c3e..0f4b3c6 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
@@ -164,6 +164,21 @@ public interface DeletedMessageVaultContract {
}
@Test
+ default void usersWithVaultShouldReturnEmptyWhenNoItem() {
+ assertThat(Flux.from(getVault().usersWithVault()).collectList().block())
+ .isEmpty();
+ }
+
+ @Test
+ default void usersWithVaultShouldReturnAllUsers() {
+ Mono.from(getVault().append(USER, DELETED_MESSAGE, new ByteArrayInputStream(CONTENT))).block();
+ Mono.from(getVault().append(USER_2, DELETED_MESSAGE, new ByteArrayInputStream(CONTENT))).block();
+
+ assertThat(Flux.from(getVault().usersWithVault()).collectList().block())
+ .containsOnly(USER, USER_2);
+ }
+
+ @Test
default void appendShouldRunSuccessfullyInAConcurrentContext() throws Exception {
int operationCount = 10;
int threadCount = 10;
diff --git a/server/mailrepository/deleted-messages-vault-repository/src/main/java/org/apache/james/vault/MailRepositoryDeletedMessageVault.java b/server/mailrepository/deleted-messages-vault-repository/src/main/java/org/apache/james/vault/MailRepositoryDeletedMessageVault.java
index bd1943c..a99014b 100644
--- a/server/mailrepository/deleted-messages-vault-repository/src/main/java/org/apache/james/vault/MailRepositoryDeletedMessageVault.java
+++ b/server/mailrepository/deleted-messages-vault-repository/src/main/java/org/apache/james/vault/MailRepositoryDeletedMessageVault.java
@@ -28,6 +28,7 @@ import org.apache.james.core.User;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryPath;
import org.apache.james.mailrepository.api.MailRepositoryStore;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.server.core.MimeMessageInputStream;
@@ -37,7 +38,9 @@ import org.reactivestreams.Publisher;
import com.github.fge.lambdas.Throwing;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Iterables;
+import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
@@ -124,6 +127,17 @@ public class MailRepositoryDeletedMessageVault implements DeletedMessageVault {
}
}
+ @Override
+ public Publisher<User> usersWithVault() {
+ return Flux.fromStream(mailRepositoryStore.getUrls()
+ .filter(url -> url.hasPrefix(configuration.urlPrefix))
+ .map(MailRepositoryUrl::getPath)
+ .map(MailRepositoryPath::parts)
+ .peek(parts -> Preconditions.checkState(!parts.isEmpty()))
+ .map(Iterables::getLast)
+ .map(User::fromUsername));
+ }
+
private MailRepository repositoryForUser(User user) {
MailRepositoryUrl mailRepositoryUrl = configuration.urlPrefix.subUrl(user.asString());
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org