[jira] [Created] (JAMES-2735) Add new mailet and matcher that uses the headers and the per recipients

2019-04-18 Thread Simon Levesque (JIRA)
Simon Levesque created JAMES-2735:
-

 Summary: Add new mailet and matcher that uses the headers and the 
per recipients
 Key: JAMES-2735
 URL: https://issues.apache.org/jira/browse/JAMES-2735
 Project: James Server
  Issue Type: New Feature
  Components: Matchers/Mailets (bundled)
Affects Versions: 3.3.0
Reporter: Simon Levesque


Currently, the RemoveHeader and HasHeader components are only acting on the 
global ones; not the per recipient ones.

Need to create:
- RemoveHeaderGlobalAndPerRecipient
- HasHeaderGlobalAndPerRecipient



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[jira] [Commented] (JAMES-2735) Add new mailet and matcher that uses the headers and the per recipients

2019-04-18 Thread Simon Levesque (JIRA)


[ 
https://issues.apache.org/jira/browse/JAMES-2735?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16820968#comment-16820968
 ] 

Simon Levesque commented on JAMES-2735:
---

as discussed, I will do a pull request with these:
- 
https://github.com/foilen/james-extra-components/blob/master/src/main/java/com/foilen/james/components/mailet/RemoveHeaderGlobalAndSpecific.java
-- 
https://github.com/foilen/james-extra-components/blob/master/src/test/java/com/foilen/james/components/mailet/RemoveHeaderGlobalAndSpecificTest.java
- 
https://github.com/foilen/james-extra-components/blob/master/src/main/java/com/foilen/james/components/matcher/HasHeaderGlobalAndSpecific.java
-- 
https://github.com/foilen/james-extra-components/blob/master/src/test/java/com/foilen/james/components/matcher/HasHeaderGlobalAndSpecificTest.java


> Add new mailet and matcher that uses the headers and the per recipients
> ---
>
> Key: JAMES-2735
> URL: https://issues.apache.org/jira/browse/JAMES-2735
> Project: James Server
>  Issue Type: New Feature
>  Components: Matchers/Mailets (bundled)
>Affects Versions: 3.3.0
>Reporter: Simon Levesque
>Priority: Minor
>
> Currently, the RemoveHeader and HasHeader components are only acting on the 
> global ones; not the per recipient ones.
> Need to create:
> - RemoveHeaderGlobalAndPerRecipient
> - HasHeaderGlobalAndPerRecipient



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[james-project] branch master updated (5560716 -> 6fb06d5)

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


from 5560716  JAMES-2713 Add integration test for Delete API
 new 6c88dad  JAMES-2721 using a @ClassRule for a singleton is pointless
 new 6fb06d5  JAMES-2721 provide a builder-like API for allowing Cassandra 
restart between tests

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../cassandra/DockerCassandraRestartRule.java  | 30 -
 .../backends/cassandra/DockerCassandraRule.java| 11 
 .../backend/rabbitmq/DockerRabbitMQTestRule.java   | 31 --
 .../cassandra/CassandraCombinationManagerTest.java |  7 +
 .../CassandraMailboxManagerStressTest.java |  7 +
 .../CassandraMessageIdManagerQuotaTest.java|  7 +
 .../CassandraMessageIdManagerSideEffectTest.java   |  7 +
 .../CassandraMessageIdManagerStorageTest.java  |  7 +
 .../CassandraSubscriptionManagerTest.java  |  7 +
 .../mail/CassandraAnnotationMapperTest.java|  7 +
 .../mail/CassandraAttachmentMapperTest.java|  7 +
 .../mail/CassandraGenericMailboxMapperTest.java|  7 +
 .../CassandraMailboxManagerAttachmentTest.java |  7 +
 .../mail/CassandraMailboxMapperAclTest.java|  7 +
 .../cassandra/mail/CassandraMailboxMapperTest.java |  7 +
 .../mail/CassandraMessageIdMapperTest.java |  7 +
 .../cassandra/mail/CassandraMessageMapperTest.java |  7 +
 .../cassandra/mail/CassandraMessageMoveTest.java   |  7 +
 .../CassandraMessageWithAttachmentMapperTest.java  |  7 +
 .../quota/CassandraCurrentQuotaManagerTest.java|  7 +
 .../quota/CassandraPerUserMaxQuotaManagerTest.java |  7 +
 .../user/CassandraSubscriptionMapperTest.java  |  7 +
 .../cassandra/CassandraAuthenticatePlainTest.java  |  5 ++--
 .../cassandra/CassandraAuthenticatedStateTest.java |  5 ++--
 .../cassandra/CassandraConcurrentSessionsTest.java |  5 ++--
 .../cassandra/CassandraCondstoreTest.java  |  5 ++--
 .../imapmailbox/cassandra/CassandraCopyTest.java   |  5 ++--
 .../imapmailbox/cassandra/CassandraEventsTest.java |  5 ++--
 .../cassandra/CassandraExpungeTest.java|  5 ++--
 .../cassandra/CassandraFetchBodySectionTest.java   |  5 ++--
 .../cassandra/CassandraFetchBodyStructureTest.java |  5 ++--
 .../cassandra/CassandraFetchHeadersTest.java   |  5 ++--
 .../imapmailbox/cassandra/CassandraFetchTest.java  |  5 ++--
 .../cassandra/CassandraListingTest.java|  5 ++--
 .../cassandra/CassandraListingWithSharingTest.java |  5 ++--
 .../cassandra/CassandraMailboxAnnotationTest.java  |  5 ++--
 .../CassandraMailboxWithLongNameErrorTest.java |  5 ++--
 .../imapmailbox/cassandra/CassandraMoveTest.java   |  5 ++--
 .../CassandraNonAuthenticatedStateTest.java|  5 ++--
 .../cassandra/CassandraPartialFetchTest.java   |  5 ++--
 .../imapmailbox/cassandra/CassandraQuotaTest.java  |  5 ++--
 .../imapmailbox/cassandra/CassandraRenameTest.java |  5 ++--
 .../imapmailbox/cassandra/CassandraSearchTest.java |  5 ++--
 .../cassandra/CassandraSecurityTest.java   |  5 ++--
 .../imapmailbox/cassandra/CassandraSelectTest.java |  5 ++--
 .../cassandra/CassandraSelectedInboxTest.java  |  5 ++--
 .../cassandra/CassandraSelectedStateTest.java  |  5 ++--
 .../cassandra/CassandraUidSearchOnIndexTest.java   |  5 ++--
 .../cassandra/CassandraUidSearchTest.java  |  5 ++--
 .../cassandra/CassandraUserFlagsSupportTest.java   |  5 ++--
 .../rabbitmq/RabbitMQAuthenticatePlainTest.java|  5 ++--
 .../rabbitmq/RabbitMQAuthenticatedStateTest.java   |  5 ++--
 .../rabbitmq/RabbitMQConcurrentSessionsTest.java   |  5 ++--
 .../rabbitmq/RabbitMQCondstoreTest.java|  5 ++--
 .../mpt/imapmailbox/rabbitmq/RabbitMQCopyTest.java |  5 ++--
 .../imapmailbox/rabbitmq/RabbitMQEventsTest.java   |  5 ++--
 .../rabbitmq/RabbitMQFetchBodySectionTest.java |  5 ++--
 .../rabbitmq/RabbitMQFetchBodyStructureTest.java   |  5 ++--
 .../rabbitmq/RabbitMQFetchHeadersTest.java |  5 ++--
 .../imapmailbox/rabbitmq/RabbitMQFetchTest.java|  5 ++--
 .../imapmailbox/rabbitmq/RabbitMQListingTest.java  |  5 ++--
 .../rabbitmq/RabbitMQListingWithSharingTest.java   |  5 ++--
 .../rabbitmq/RabbitMQMailboxAnnotationTest.java|  5 ++--
 .../RabbitMQMailboxWithLongNameErrorTest.java  |  5 ++--
 .../mpt/imapmailbox/rabbitmq/RabbitMQMoveTest.java |  5 ++--
 .../RabbitMQNonAuthenticatedStateTest.java |  5 ++--
 .../rabbitmq/RabbitMQPartialFetchTest.java |  5 ++--
 .../imapmailbox/rabbitmq/RabbitMQQuotaTest.java|  5 ++--
 .../imapmailbox/rabbitmq/RabbitMQRenameTest.ja

