This is an automated email from the ASF dual-hosted git repository.

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

commit 07aac2bbdd9858db28af9594f2b8cc32d9c664f1
Author: Gautier DI FOLCO <[email protected]>
AuthorDate: Tue Sep 3 19:10:16 2019 +0200

    JAMES-2813 Add DeletedMessagesVaultExportTask.AdditionalInformation 
serialization
---
 .../routes/DeletedMessagesVaultExportTask.java     |  2 +-
 ...gesVaultExportTaskAdditionalInformationDTO.java | 87 ++++++++++++++++++++++
 .../routes/DeletedMessagesVaultRestoreTask.java    | 44 +++++------
 ...esVaultRestoreTaskAdditionalInformationDTO.java |  6 +-
 ...edMessagesVaultExportTaskSerializationTest.java | 34 +++++++--
 ...dMessagesVaultRestoreTaskSerializationTest.java |  3 +-
 6 files changed, 140 insertions(+), 36 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTask.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTask.java
index 59bbff1..d90daee 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTask.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTask.java
@@ -39,7 +39,7 @@ class DeletedMessagesVaultExportTask implements Task {
 
     static final TaskType TYPE = TaskType.of("deletedMessages/export");
 
-    public class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
+    public static class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
 
         private final User userExportFrom;
         private final MailAddress exportTo;
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskAdditionalInformationDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskAdditionalInformationDTO.java
new file mode 100644
index 0000000..27897ca
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskAdditionalInformationDTO.java
@@ -0,0 +1,87 @@
+/**
+ * *************************************************************
+ * 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 javax.mail.internet.AddressException;
+
+import org.apache.james.core.MailAddress;
+import org.apache.james.core.User;
+import org.apache.james.json.DTOModule;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class DeletedMessagesVaultExportTaskAdditionalInformationDTO implements 
AdditionalInformationDTO {
+
+    private static DeletedMessagesVaultExportTaskAdditionalInformationDTO 
fromDomainObject(DeletedMessagesVaultExportTask.AdditionalInformation 
additionalInformation, String type) {
+        return new DeletedMessagesVaultExportTaskAdditionalInformationDTO(
+            additionalInformation.getUserExportFrom(),
+            additionalInformation.getExportTo(),
+            additionalInformation.getTotalExportedMessages()
+        );
+    }
+
+    public static final 
AdditionalInformationDTOModule<DeletedMessagesVaultExportTask.AdditionalInformation,
 DeletedMessagesVaultExportTaskAdditionalInformationDTO> MODULE =
+        DTOModule
+            
.forDomainObject(DeletedMessagesVaultExportTask.AdditionalInformation.class)
+            
.convertToDTO(DeletedMessagesVaultExportTaskAdditionalInformationDTO.class)
+            
.toDomainObjectConverter(DeletedMessagesVaultExportTaskAdditionalInformationDTO::toDomainObject)
+            
.toDTOConverter(DeletedMessagesVaultExportTaskAdditionalInformationDTO::fromDomainObject)
+            .typeName(DeletedMessagesVaultExportTask.TYPE.asString())
+            .withFactory(AdditionalInformationDTOModule::new);
+
+    private final String userExportFrom;
+    private final String exportTo;
+    private final Long totalExportedMessages;
+
+    public 
DeletedMessagesVaultExportTaskAdditionalInformationDTO(@JsonProperty("user") 
String userExportFrom,
+                                                                  
@JsonProperty("exportTo") String exportTo,
+                                                                  
@JsonProperty("errorRestoreCount") Long totalExportedMessages) {
+        this.userExportFrom = userExportFrom;
+        this.exportTo = exportTo;
+        this.totalExportedMessages = totalExportedMessages;
+    }
+
+    public String getUserExportFrom() {
+        return userExportFrom;
+    }
+
+    public String getExportTo() {
+        return exportTo;
+    }
+
+    public Long getTotalExportedMessages() {
+        return totalExportedMessages;
+    }
+
+    DeletedMessagesVaultExportTask.AdditionalInformation toDomainObject() {
+        try {
+            return new DeletedMessagesVaultExportTask.AdditionalInformation(
+                User.fromUsername(userExportFrom),
+                new MailAddress(exportTo),
+                totalExportedMessages
+            );
+        } catch (AddressException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTask.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTask.java
index 8803c67..6ea283d 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTask.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTask.java
@@ -41,47 +41,34 @@ class DeletedMessagesVaultRestoreTask implements Task {
 
     public static class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
         private final User user;
-        private final AtomicLong successfulRestoreCount;
-        private final AtomicLong errorRestoreCount;
+        private final long successfulRestoreCount;
+        private final long errorRestoreCount;
 
-        AdditionalInformation(User user) {
-            this.user = user;
-            this.successfulRestoreCount = new AtomicLong();
-            this.errorRestoreCount = new AtomicLong();
-        }
-
-        AdditionalInformation(User user, AtomicLong successfulRestoreCount, 
AtomicLong errorRestoreCount) {
+        AdditionalInformation(User user, long successfulRestoreCount, long 
errorRestoreCount) {
             this.user = user;
             this.successfulRestoreCount = successfulRestoreCount;
             this.errorRestoreCount = errorRestoreCount;
         }
 
         public long getSuccessfulRestoreCount() {
-            return successfulRestoreCount.get();
+            return successfulRestoreCount;
         }
 
         public long getErrorRestoreCount() {
-            return errorRestoreCount.get();
+            return errorRestoreCount;
         }
 
         public String getUser() {
             return user.asString();
         }
-
-        void incrementSuccessfulRestoreCount() {
-            successfulRestoreCount.incrementAndGet();
-        }
-
-        void incrementErrorRestoreCount() {
-            errorRestoreCount.incrementAndGet();
-        }
     }
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DeletedMessagesVaultRestoreTask.class);
 
     private final User userToRestore;
     private final RestoreService vaultRestore;
-    private final AdditionalInformation additionalInformation;
+    private final AtomicLong successfulRestoreCount;
+    private final AtomicLong errorRestoreCount;
     @VisibleForTesting
     final Query query;
 
@@ -89,7 +76,8 @@ class DeletedMessagesVaultRestoreTask implements Task {
         this.query = query;
         this.userToRestore = userToRestore;
         this.vaultRestore = vaultRestore;
-        this.additionalInformation = new AdditionalInformation(userToRestore);
+        this.successfulRestoreCount = new AtomicLong();
+        this.errorRestoreCount = new AtomicLong();
     }
 
     @Override
@@ -116,14 +104,22 @@ class DeletedMessagesVaultRestoreTask implements Task {
     private void updateInformation(RestoreService.RestoreResult restoreResult) 
{
         switch (restoreResult) {
             case RESTORE_FAILED:
-                additionalInformation.incrementErrorRestoreCount();
+                incrementErrorRestoreCount();
                 break;
             case RESTORE_SUCCEED:
-                additionalInformation.incrementSuccessfulRestoreCount();
+                incrementSuccessfulRestoreCount();
                 break;
         }
     }
 
+    private void incrementSuccessfulRestoreCount() {
+        successfulRestoreCount.incrementAndGet();
+    }
+
+    private void incrementErrorRestoreCount() {
+        errorRestoreCount.incrementAndGet();
+    }
+
     @Override
     public TaskType type() {
         return TYPE;
@@ -131,7 +127,7 @@ class DeletedMessagesVaultRestoreTask implements Task {
 
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(additionalInformation);
+        return Optional.of(new AdditionalInformation(userToRestore, 
successfulRestoreCount.get(), errorRestoreCount.get()));
     }
 
     User getUserToRestore() {
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
index d7a7c41..1d58b2d 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
@@ -20,8 +20,6 @@
 
 package org.apache.james.webadmin.vault.routes;
 
-import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.james.core.User;
 import org.apache.james.json.DTOModule;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
@@ -75,8 +73,8 @@ public class 
DeletedMessagesVaultRestoreTaskAdditionalInformationDTO implements
     DeletedMessagesVaultRestoreTask.AdditionalInformation toDomainObject() {
         return new DeletedMessagesVaultRestoreTask.AdditionalInformation(
             User.fromUsername(user),
-            new AtomicLong(successfulRestoreCount),
-            new AtomicLong(errorRestoreCount)
+            successfulRestoreCount,
+            errorRestoreCount
         );
     }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
index 5bd8648..57ccf5e 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
@@ -20,6 +20,7 @@ package org.apache.james.webadmin.vault.routes;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
@@ -29,6 +30,7 @@ import javax.mail.internet.AddressException;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.User;
 import org.apache.james.mailbox.model.TestId;
+import 
org.apache.james.server.task.json.JsonTaskAdditionalInformationsSerializer;
 import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.apache.james.task.Task;
 import org.apache.james.vault.dto.query.QueryTranslator;
@@ -49,18 +51,23 @@ class DeletedMessagesVaultExportTaskSerializationTest {
     private JsonTaskSerializer taskSerializer;
 
     private static final String username = "james";
-    private static final User userExportFrom = User.fromUsername(username);
-    private static final Query query = 
Query.of(CriterionFactory.hasAttachment(true));
+    private static final User USER_EXPORT_FROM = User.fromUsername(username);
+    private static final Query QUERY = 
Query.of(CriterionFactory.hasAttachment(true));
     private static MailAddress exportTo;
+    private static DeletedMessagesVaultExportTask.AdditionalInformation 
details;
 
     private static final String serializedDeleteMessagesVaultExportTask = 
"{\"type\":\"deletedMessages/export\"," +
         "\"userExportFrom\":\"james\"," +
         
"\"exportQuery\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]},"
 +
         "\"exportTo\":\"[email protected]\"}\n";
+    private static final String SERIALIZED_ADDITIONAL_INFORMATION_TASK = 
"{\"exportTo\":\"[email protected]\",\"userExportFrom\":\"james\",\"totalExportedMessages\":42}";
+
+    private static final JsonTaskAdditionalInformationsSerializer 
JSON_TASK_ADDITIONAL_INFORMATIONS_SERIALIZER = new 
JsonTaskAdditionalInformationsSerializer(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE);
 
     @BeforeAll
     static void init() throws AddressException {
         exportTo = new MailAddress("[email protected]");
+        details = new 
DeletedMessagesVaultExportTask.AdditionalInformation(USER_EXPORT_FROM, 
exportTo, 42);
     }
 
     @BeforeEach
@@ -72,7 +79,7 @@ class DeletedMessagesVaultExportTaskSerializationTest {
 
     @Test
     void deleteMessagesVaultExportTaskShouldBeSerializable() throws 
JsonProcessingException {
-        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, userExportFrom, query, exportTo);
+        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, USER_EXPORT_FROM, QUERY, 
exportTo);
 
         assertThatJson(taskSerializer.serialize(task))
             .isEqualTo(serializedDeleteMessagesVaultExportTask);
@@ -80,14 +87,31 @@ class DeletedMessagesVaultExportTaskSerializationTest {
 
     @Test
     void deleteMessagesVaultExportTaskShouldBeDeserializable() throws 
IOException {
-        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, userExportFrom, query, exportTo);
+        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, USER_EXPORT_FROM, QUERY, 
exportTo);
 
         Task deserializedTask = 
taskSerializer.deserialize(serializedDeleteMessagesVaultExportTask);
         assertThat(deserializedTask)
             .isEqualToComparingOnlyGivenFields(task, "userExportFrom", 
"exportTo");
 
         DeletedMessagesVaultExportTask deserializedExportTask = 
(DeletedMessagesVaultExportTask) deserializedTask;
-        
assertThat(queryTranslator.toDTO(deserializedExportTask.exportQuery)).isEqualTo(queryTranslator.toDTO(query));
+        
assertThat(queryTranslator.toDTO(deserializedExportTask.exportQuery)).isEqualTo(queryTranslator.toDTO(QUERY));
     }
 
+    @Test
+    void additionalInformationShouldBeSerializable() throws 
JsonProcessingException {
+        
assertThatJson(JSON_TASK_ADDITIONAL_INFORMATIONS_SERIALIZER.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION_TASK);
+    }
+
+    @Test
+    void additonalInformationShouldBeDeserializable() throws IOException {
+        
assertThat(JSON_TASK_ADDITIONAL_INFORMATIONS_SERIALIZER.deserialize("deletedMessages/export",
 SERIALIZED_ADDITIONAL_INFORMATION_TASK))
+            .isEqualToComparingFieldByField(details);
+    }
+
+    @Test
+    void additonalInformationWithInvalidMailAddressShouldThrow() throws 
IOException {
+        String invalidSerializedAdditionalInformationTask = 
"{\"exportTo\":\"invalid\",\"userExportFrom\":\"james\",\"totalExportedMessages\":42}";;
+        assertThatCode(() -> 
JSON_TASK_ADDITIONAL_INFORMATIONS_SERIALIZER.deserialize("deletedMessages/export",
 invalidSerializedAdditionalInformationTask))
+            .hasCauseInstanceOf(AddressException.class);
+    }
 }
\ No newline at end of file
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
index adfcd75..d6dba23 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
@@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
-import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.james.core.User;
 import org.apache.james.mailbox.model.TestId;
@@ -49,7 +48,7 @@ class DeletedMessagesVaultRestoreTaskSerializationTest {
     private static final String USERNAME = "james";
     private static final User USER_TO_RESTORE = User.fromUsername(USERNAME);
     private static final Query QUERY = 
Query.of(CriterionFactory.hasAttachment(true));
-    private static final DeletedMessagesVaultRestoreTask.AdditionalInformation 
DETAILS = new 
DeletedMessagesVaultRestoreTask.AdditionalInformation(USER_TO_RESTORE, new 
AtomicLong(42), new AtomicLong(10));
+    private static final DeletedMessagesVaultRestoreTask.AdditionalInformation 
DETAILS = new 
DeletedMessagesVaultRestoreTask.AdditionalInformation(USER_TO_RESTORE,42, 10);
 
     private static final String SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK 
= "{\"type\":\"deletedMessages/restore\"," +
         "\"userToRestore\":\"james\"," +


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to