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 2163393e87949c027b8e72855a0f752c74b3f773
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Fri Jul 19 15:08:48 2019 +0200

    JAMES-2813 serialization of DeletedMessageVaultExportTask
---
 .../routes/DeletedMessagesVaultExportTask.java     | 92 ++++++++++++++++++++-
 ...edMessagesVaultExportTaskSerializationTest.java | 93 ++++++++++++++++++++++
 2 files changed, 182 insertions(+), 3 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 ca551d4..26092eb 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
@@ -22,17 +22,104 @@ package org.apache.james.webadmin.vault.routes;
 import java.io.IOException;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Function;
+
+import javax.inject.Inject;
+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.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 DeletedMessagesVaultExportTask implements Task {
 
+    static final String TYPE = "deletedMessages/export";
+
+    public static final Function<DeletedMessagesVaultExportTask.Factory, 
TaskDTOModule> MODULE = (factory) ->
+        DTOModule
+            .forDomainObject(DeletedMessagesVaultExportTask.class)
+            
.convertToDTO(DeletedMessagesVaultExportTask.DeletedMessagesVaultExportTaskDTO.class)
+            .toDomainObjectConverter(dto -> {
+                try {
+                    return factory.create(dto);
+                } catch (AddressException e) {
+                    throw new RuntimeException(e);
+                }
+            })
+            .toDTOConverter(factory::createDTO)
+            .typeName(TYPE)
+            .withFactory(TaskDTOModule::new);
+
+    public static class DeletedMessagesVaultExportTaskDTO implements TaskDTO {
+
+        private final String type;
+        private final String userExportFrom;
+        private final QueryDTO exportQuery;
+        private final String exportTo;
+
+        public DeletedMessagesVaultExportTaskDTO(@JsonProperty("type") String 
type,
+                                                 
@JsonProperty("userExportFrom") String userExportFrom,
+                                                 @JsonProperty("exportQuery") 
QueryDTO exportQuery,
+                                                 @JsonProperty("exportTo") 
String exportTo) {
+            this.type = type;
+            this.userExportFrom = userExportFrom;
+            this.exportQuery = exportQuery;
+            this.exportTo = exportTo;
+        }
+
+        public String getUserExportFrom() {
+            return userExportFrom;
+        }
+
+        public QueryDTO getExportQuery() {
+            return exportQuery;
+        }
+
+        public String getExportTo() {
+            return exportTo;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+    }
+
+    public static class Factory {
+
+        private final ExportService exportService;
+        private final QueryTranslator queryTranslator;
+
+        @Inject
+        public Factory(ExportService exportService, QueryTranslator 
queryTranslator) {
+            this.exportService = exportService;
+            this.queryTranslator = queryTranslator;
+        }
+
+        public DeletedMessagesVaultExportTask 
create(DeletedMessagesVaultExportTask.DeletedMessagesVaultExportTaskDTO dto) 
throws AddressException {
+            User userExportFrom = User.fromUsername(dto.userExportFrom);
+            Query exportQuery = queryTranslator.translate(dto.exportQuery);
+            MailAddress exportTo = new MailAddress(dto.exportTo);
+            return new DeletedMessagesVaultExportTask(exportService, 
userExportFrom, exportQuery, exportTo);
+        }
+
+        public 
DeletedMessagesVaultExportTask.DeletedMessagesVaultExportTaskDTO 
createDTO(DeletedMessagesVaultExportTask task, String type) {
+            return new 
DeletedMessagesVaultExportTask.DeletedMessagesVaultExportTaskDTO(type, 
task.userExportFrom.asString(), queryTranslator.toDTO(task.exportQuery), 
task.exportTo.asString());
+        }
+    }
+
     public class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
 
         private final User userExportFrom;
@@ -60,11 +147,10 @@ class DeletedMessagesVaultExportTask implements Task {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DeletedMessagesVaultExportTask.class);
 
-    static final String TYPE = "deletedMessages/export";
-
     private final ExportService exportService;
     private final User userExportFrom;
-    private final Query exportQuery;
+    @VisibleForTesting
+    public final Query exportQuery;
     private final MailAddress exportTo;
     private final AtomicLong totalExportedMessages;
 
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
new file mode 100644
index 0000000..86f60c4
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
@@ -0,0 +1,93 @@
+/****************************************************************
+ * 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 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.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.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+class DeletedMessagesVaultExportTaskSerializationTest {
+
+    private ExportService 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 userExportFrom = User.fromUsername(username);
+    private static final Query query = 
Query.of(CriterionFactory.hasAttachment(true));
+    private static MailAddress exportTo;
+
+    private static final String serializedDeleteMessagesVaultExportTask = 
"{\"type\":\"deletedMessages/export\"," +
+        "\"userExportFrom\":\"james\"," +
+        
"\"exportQuery\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]},"
 +
+        "\"exportTo\":\"[email protected]\"}\n";
+
+    @BeforeAll
+    static void init() throws AddressException {
+        exportTo = new MailAddress("[email protected]");
+    }
+
+    @BeforeEach
+    void setUp() {
+        exportService = mock(ExportService.class);
+        DeletedMessagesVaultExportTask.Factory factory = new 
DeletedMessagesVaultExportTask.Factory(exportService, queryTranslator);
+        taskSerializer = new 
JsonTaskSerializer(DeletedMessagesVaultExportTask.MODULE.apply(factory));
+    }
+
+    @Test
+    void deleteMessagesVaultExportTaskShouldBeSerializable() throws 
JsonProcessingException {
+        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, userExportFrom, query, exportTo);
+
+        assertThatJson(taskSerializer.serialize(task))
+            .isEqualTo(serializedDeleteMessagesVaultExportTask);
+    }
+
+    @Test
+    void deleteMessagesVaultExportTaskShouldBeDeserializable() throws 
IOException {
+        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, userExportFrom, 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));
+    }
+
+}
\ No newline at end of file


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

Reply via email to