[james-project] 02/02: JAMES-2721 provide a builder-like API for allowing Cassandra restart between tests

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6fb06d544a26551a62dfa973fa10aa0acc78fc12
Author: Matthieu Baechler 
AuthorDate: Fri Apr 12 14:55:59 2019 +0200

JAMES-2721 provide a builder-like API for allowing Cassandra restart 
between tests
---
 .../cassandra/DockerCassandraRestartRule.java  | 30 -
 .../backends/cassandra/DockerCassandraRule.java| 11 
 .../backend/rabbitmq/DockerRabbitMQTestRule.java   | 31 --
 .../cassandra/CassandraCombinationManagerTest.java |  6 +
 .../CassandraMailboxManagerStressTest.java |  6 +
 .../CassandraMessageIdManagerQuotaTest.java|  6 +
 .../CassandraMessageIdManagerSideEffectTest.java   |  6 +
 .../CassandraMessageIdManagerStorageTest.java  |  6 +
 .../CassandraSubscriptionManagerTest.java  |  6 +
 .../mail/CassandraAnnotationMapperTest.java|  6 +
 .../mail/CassandraAttachmentMapperTest.java|  6 +
 .../mail/CassandraGenericMailboxMapperTest.java|  6 +
 .../CassandraMailboxManagerAttachmentTest.java |  6 +
 .../mail/CassandraMailboxMapperAclTest.java|  6 +
 .../cassandra/mail/CassandraMailboxMapperTest.java |  6 +
 .../mail/CassandraMessageIdMapperTest.java |  6 +
 .../cassandra/mail/CassandraMessageMapperTest.java |  6 +
 .../cassandra/mail/CassandraMessageMoveTest.java   |  6 +
 .../CassandraMessageWithAttachmentMapperTest.java  |  6 +
 .../quota/CassandraCurrentQuotaManagerTest.java|  6 +
 .../quota/CassandraPerUserMaxQuotaManagerTest.java |  6 +
 .../user/CassandraSubscriptionMapperTest.java  |  6 +
 .../cassandra/CassandraAuthenticatePlainTest.java  |  2 +-
 .../cassandra/CassandraAuthenticatedStateTest.java |  2 +-
 .../cassandra/CassandraConcurrentSessionsTest.java |  2 +-
 .../cassandra/CassandraCondstoreTest.java  |  2 +-
 .../imapmailbox/cassandra/CassandraCopyTest.java   |  2 +-
 .../imapmailbox/cassandra/CassandraEventsTest.java |  2 +-
 .../cassandra/CassandraExpungeTest.java|  2 +-
 .../cassandra/CassandraFetchBodySectionTest.java   |  2 +-
 .../cassandra/CassandraFetchBodyStructureTest.java |  2 +-
 .../cassandra/CassandraFetchHeadersTest.java   |  2 +-
 .../imapmailbox/cassandra/CassandraFetchTest.java  |  2 +-
 .../cassandra/CassandraListingTest.java|  2 +-
 .../cassandra/CassandraListingWithSharingTest.java |  2 +-
 .../cassandra/CassandraMailboxAnnotationTest.java  |  2 +-
 .../CassandraMailboxWithLongNameErrorTest.java |  2 +-
 .../imapmailbox/cassandra/CassandraMoveTest.java   |  2 +-
 .../CassandraNonAuthenticatedStateTest.java|  2 +-
 .../cassandra/CassandraPartialFetchTest.java   |  2 +-
 .../imapmailbox/cassandra/CassandraQuotaTest.java  |  2 +-
 .../imapmailbox/cassandra/CassandraRenameTest.java |  2 +-
 .../imapmailbox/cassandra/CassandraSearchTest.java |  2 +-
 .../cassandra/CassandraSecurityTest.java   |  2 +-
 .../imapmailbox/cassandra/CassandraSelectTest.java |  2 +-
 .../cassandra/CassandraSelectedInboxTest.java  |  2 +-
 .../cassandra/CassandraSelectedStateTest.java  |  2 +-
 .../cassandra/CassandraUidSearchOnIndexTest.java   |  2 +-
 .../cassandra/CassandraUidSearchTest.java  |  2 +-
 .../cassandra/CassandraUserFlagsSupportTest.java   |  2 +-
 .../rabbitmq/RabbitMQAuthenticatePlainTest.java|  2 +-
 .../rabbitmq/RabbitMQAuthenticatedStateTest.java   |  2 +-
 .../rabbitmq/RabbitMQConcurrentSessionsTest.java   |  2 +-
 .../rabbitmq/RabbitMQCondstoreTest.java|  2 +-
 .../mpt/imapmailbox/rabbitmq/RabbitMQCopyTest.java |  2 +-
 .../imapmailbox/rabbitmq/RabbitMQEventsTest.java   |  2 +-
 .../rabbitmq/RabbitMQFetchBodySectionTest.java |  2 +-
 .../rabbitmq/RabbitMQFetchBodyStructureTest.java   |  2 +-
 .../rabbitmq/RabbitMQFetchHeadersTest.java |  2 +-
 .../imapmailbox/rabbitmq/RabbitMQFetchTest.java|  2 +-
 .../imapmailbox/rabbitmq/RabbitMQListingTest.java  |  2 +-
 .../rabbitmq/RabbitMQListingWithSharingTest.java   |  2 +-
 .../rabbitmq/RabbitMQMailboxAnnotationTest.java|  2 +-
 .../RabbitMQMailboxWithLongNameErrorTest.java  |  2 +-
 .../mpt/imapmailbox/rabbitmq/RabbitMQMoveTest.java |  2 +-
 .../RabbitMQNonAuthenticatedStateTest.java |  2 +-
 .../rabbitmq/RabbitMQPartialFetchTest.java |  2 +-
 .../imapmailbox/rabbitmq/RabbitMQQuotaTest.java|  2 +-
 .../imapmailbox/rabbitmq/RabbitMQRenameTest.java   |  2 +-
 .../imapmailbox/rabbitmq/RabbitMQSearchTest.java   |  2 +-
 .../imapmailbox/rabbitmq/RabbitMQSecurityTest.java |  2 +-
 .../imapmailbox/rabbitmq/RabbitMQSelectTest.java   |  2 +-
 .../rabbitmq/RabbitMQSelectedInboxTest.java|  2 +-
 .../rabbitmq/RabbitMQSelectedStateTest.java|  2 +-
 .../rabbitmq/RabbitMQUidSearchTest.java|  2 +-
 .../ra

