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 <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org