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 eb19b1a0b4c81e23407ec6d7ef1d23fe0a0a0bd7
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Fri Jul 19 15:53:20 2019 +0200

    JAMES-2813 serialization of DeletedMessageVaultRestoreTask
---
 .../routes/DeletedMessagesVaultRestoreTask.java    | 77 +++++++++++++++++++-
 ...dMessagesVaultRestoreTaskSerializationTest.java | 83 ++++++++++++++++++++++
 2 files changed, 157 insertions(+), 3 deletions(-)

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 9d855b8..0bae69e 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
@@ -23,17 +23,89 @@ import static 
org.apache.james.webadmin.vault.routes.RestoreService.RestoreResul
 
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Function;
+
+import javax.inject.Inject;
 
 import org.apache.james.core.User;
+import org.apache.james.json.DTOModule;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.server.task.json.dto.TaskDTO;
+import org.apache.james.server.task.json.dto.TaskDTOModule;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
+import org.apache.james.vault.dto.query.QueryDTO;
+import org.apache.james.vault.dto.query.QueryTranslator;
 import org.apache.james.vault.search.Query;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.annotations.VisibleForTesting;
+
 class DeletedMessagesVaultRestoreTask implements Task {
 
+    static final String TYPE = "deletedMessages/restore";
+
+    public static final Function<DeletedMessagesVaultRestoreTask.Factory, 
TaskDTOModule> MODULE = (factory) ->
+        DTOModule
+            .forDomainObject(DeletedMessagesVaultRestoreTask.class)
+            
.convertToDTO(DeletedMessagesVaultRestoreTask.DeletedMessagesVaultRestoreTaskDTO.class)
+            .toDomainObjectConverter(factory::create)
+            .toDTOConverter(factory::createDTO)
+            .typeName(TYPE)
+            .withFactory(TaskDTOModule::new);
+
+    public static class DeletedMessagesVaultRestoreTaskDTO implements TaskDTO {
+
+        private final String type;
+        private final String userToRestore;
+        private final QueryDTO query;
+
+        public DeletedMessagesVaultRestoreTaskDTO(@JsonProperty("type") String 
type,
+                                                  
@JsonProperty("userToRestore") String userToRestore,
+                                                  @JsonProperty("query") 
QueryDTO query) {
+            this.type = type;
+            this.userToRestore = userToRestore;
+            this.query = query;
+        }
+
+        public String getUserToRestore() {
+            return userToRestore;
+        }
+
+        public QueryDTO getQuery() {
+            return query;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+    }
+
+    public static class Factory {
+
+        private final RestoreService restoreService;
+        private final QueryTranslator queryTranslator;
+
+        @Inject
+        public Factory(RestoreService restoreService, QueryTranslator 
queryTranslator) {
+            this.restoreService = restoreService;
+            this.queryTranslator = queryTranslator;
+        }
+
+        public DeletedMessagesVaultRestoreTask 
create(DeletedMessagesVaultRestoreTask.DeletedMessagesVaultRestoreTaskDTO dto) {
+            User userToRestore = User.fromUsername(dto.userToRestore);
+            Query query = queryTranslator.translate(dto.query);
+            return new DeletedMessagesVaultRestoreTask(restoreService, 
userToRestore, query);
+        }
+
+        public 
DeletedMessagesVaultRestoreTask.DeletedMessagesVaultRestoreTaskDTO 
createDTO(DeletedMessagesVaultRestoreTask task, String type) {
+            return new 
DeletedMessagesVaultRestoreTask.DeletedMessagesVaultRestoreTaskDTO(type, 
task.userToRestore.asString(), queryTranslator.toDTO(task.query));
+        }
+    }
+
     public static class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
         private final User user;
         private final AtomicLong successfulRestoreCount;
@@ -68,12 +140,11 @@ class DeletedMessagesVaultRestoreTask implements Task {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DeletedMessagesVaultRestoreTask.class);
 
-    static final String TYPE = "deletedMessages/restore";
-
     private final User userToRestore;
     private final RestoreService vaultRestore;
     private final AdditionalInformation additionalInformation;
-    private final Query query;
+    @VisibleForTesting
+    final Query query;
 
     DeletedMessagesVaultRestoreTask(RestoreService vaultRestore, User 
userToRestore, Query query) {
         this.query = query;
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
new file mode 100644
index 0000000..48a82ec
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
@@ -0,0 +1,83 @@
+/****************************************************************
+ * 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 static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+import java.io.IOException;
+
+import org.apache.james.core.User;
+import org.apache.james.mailbox.model.TestId;
+import org.apache.james.server.task.json.JsonTaskSerializer;
+import org.apache.james.task.Task;
+import org.apache.james.vault.dto.query.QueryTranslator;
+import org.apache.james.vault.search.CriterionFactory;
+import org.apache.james.vault.search.Query;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+class DeletedMessagesVaultRestoreTaskSerializationTest {
+
+    private RestoreService exportService;
+    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
+    private final QueryTranslator queryTranslator = new 
QueryTranslator(mailboxIdFactory);
+
+    private JsonTaskSerializer taskSerializer;
+
+    private static final String username = "james";
+    private static final User userToRestore = User.fromUsername(username);
+    private static final Query query = 
Query.of(CriterionFactory.hasAttachment(true));
+
+    private static final String serializedDeleteMessagesVaultRestoreTask = 
"{\"type\":\"deletedMessages/restore\"," +
+        "\"userToRestore\":\"james\"," +
+        
"\"query\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]}"
 +
+        "}";
+
+    @BeforeEach
+    void setUp() {
+        exportService = mock(RestoreService.class);
+        DeletedMessagesVaultRestoreTask.Factory factory = new 
DeletedMessagesVaultRestoreTask.Factory(exportService, queryTranslator);
+        taskSerializer = new 
JsonTaskSerializer(DeletedMessagesVaultRestoreTask.MODULE.apply(factory));
+    }
+
+    @Test
+    void deleteMessagesVaultRestoreTaskShouldBeSerializable() throws 
JsonProcessingException {
+        DeletedMessagesVaultRestoreTask task = new 
DeletedMessagesVaultRestoreTask(exportService, userToRestore, query);
+
+        assertThatJson(taskSerializer.serialize(task))
+            .isEqualTo(serializedDeleteMessagesVaultRestoreTask);
+    }
+
+    @Test
+    void deleteMessagesVaultRestoreTaskShouldBeDeserializable() throws 
IOException {
+        DeletedMessagesVaultRestoreTask task = new 
DeletedMessagesVaultRestoreTask(exportService, userToRestore, query);
+
+        Task deserializedTask = 
taskSerializer.deserialize(serializedDeleteMessagesVaultRestoreTask);
+        assertThat(deserializedTask)
+            .isEqualToComparingOnlyGivenFields(task, "userToRestore");
+
+        DeletedMessagesVaultRestoreTask deserializedRestoreTask = 
(DeletedMessagesVaultRestoreTask) deserializedTask;
+        
assertThat(queryTranslator.toDTO(deserializedRestoreTask.query)).isEqualTo(queryTranslator.toDTO(query));
+    }
+
+}
\ No newline at end of file


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

Reply via email to