[jira] [Commented] (JAMES-2709) [BlobSharingMechanism] LinShare implementation

2019-04-18 Thread Rene Cordier (JIRA)


[ 
https://issues.apache.org/jira/browse/JAMES-2709?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16820814#comment-16820814
 ] 

Rene Cordier commented on JAMES-2709:
-

PR : https://github.com/linagora/james-project/pull/2310

> [BlobSharingMechanism] LinShare implementation
> --
>
> Key: JAMES-2709
> URL: https://issues.apache.org/jira/browse/JAMES-2709
> Project: James Server
>  Issue Type: New Feature
>Reporter: Rene Cordier
>Priority: Major
> Fix For: 3.4.0
>
>
> Implement as a third-party software a BlobSharingMechanism that:
> * Upload the file in the sharee workspace
> * Shares it to the reciepient
> Implement tests about it.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[jira] [Closed] (JAMES-2713) [Integration Tests] Webadmin delete and purge APIs

2019-04-18 Thread Antoine Duprat (JIRA)


 [ 
https://issues.apache.org/jira/browse/JAMES-2713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Antoine Duprat closed JAMES-2713.
-

> [Integration Tests] Webadmin delete and purge APIs
> --
>
> Key: JAMES-2713
> URL: https://issues.apache.org/jira/browse/JAMES-2713
> Project: James Server
>  Issue Type: New Feature
>Reporter: Rene Cordier
>Priority: Major
> Fix For: 3.4.0
>
>
> In cassandra and memory in `/server/protocols/jmap-integration-testing`, 
> write following tests to delete and purge mails from the supertrash feature. 
> Make sure as well to setup correctly guice bindings to prove that this new 
> feature integrates well into our system.
> *Delete API*
> {code}
> Given an user with emails present in the vault
> When admin is using delete with the message ID of one of those emails
> Then the email should be deleted from user's vault
> {code}
> {code}
> Given an user with emails present in the vault
> When admin is using delete with the message ID that doesn't exist
> Then no email should be deleted from user's vault
> {code}
> *Purge API*
> {code}
> Given an user with emails present in the vault matching a configured 
> retention policy
> When admin is using purge
> Then the emails matching the configured retention policy should be deleted 
> from user's vault
> {code}
> {code}
> Given an user with emails present in the vault not matching a configured 
> retention policy
> When admin is using purge
> Then no emails should be deleted from user's vault
> {code}
> {code}
> Given an user with no emails present in the vault
> When admin is using purge
> Then nothing should happen
> {code}
> {code}
> Given two users with emails present in their vault matching a configured 
> retention policy
> When admin is using purge
> Then the emails matching the configured retention policy should be deleted 
> from both users' vault
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[jira] [Resolved] (JAMES-2713) [Integration Tests] Webadmin delete and purge APIs

2019-04-18 Thread Antoine Duprat (JIRA)


 [ 
https://issues.apache.org/jira/browse/JAMES-2713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Antoine Duprat resolved JAMES-2713.
---
Resolution: Fixed

merged

> [Integration Tests] Webadmin delete and purge APIs
> --
>
> Key: JAMES-2713
> URL: https://issues.apache.org/jira/browse/JAMES-2713
> Project: James Server
>  Issue Type: New Feature
>Reporter: Rene Cordier
>Priority: Major
> Fix For: 3.4.0
>
>
> In cassandra and memory in `/server/protocols/jmap-integration-testing`, 
> write following tests to delete and purge mails from the supertrash feature. 
> Make sure as well to setup correctly guice bindings to prove that this new 
> feature integrates well into our system.
> *Delete API*
> {code}
> Given an user with emails present in the vault
> When admin is using delete with the message ID of one of those emails
> Then the email should be deleted from user's vault
> {code}
> {code}
> Given an user with emails present in the vault
> When admin is using delete with the message ID that doesn't exist
> Then no email should be deleted from user's vault
> {code}
> *Purge API*
> {code}
> Given an user with emails present in the vault matching a configured 
> retention policy
> When admin is using purge
> Then the emails matching the configured retention policy should be deleted 
> from user's vault
> {code}
> {code}
> Given an user with emails present in the vault not matching a configured 
> retention policy
> When admin is using purge
> Then no emails should be deleted from user's vault
> {code}
> {code}
> Given an user with no emails present in the vault
> When admin is using purge
> Then nothing should happen
> {code}
> {code}
> Given two users with emails present in their vault matching a configured 
> retention policy
> When admin is using purge
> Then the emails matching the configured retention policy should be deleted 
> from both users' vault
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[jira] [Closed] (JAMES-2710) [WebAdmin DMRS Route] Purge API

2019-04-18 Thread Antoine Duprat (JIRA)


 [ 
https://issues.apache.org/jira/browse/JAMES-2710?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Antoine Duprat closed JAMES-2710.
-

> [WebAdmin DMRS Route] Purge API
> ---
>
> Key: JAMES-2710
> URL: https://issues.apache.org/jira/browse/JAMES-2710
> Project: James Server
>  Issue Type: New Feature
>  Components: webadmin
>Reporter: Rene Cordier
>Priority: Major
> Fix For: 3.4.0
>
>
> *API proposal*
> {code:java}
> POST /deletedMessages?action=purge
> - 200 success
> {"taskId":"1234-5678"}
> {code}
> * Define POST method in DeletedMessageVaultRoutes(#1024 (closed))
> * Using configuration retention to work with purge
> Document that a CRON needs to be configured to call this endpoint in a 
> regular basis.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[jira] [Resolved] (JAMES-2710) [WebAdmin DMRS Route] Purge API

2019-04-18 Thread Antoine Duprat (JIRA)


 [ 
https://issues.apache.org/jira/browse/JAMES-2710?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Antoine Duprat resolved JAMES-2710.
---
Resolution: Fixed

merged

> [WebAdmin DMRS Route] Purge API
> ---
>
> Key: JAMES-2710
> URL: https://issues.apache.org/jira/browse/JAMES-2710
> Project: James Server
>  Issue Type: New Feature
>  Components: webadmin
>Reporter: Rene Cordier
>Priority: Major
> Fix For: 3.4.0
>
>
> *API proposal*
> {code:java}
> POST /deletedMessages?action=purge
> - 200 success
> {"taskId":"1234-5678"}
> {code}
> * Define POST method in DeletedMessageVaultRoutes(#1024 (closed))
> * Using configuration retention to work with purge
> Document that a CRON needs to be configured to call this endpoint in a 
> regular basis.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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



[james-project] 03/11: JAMES-2710 Add getDeleteByQueryExecutor() for easy spy memory-vault

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 245146476040907231f58089dfe81b47fd625ee3
Author: datph 
AuthorDate: Fri Apr 5 11:54:05 2019 +0700

JAMES-2710 Add getDeleteByQueryExecutor() for easy spy memory-vault
---
 .../org/apache/james/vault/memory/MemoryDeletedMessagesVault.java | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

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 773faec..ecee56e 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
@@ -40,6 +40,7 @@ import org.apache.james.vault.utils.DeleteByQueryExecutor;
 import org.apache.james.vault.utils.VaultGarbageCollectionTask;
 import org.reactivestreams.Publisher;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.ImmutableList;
@@ -122,10 +123,15 @@ public class MemoryDeletedMessagesVault implements 
DeletedMessageVault {
 ZonedDateTime beginningOfRetentionPeriod = 
now.minus(retentionConfiguration.getRetentionPeriod());
 
 return new VaultGarbageCollectionTask(
-deleteByQueryExecutor,
+getDeleteByQueryExecutor(),
 beginningOfRetentionPeriod);
 }
 
+@VisibleForTesting
+public DeleteByQueryExecutor getDeleteByQueryExecutor() {
+return deleteByQueryExecutor;
+}
+
 private Flux listAll(User user) {
 synchronized (table) {
 return 
Flux.fromIterable(ImmutableList.copyOf(table.row(user).values()))


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



[james-project] 07/11: JAMES-2711 Add document for DeleteAPI of DMVRoutes

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit b8a1afec83db928ef20970d330d303ccbcd340dd
Author: datph 
AuthorDate: Tue Apr 9 15:45:25 2019 +0700

JAMES-2711 Add document for DeleteAPI of DMVRoutes
---
 .../vault/routes/DeletedMessagesVaultRoutes.java   | 15 +-
 src/site/markdown/server/manage-webadmin.md| 34 +++---
 2 files changed, 37 insertions(+), 12 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
index e2faa4c..37acd23 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
@@ -140,12 +140,11 @@ public class DeletedMessagesVaultRoutes implements Routes 
{
 
 public static final String ROOT_PATH = "deletedMessages";
 public static final String USERS = "users";
-public static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS;
 private static final String USER_PATH_PARAM = ":user";
 static final String MESSAGE_PATH_PARAM = "messages";
 private static final String MESSAGE_ID_PARAM = ":messageId";
-private static final String RESTORE_PATH = USER_PATH + SEPARATOR + 
USER_PATH_PARAM;
-private static final String DELETE_PATH = USER_PATH + SEPARATOR + 
USER_PATH_PARAM + SEPARATOR + MESSAGE_PATH_PARAM + SEPARATOR + MESSAGE_ID_PARAM;
+static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS + SEPARATOR 
+ USER_PATH_PARAM;
+private static final String DELETE_PATH = ROOT_PATH + SEPARATOR + USERS + 
SEPARATOR + USER_PATH_PARAM + SEPARATOR + MESSAGE_PATH_PARAM + SEPARATOR + 
MESSAGE_ID_PARAM;
 private static final String SCOPE_QUERY_PARAM = "scope";
 private static final String ACTION_QUERY_PARAM = "action";
 private static final String EXPORT_TO_QUERY_PARAM = "exportTo";
@@ -183,14 +182,15 @@ public class DeletedMessagesVaultRoutes implements Routes 
{
 
 @Override
 public void define(Service service) {
-service.post(RESTORE_PATH, this::userActions, jsonTransformer);
+service.post(USER_PATH, this::userActions, jsonTransformer);
 service.delete(ROOT_PATH, this::deleteWithScope, jsonTransformer);
 service.delete(DELETE_PATH, this::deleteMessage, jsonTransformer);
 }
 
 @POST
-@Path(USER_PATH)
-@ApiOperation(value = "Restore deleted emails from a specified user to his 
new restore mailbox")
+@Path("users/{user}")
+@ApiOperation(value = "Restore deleted emails from a specified user to his 
new restore mailbox" +
+" or export their content to a destination mail address")
 @ApiImplicitParams({
 @ApiImplicitParam(
 required = true,
@@ -231,7 +231,6 @@ public class DeletedMessagesVaultRoutes implements Routes {
 }
 
 @DELETE
-@Path(ROOT_PATH)
 @ApiOperation(value = "Purge all expired messages based on retentionPeriod 
of deletedMessageVault configuration")
 @ApiImplicitParams({
 @ApiImplicitParam(
@@ -254,7 +253,7 @@ public class DeletedMessagesVaultRoutes implements Routes {
 }
 
 @DELETE
-@Path(DELETE_PATH)
+@Path("users/{user}/messages/{messageId}")
 @ApiOperation(value = "Delete message with messageId")
 @ApiImplicitParams({
 @ApiImplicitParam(
diff --git a/src/site/markdown/server/manage-webadmin.md 
b/src/site/markdown/server/manage-webadmin.md
index 98ef7fb..a1b9a4a 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -2644,6 +2644,7 @@ Here are the following actions available on the 'Deleted 
Messages Vault'
  - [Restore Deleted Messages](#Restore_deleted_messages)
  - [Export Deleted Messages](#Export_deleted_messages)
  - [Purge Deleted Messages](#Purge_deleted_messages)
+ - [Permanently remove Deleted Message](#Permanently_remove_deleted_message) 
 
  Note that the 'Deleted Messages Vault' feature is only supported on top of 
Cassandra-Guice.
 
@@ -2820,9 +2821,9 @@ while:
  
 ### Purge Deleted Messages
  
-You can overwrite 'retentionPeriod' configuration in deletedMessageVault or 
use default value is 1 year.
+You can overwrite 'retentionPeriod' configuration in 'deletedMessageVault' 
configuration file or use default value is 1 year.
 
-Delete all expired deleted messages with 'retentionPeriod' configured.
+Purge all deleted messages older than configured 'retentionPeriod'
 
 ```
 curl -XDEL http://ip:port/deletedMessages?scope=ex

[james-project] 09/11: JAMES-2713 Change params config for RequestSpecification The params default update strategy is MERGE. So we will have conflict when request 2 webAdmin APIs in a testcase. We cha

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 76336eb4bc97eaf1105ddb51ae6d5f5ec6bc3ce7
Author: datph 
AuthorDate: Thu Apr 11 18:23:44 2019 +0700

JAMES-2713 Change params config for RequestSpecification
The params default update strategy is MERGE. So we will have conflict when
request 2 webAdmin APIs in a testcase. We change params update strategy to 
REPLACE
---
 .../james/jmap/methods/integration/DeletedMessagesVaultTest.java   | 6 +-
 .../src/test/java/org/apache/james/webadmin/WebAdminUtils.java | 7 ++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
index 6c76951..8ab9e11 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
@@ -21,6 +21,7 @@ package org.apache.james.jmap.methods.integration;
 
 import static io.restassured.RestAssured.given;
 import static io.restassured.RestAssured.with;
+import static io.restassured.config.ParamConfig.UpdateStrategy.REPLACE;
 import static 
org.apache.james.jmap.HttpJmapAuthentication.authenticateJamesUser;
 import static org.apache.james.jmap.JmapCommonRequests.getLastMessageId;
 import static org.apache.james.jmap.JmapCommonRequests.getOutboxId;
@@ -73,6 +74,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 
 import io.restassured.RestAssured;
+import io.restassured.config.ParamConfig;
 import io.restassured.parsing.Parser;
 import io.restassured.specification.RequestSpecification;
 
@@ -164,7 +166,9 @@ public abstract class DeletedMessagesVaultTest {
 homerAccessToken = authenticateJamesUser(baseUri(jmapServer), HOMER, 
PASSWORD);
 bartAccessToken = authenticateJamesUser(baseUri(jmapServer), BART, 
BOB_PASSWORD);
 
-webAdminApi = 
WebAdminUtils.spec(jmapServer.getProbe(WebAdminGuiceProbe.class).getWebAdminPort());
+webAdminApi = 
WebAdminUtils.spec(jmapServer.getProbe(WebAdminGuiceProbe.class).getWebAdminPort())
+.config(WebAdminUtils.defaultConfig()
+.paramConfig(new ParamConfig(REPLACE, REPLACE, REPLACE)));
 }
 
 @After
diff --git 
a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
 
b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index a2c3a2a..b5a02fa 100644
--- 
a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ 
b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -34,6 +34,7 @@ import 
org.apache.james.webadmin.authentication.NoAuthenticationFilter;
 import com.github.steveash.guavate.Guavate;
 
 import io.restassured.builder.RequestSpecBuilder;
+import io.restassured.config.RestAssuredConfig;
 import io.restassured.http.ContentType;
 import io.restassured.specification.RequestSpecification;
 
@@ -68,10 +69,14 @@ public class WebAdminUtils {
 return new RequestSpecBuilder()
 .setContentType(ContentType.JSON)
 .setAccept(ContentType.JSON)
-
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
+.setConfig(defaultConfig())
 .setPort(port.getValue());
 }
 
+public static RestAssuredConfig defaultConfig() {
+return 
newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8));
+}
+
 public static RequestSpecification spec(Port port) {
 return given().spec(buildRequestSpecification(port).build());
 }


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



[james-project] 11/11: JAMES-2713 Add integration test for Delete API

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 556071622272b41f6bdc5066d3720fa5cf87a1eb
Author: datph 
AuthorDate: Wed Apr 17 15:15:40 2019 +0700

JAMES-2713 Add integration test for Delete API
---
 .../integration/DeletedMessagesVaultTest.java  | 82 ++
 1 file changed, 82 insertions(+)

diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
index 7962379..8bf523f 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
@@ -688,6 +688,75 @@ public abstract class DeletedMessagesVaultTest {
 .hasSize(0);
 }
 
+@Test
+public void vaultDeleteShouldDeleteMessageThenExportWithNoEntry() throws 
Exception {
+bartSendMessageToHomer();
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+String messageIdOfHomer = 
listMessageIdsForAccount(homerAccessToken).get(0);
+
+homerDeletesMessages(listMessageIdsForAccount(homerAccessToken));
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+deleteVault(HOMER, messageIdOfHomer);
+
+String fileLocation = 
exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, 
bartAccessToken);
+try (ZipAssert zipAssert = assertThatZip(new 
FileInputStream(fileLocation))) {
+zipAssert.hasNoEntry();
+}
+}
+
+@Test
+public void vaultDeleteShouldNotDeleteEmptyVaultThenExportNoEntry() throws 
Exception {
+bartSendMessageToHomer();
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+String messageIdOfHomer = 
listMessageIdsForAccount(homerAccessToken).get(0);
+
+deleteVault(HOMER, messageIdOfHomer);
+
+String fileLocation = 
exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, 
bartAccessToken);
+try (ZipAssert zipAssert = assertThatZip(new 
FileInputStream(fileLocation))) {
+zipAssert.hasNoEntry();
+}
+}
+
+@Test
+public void 
vaultDeleteShouldNotDeleteNotMatchedMessageInVaultThenExportAnEntry() throws 
Exception {
+bartSendMessageToHomer();
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+String messageIdOfBart = 
listMessageIdsForAccount(bartAccessToken).get(0);
+String messageIdOfHomer = 
listMessageIdsForAccount(homerAccessToken).get(0);
+
+homerDeletesMessages(listMessageIdsForAccount(homerAccessToken));
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+deleteVault(HOMER, messageIdOfBart);
+
+String fileLocation = 
exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, 
bartAccessToken);
+try (ZipAssert zipAssert = assertThatZip(new 
FileInputStream(fileLocation))) {
+zipAssert.hasEntriesSize(1)
+.allSatisfies(entry -> entry.hasName(messageIdOfHomer + 
".eml"));
+}
+}
+
+@Test
+public void vaultDeleteShouldNotAppendMessageToTheUserMailbox() {
+bartSendMessageToHomer();
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+String messageIdOfHomer = 
listMessageIdsForAccount(homerAccessToken).get(0);
+
+homerDeletesMessages(listMessageIdsForAccount(homerAccessToken));
+WAIT_TWO_MINUTES.until(() -> 
listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+deleteVault(HOMER, messageIdOfHomer);
+
+assertThat(listMessageIdsForAccount(homerAccessToken))
+.hasSize(0);
+}
+
 private String exportAndGetFileLocationFromLastMail(ExportRequest 
exportRequest, AccessToken shareeAccessToken) {
 int currentNumberOfMessages = 
listMessageIdsForAccount(shareeAccessToken).size();
 exportVaultContent(exportRequest);
@@ -851,4 +920,17 @@ public abstract class DeletedMessagesVaultTest {
 .then()
 .body("status", is("completed"));
 }
+
+private void deleteVault(String user, String messageId) {
+String taskId =
+webAdminApi.with()
+.delete("/deletedMessages/users/" + user + "/messages/" + 
messageId)
+.jsonPath()
+

[james-project] 02/11: JAMES-2710 Change ROOT_PATH of DeleteMessagesVaultRoutes

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 18d0d766ce364b572e1efed3e90eff20ad56d024
Author: datph 
AuthorDate: Thu Apr 4 15:21:28 2019 +0700

JAMES-2710 Change ROOT_PATH of DeleteMessagesVaultRoutes
---
 .../vault/routes/DeletedMessagesVaultRoutes.java   |   8 +-
 .../routes/DeletedMessagesVaultRoutesTest.java | 116 +++--
 2 files changed, 65 insertions(+), 59 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
index c38bcda..32f5d2b 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
@@ -102,9 +102,11 @@ public class DeletedMessagesVaultRoutes implements Routes {
 }
 }
 
-public static final String ROOT_PATH = "deletedMessages/users";
+public static final String ROOT_PATH = "deletedMessages";
+public static final String USERS = "users";
+public static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS;
 private static final String USER_PATH_PARAM = "user";
-private static final String RESTORE_PATH = ROOT_PATH + SEPARATOR + ":" + 
USER_PATH_PARAM;
+private static final String RESTORE_PATH = USER_PATH + SEPARATOR + ":" + 
USER_PATH_PARAM;
 private static final String ACTION_QUERY_PARAM = "action";
 private static final String EXPORT_TO_QUERY_PARAM = "exportTo";
 
@@ -140,7 +142,7 @@ public class DeletedMessagesVaultRoutes implements Routes {
 }
 
 @POST
-@Path(ROOT_PATH)
+@Path(USER_PATH)
 @ApiOperation(value = "Restore deleted emails from a specified user to his 
new restore mailbox")
 @ApiImplicitParams({
 @ApiImplicitParam(
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
index 713ddc9..db166b0 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
@@ -34,7 +34,10 @@ import static 
org.apache.james.vault.DeletedMessageFixture.SUBJECT;
 import static org.apache.james.vault.DeletedMessageFixture.USER;
 import static org.apache.james.vault.DeletedMessageFixture.USER_2;
 import static 
org.apache.james.vault.DeletedMessageVaultSearchContract.MESSAGE_ID_GENERATOR;
+import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
+import static 
org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes.USERS;
+import static 
org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes.USER_PATH;
 import static 
org.apache.james.webadmin.vault.routes.RestoreService.RESTORE_MAILBOX_NAME;
 import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1;
 import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2;
@@ -135,6 +138,7 @@ class DeletedMessagesVaultRoutesTest {
 "\"criteria\": []" +
 "}";
 private static final Domain DOMAIN = Domain.of("apache.org");
+private static final String BOB_PATH = USERS + SEPARATOR + USER.asString();
 
 private WebAdminServer webAdminServer;
 private MemoryDeletedMessagesVault vault;
@@ -206,7 +210,7 @@ class DeletedMessagesVaultRoutesTest {
 @Test
 void userVaultAPIShouldReturnInvalidWhenActionIsMissing() {
 when()
-.post(USER.asString())
+.post(BOB_PATH)
 .then()
 .statusCode(HttpStatus.BAD_REQUEST_400)
 .body("statusCode", is(400))
@@ -220,7 +224,7 @@ class DeletedMessagesVaultRoutesTest {
 given()
 .queryParam("action", "")
 .when()
-.post(USER.asString())
+.post(BOB_PATH)
 .then()
 .statusCode(HttpStatus.BAD_REQUEST_400)
 .body("statusCode", is(400))
@@ -234,7 +238,7 @@ class DeletedMessagesVaultRoutesTest {
 given()
 .queryParam("action", "invalid action")
 .when()
-  

[james-project] branch master updated (8d008f5 -> 5560716)

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


from 8d008f5  JAMES-2714 Link configuration details to howTo
 new 6189ecd  JAMES-2710 Rename VaultAction to support purge action
 new 18d0d76  JAMES-2710 Change ROOT_PATH of DeleteMessagesVaultRoutes
 new 2451464  JAMES-2710 Add getDeleteByQueryExecutor() for easy spy 
memory-vault
 new 9a97b6a  JAMES-2710 Add Purge API to DeletedMessagesVaultRoutes
 new c8f84a8  JAMES-2710 Document Purge API
 new 0980816  JAMES-2711 Add DeleteAPI to DeletedMessageVaultRoutes
 new b8a1afe  JAMES-2711 Add document for DeleteAPI of DMVRoutes
 new 0957eec  JAMES-2713 Move UpdatableTickingClock to server-testing for 
using in other modules
 new 76336eb  JAMES-2713 Change params config for RequestSpecification The 
params default update strategy is MERGE. So we will have conflict when request 
2 webAdmin APIs in a testcase. We change params update strategy to REPLACE
 new ae48fba  JAMES-2713 Add integration test for Purge API
 new 5560716  JAMES-2713 Add integration test for Delete API

The 11 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../vault/memory/MemoryDeletedMessagesVault.java   |   8 +-
 .../vault/utils/VaultGarbageCollectionTask.java|   2 +-
 .../CassandraDeletedMessageVaultTest.java  |   6 +-
 .../integration/DeletedMessagesVaultTest.java  | 198 +++-
 ...FileMailRepositoryDeletedMessagesVaultTest.java |   6 +-
 .../memory/MemoryDeletedMessagesVaultTest.java |   6 +-
 .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java |   6 +-
 .../org/apache/james/webadmin/WebAdminUtils.java   |   7 +-
 .../routes/DeletedMessagesVaultDeleteTask.java |  62 ++-
 .../vault/routes/DeletedMessagesVaultRoutes.java   | 209 +++-
 .../routes/DeletedMessagesVaultRoutesTest.java | 545 ++---
 .../RabbitMQMailQueueConfigurationChangeTest.java  |   1 +
 .../queue/rabbitmq/RabbitMQMailQueueTest.java  |   1 +
 .../apache/james/utils}/UpdatableTickingClock.java |  10 +-
 src/site/markdown/server/manage-webadmin.md|  50 ++
 15 files changed, 980 insertions(+), 137 deletions(-)
 copy 
mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
 => 
server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java
 (53%)
 rename 
server/{queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq => 
testing/src/main/java/org/apache/james/utils}/UpdatableTickingClock.java (89%)


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



[james-project] 06/11: JAMES-2711 Add DeleteAPI to DeletedMessageVaultRoutes

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 0980816d7dc2a0c35d8c3c3d41bbc33148379b27
Author: datph 
AuthorDate: Mon Apr 8 16:34:50 2019 +0700

JAMES-2711 Add DeleteAPI to DeletedMessageVaultRoutes
---
 .../routes/DeletedMessagesVaultDeleteTask.java |  84 +
 .../vault/routes/DeletedMessagesVaultRoutes.java   |  58 ++-
 .../routes/DeletedMessagesVaultRoutesTest.java | 191 -
 3 files changed, 329 insertions(+), 4 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java
new file mode 100644
index 000..9c886c5
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java
@@ -0,0 +1,84 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  *
+ *   http://www.apache.org/licenses/LICENSE-2.0 *
+ *  *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
+ * KIND, either express or implied.  See the License for the*
+ * specific language governing permissions and limitations  *
+ * under the License.   *
+ /
+
+package org.apache.james.webadmin.vault.routes;
+
+import java.util.Optional;
+
+import org.apache.james.core.User;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskExecutionDetails;
+import org.apache.james.vault.DeletedMessageVault;
+
+import reactor.core.publisher.Mono;
+
+public class DeletedMessagesVaultDeleteTask implements Task {
+
+public class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
+
+private final User user;
+private final MessageId deleteMessageId;
+
+AdditionalInformation(User user, MessageId deleteMessageId) {
+this.user = user;
+this.deleteMessageId = deleteMessageId;
+}
+
+public String getUser() {
+return user.asString();
+}
+
+public String getDeleteMessageId() {
+return deleteMessageId.serialize();
+}
+}
+
+static final String TYPE = "deletedMessages/delete";
+
+private final DeletedMessageVault vault;
+private final User user;
+private final MessageId messageId;
+
+DeletedMessagesVaultDeleteTask(DeletedMessageVault vault, User user, 
MessageId messageId) {
+this.vault = vault;
+this.user = user;
+this.messageId = messageId;
+}
+
+@Override
+public Result run() {
+return Mono.from(vault.delete(user, messageId))
+.doOnError(e -> LOGGER.error("Error while deleting message {} for 
user {} in DeletedMessageVault: {}", messageId, user, e))
+.thenReturn(Result.COMPLETED)
+.blockOptional()
+.orElse(Result.PARTIAL);
+}
+
+@Override
+public String type() {
+return TYPE;
+}
+
+@Override
+public Optional details() {
+return Optional.of(new AdditionalInformation(user, messageId));
+}
+
+}
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
index 50f483e..e2faa4c 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
@@ -37,6 +37,7 @@ import org.apache.commons.

[james-project] 04/11: JAMES-2710 Add Purge API to DeletedMessagesVaultRoutes

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9a97b6a5f4f0498495431f83815b5c65d2bf9d85
Author: datph 
AuthorDate: Fri Apr 5 11:55:03 2019 +0700

JAMES-2710 Add Purge API to DeletedMessagesVaultRoutes
---
 .../vault/utils/VaultGarbageCollectionTask.java|   2 +-
 .../vault/routes/DeletedMessagesVaultRoutes.java   | 130 +--
 .../routes/DeletedMessagesVaultRoutesTest.java | 240 -
 3 files changed, 357 insertions(+), 15 deletions(-)

diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java
index 36170f3..5a55c80 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java
@@ -65,7 +65,7 @@ public class VaultGarbageCollectionTask implements Task {
 }
 }
 
-private static final String TYPE = "deletedMessages/garbageCollection";
+public static final String TYPE = "deletedMessages/garbageCollection";
 
 private final DeleteByQueryExecutor deleteByQueryExecutor;
 private final DeleteByQueryExecutor.Notifiers notifiers;
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
index 32f5d2b..50f483e 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
@@ -23,10 +23,12 @@ import static org.apache.james.webadmin.Constants.SEPARATOR;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.function.Function;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
 import javax.mail.internet.AddressException;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
@@ -40,6 +42,7 @@ import org.apache.james.task.TaskId;
 import org.apache.james.task.TaskManager;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.james.vault.DeletedMessageVault;
 import org.apache.james.vault.search.Query;
 import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.Routes;
@@ -63,6 +66,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import spark.HaltException;
 import spark.Request;
 import spark.Response;
 import spark.Service;
@@ -85,7 +89,8 @@ public class DeletedMessagesVaultRoutes implements Routes {
 .findFirst();
 }
 
-private static List plainValues() {
+@VisibleForTesting
+static List plainValues() {
 return Stream.of(values())
 .map(VaultAction::getValue)
 .collect(Guavate.toImmutableList());
@@ -102,16 +107,51 @@ public class DeletedMessagesVaultRoutes implements Routes 
{
 }
 }
 
+enum VaultScope {
+EXPIRED("expired");
+
+static Optional getScope(String value) {
+Preconditions.checkNotNull(value, "scope cannot be null");
+Preconditions.checkArgument(StringUtils.isNotBlank(value), "scope 
cannot be empty or blank");
+
+return Stream.of(values())
+.filter(action -> action.value.equals(value))
+.findFirst();
+}
+
+@VisibleForTesting
+static List plainValues() {
+return Stream.of(values())
+.map(VaultScope::getValue)
+.collect(Guavate.toImmutableList());
+}
+
+private final String value;
+
+VaultScope(String value) {
+this.value = value;
+}
+
+public String getValue() {
+return value;
+}
+}
+
 public static final String ROOT_PATH = "deletedMessages";
 public static final String USERS = "users";
 public static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS;
-private static final String USER_PATH_PARAM = "user";
-private static final String RESTORE_PATH = USER_PATH + SEPARATOR + ":" + 
USER_PATH_PARAM;
+private static final String USER_PATH_PARAM = ":user";
+static final S

[james-project] 10/11: JAMES-2713 Add integration test for Purge API

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit ae48fba707fd43de180ce57fab4f2735bf723358
Author: datph 
AuthorDate: Thu Apr 11 18:27:25 2019 +0700

JAMES-2713 Add integration test for Purge API
---
 .../CassandraDeletedMessageVaultTest.java  |   6 +-
 .../integration/DeletedMessagesVaultTest.java  | 110 -
 ...FileMailRepositoryDeletedMessagesVaultTest.java |   6 +-
 .../memory/MemoryDeletedMessagesVaultTest.java |   6 +-
 .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java |   6 +-
 5 files changed, 122 insertions(+), 12 deletions(-)

diff --git 
a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
 
b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
index 9cbc0ec..b3c0a99 100644
--- 
a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
+++ 
b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.jmap.cassandra;
 
 import java.io.IOException;
+import java.time.Clock;
 
 import org.apache.james.CassandraJmapTestRule;
 import org.apache.james.DockerCassandraRule;
@@ -43,7 +44,7 @@ public class CassandraDeletedMessageVaultTest extends 
DeletedMessagesVaultTest {
 public CassandraJmapTestRule rule = 
CassandraJmapTestRule.defaultTestRule();
 
 @Override
-protected GuiceJamesServer createJmapServer(FileSystem fileSystem) throws 
IOException {
+protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock 
clock) throws IOException {
 return rule.jmapServer(cassandra.getModule(),
 binder -> binder.bind(PreDeletionHooksConfiguration.class)
 .toInstance(PreDeletionHooksConfiguration.forHooks(
@@ -51,7 +52,8 @@ public class CassandraDeletedMessageVaultTest extends 
DeletedMessagesVaultTest {
 binder -> 
binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION),
 binder -> 
binder.bind(MailRepositoryDeletedMessageVault.Configuration.class)
 .toInstance(new 
MailRepositoryDeletedMessageVault.Configuration(MailRepositoryUrl.from("cassandra://var/deletedMessages/user"))),
-binder -> binder.bind(FileSystem.class).toInstance(fileSystem));
+binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
+binder -> binder.bind(Clock.class).toInstance(clock));
 }
 
 @Override
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
index 8ab9e11..7962379 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
@@ -40,6 +40,9 @@ import static org.hamcrest.Matchers.is;
 
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.time.Clock;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -59,6 +62,7 @@ import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
 import org.apache.james.utils.JmapGuiceProbe;
+import org.apache.james.utils.UpdatableTickingClock;
 import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.awaitility.Duration;
@@ -110,6 +114,8 @@ public abstract class DeletedMessagesVaultTest {
 }
 }
 
+private static final Instant NOW = Instant.now();
+private static final Instant ONE_DAY_AFTER_ONE_YEAR_EXPIRATION = 
NOW.plus(366, ChronoUnit.DAYS);
 private static final String FIRST_SUBJECT = "first subject";
 private static final String SECOND_SUBJECT = "second subject";
 private static final String HOMER = "homer@" + DOMAIN;
@@ -130,7 +136,7 @@ public abstract class DeletedMessagesVaultTest {
 
 private MailboxId otherMailboxId;
 
-protected abstract GuiceJamesServer createJmapServer(FileSystem 
fileSystem) throws IOException;
+protecte

[james-project] 05/11: JAMES-2710 Document Purge API

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c8f84a8a5b769eef9b0859fb22fa0f17238fc639
Author: datph 
AuthorDate: Fri Apr 5 16:43:19 2019 +0700

JAMES-2710 Document Purge API
---
 src/site/markdown/server/manage-webadmin.md | 24 
 1 file changed, 24 insertions(+)

diff --git a/src/site/markdown/server/manage-webadmin.md 
b/src/site/markdown/server/manage-webadmin.md
index da75144..98ef7fb 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -2643,6 +2643,7 @@ Here are the following actions available on the 'Deleted 
Messages Vault'
 
  - [Restore Deleted Messages](#Restore_deleted_messages)
  - [Export Deleted Messages](#Export_deleted_messages)
+ - [Purge Deleted Messages](#Purge_deleted_messages)
 
  Note that the 'Deleted Messages Vault' feature is only supported on top of 
Cassandra-Guice.
 
@@ -2816,6 +2817,29 @@ while:
  - userExportFrom: export deleted messages from this user
  - exportTo: content of deleted messages have been shared to this mail address
  - totalExportedMessages: number of deleted messages match with json query, 
then being shared to sharee
+ 
+### Purge Deleted Messages
+ 
+You can overwrite 'retentionPeriod' configuration in deletedMessageVault or 
use default value is 1 year.
+
+Delete all expired deleted messages with 'retentionPeriod' configured.
+
+```
+curl -XDEL http://ip:port/deletedMessages?scope=expired
+```
+
+Response code:
+
+ - 201: Task for purging has been created
+ - 400: Bad request: 
+   - action query param is not present
+   - action query param is not a valid action
+
+You may want to call this endpoint on a regular basis. Example:
+
+```
+0 0 * * * /usr/bin/curl --request POST 
http://ip:port/deletedMessages?action=purge >/dev/null 2>&1
+```
 
 ## Task management
 


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



[james-project] 08/11: JAMES-2713 Move UpdatableTickingClock to server-testing for using in other modules

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 0957eec827440f777fc99728b10cd08c646b2a75
Author: datph 
AuthorDate: Wed Apr 17 14:35:52 2019 +0700

JAMES-2713 Move UpdatableTickingClock to server-testing for using in other 
modules
---
 .../rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java |  1 +
 .../org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java |  1 +
 .../java/org/apache/james/utils}/UpdatableTickingClock.java| 10 +-
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
index 46dfdbe..c4fe56f 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
+++ 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
@@ -53,6 +53,7 @@ import 
org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewModu
 import 
org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewTestFactory;
 import 
org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfiguration;
 import org.apache.james.util.streams.Iterators;
+import org.apache.james.utils.UpdatableTickingClock;
 import org.apache.mailet.Mail;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index dd9b53d..c636b9d 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -54,6 +54,7 @@ import 
org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewModu
 import 
org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewTestFactory;
 import 
org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfiguration;
 import org.apache.james.util.streams.Iterators;
+import org.apache.james.utils.UpdatableTickingClock;
 import org.apache.mailet.Mail;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/UpdatableTickingClock.java
 
b/server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java
similarity index 89%
rename from 
server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/UpdatableTickingClock.java
rename to 
server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java
index fca8022..2db26c7 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/UpdatableTickingClock.java
+++ 
b/server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java
@@ -17,7 +17,7 @@
  * under the License.   *
  /
 
-package org.apache.james.queue.rabbitmq;
+package org.apache.james.utils;
 
 import java.time.Clock;
 import java.time.Instant;
@@ -25,14 +25,14 @@ import java.time.ZoneId;
 
 import org.apache.commons.lang3.NotImplementedException;
 
-class UpdatableTickingClock extends Clock {
+public class UpdatableTickingClock extends Clock {
 private Instant currentInstant;
 
-UpdatableTickingClock(Instant currentInstant) {
+public UpdatableTickingClock(Instant currentInstant) {
 this.currentInstant = currentInstant;
 }
 
-void setInstant(Instant instant) {
+public void setInstant(Instant instant) {
 currentInstant = instant;
 }
 
@@ -51,7 +51,7 @@ class UpdatableTickingClock extends Clock {
 return currentInstant;
 }
 
-synchronized void tick() {
+public synchronized void tick() {
 currentInstant = currentInstant.plusMillis(1);
 }
 


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



[james-project] 01/11: JAMES-2710 Rename VaultAction to support purge action

2019-04-18 Thread aduprat
This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6189ecd1d3f3738d0cad775355a6405afbf24ab9
Author: datph 
AuthorDate: Thu Apr 4 11:07:22 2019 +0700

JAMES-2710 Rename VaultAction to support purge action
---
 .../vault/routes/DeletedMessagesVaultRoutes.java   | 22 +++---
 .../routes/DeletedMessagesVaultRoutesTest.java |  2 +-
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
index 7c1fa72..c38bcda 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
@@ -72,11 +72,11 @@ import spark.Service;
 @Produces(Constants.JSON_CONTENT_TYPE)
 public class DeletedMessagesVaultRoutes implements Routes {
 
-enum UserVaultAction {
+enum VaultAction {
 RESTORE("restore"),
 EXPORT("export");
 
-static Optional getAction(String value) {
+static Optional getAction(String value) {
 Preconditions.checkNotNull(value, "action cannot be null");
 Preconditions.checkArgument(StringUtils.isNotBlank(value), "action 
cannot be empty or blank");
 
@@ -87,13 +87,13 @@ public class DeletedMessagesVaultRoutes implements Routes {
 
 private static List plainValues() {
 return Stream.of(values())
-.map(UserVaultAction::getValue)
+.map(VaultAction::getValue)
 .collect(Guavate.toImmutableList());
 }
 
 private final String value;
 
-UserVaultAction(String value) {
+VaultAction(String value) {
 this.value = value;
 }
 
@@ -173,14 +173,14 @@ public class DeletedMessagesVaultRoutes implements Routes 
{
 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = 
"Internal server error - Something went bad on the server side.")
 })
 private TaskIdDto userActions(Request request, Response response) throws 
JsonExtractException {
-UserVaultAction requestedAction = extractUserVaultAction(request);
+VaultAction requestedAction = extractVaultAction(request);
 
 Task requestedTask = generateTask(requestedAction, request);
 TaskId taskId = taskManager.submit(requestedTask);
 return TaskIdDto.respond(response, taskId);
 }
 
-private Task generateTask(UserVaultAction requestedAction, Request 
request) throws JsonExtractException {
+private Task generateTask(VaultAction requestedAction, Request request) 
throws JsonExtractException {
 User user = extractUser(request);
 validateUserExist(user);
 Query query = translate(jsonExtractor.parse(request.body()));
@@ -264,17 +264,17 @@ public class DeletedMessagesVaultRoutes implements Routes 
{
 }
 }
 
-private UserVaultAction extractUserVaultAction(Request request) {
+private VaultAction extractVaultAction(Request request) {
 String actionParam = request.queryParams(ACTION_QUERY_PARAM);
 return Optional.ofNullable(actionParam)
-.map(this::getUserVaultAction)
+.map(this::getVaultAction)
 .orElseThrow(() -> new IllegalArgumentException("action parameter 
is missing"));
 }
 
-private UserVaultAction getUserVaultAction(String actionString) {
-return UserVaultAction.getAction(actionString)
+private VaultAction getVaultAction(String actionString) {
+return VaultAction.getAction(actionString)
 .orElseThrow(() -> new 
IllegalArgumentException(String.format("'%s' is not a valid action. Supported 
values are: (%s)",
 actionString,
-Joiner.on(",").join(UserVaultAction.plainValues();
+Joiner.on(",").join(VaultAction.plainValues();
 }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
index 7989b31..713ddc9 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james