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 8a3dbe106651fd5142b3771a9eba464d48b89a86
Author: Rémi Kowalski <rkowal...@linagora.com>
AuthorDate: Fri Jul 19 11:44:16 2019 +0200

    JAMES-2813 serialization of DeletedMessageVaultDeleteTask
---
 .../routes/DeletedMessagesVaultDeleteTask.java     | 67 +++++++++++++++++++-
 ...edMessagesVaultDeleteTaskSerializationTest.java | 72 ++++++++++++++++++++++
 2 files changed, 137 insertions(+), 2 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
index 9c886c5..9672878 100644
--- 
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
@@ -20,17 +20,82 @@
 package org.apache.james.webadmin.vault.routes;
 
 import java.util.Optional;
+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.model.MessageId;
+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.DeletedMessageVault;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import reactor.core.publisher.Mono;
 
 public class DeletedMessagesVaultDeleteTask implements Task {
 
+    static final String TYPE = "deletedMessages/delete";
+
+    public static final Function<DeletedMessagesVaultDeleteTask.Factory, 
TaskDTOModule> MODULE = (factory) ->
+        DTOModule
+            .forDomainObject(DeletedMessagesVaultDeleteTask.class)
+            
.convertToDTO(DeletedMessagesVaultDeleteTask.DeletedMessagesVaultDeleteTaskDTO.class)
+            .toDomainObjectConverter(factory::create)
+            
.toDTOConverter(DeletedMessagesVaultDeleteTask.DeletedMessagesVaultDeleteTaskDTO::of)
+            .typeName(TYPE)
+            .withFactory(TaskDTOModule::new);
+
+    public static class DeletedMessagesVaultDeleteTaskDTO implements TaskDTO {
+
+        private final String type;
+        private final String userName;
+        private final String messageId;
+
+        public DeletedMessagesVaultDeleteTaskDTO(@JsonProperty("type") String 
type, @JsonProperty("userName") String userName, @JsonProperty("messageId") 
String messageId) {
+            this.type = type;
+            this.userName = userName;
+            this.messageId = messageId;
+        }
+
+        public String getUserName() {
+            return userName;
+        }
+
+        public String getMessageId() {
+            return messageId;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public static DeletedMessagesVaultDeleteTaskDTO 
of(DeletedMessagesVaultDeleteTask task, String type) {
+            return new DeletedMessagesVaultDeleteTaskDTO(type, 
task.user.asString(), task.messageId.serialize());
+        }
+    }
+
+    public static class Factory {
+
+        private final DeletedMessageVault deletedMessageVault;
+        private final MessageId.Factory messageIdFactory;
+
+        @Inject
+        public Factory(DeletedMessageVault deletedMessageVault, 
MessageId.Factory messageIdFactory) {
+            this.deletedMessageVault = deletedMessageVault;
+            this.messageIdFactory = messageIdFactory;
+        }
+
+        public DeletedMessagesVaultDeleteTask 
create(DeletedMessagesVaultDeleteTaskDTO dto) {
+            MessageId messageId = 
messageIdFactory.fromString(dto.getMessageId());
+            User user = User.fromUsername(dto.getUserName());
+            return new DeletedMessagesVaultDeleteTask(deletedMessageVault, 
user, messageId);
+        }
+    }
+
     public class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
 
         private final User user;
@@ -50,8 +115,6 @@ public class DeletedMessagesVaultDeleteTask implements Task {
         }
     }
 
-    static final String TYPE = "deletedMessages/delete";
-
     private final DeletedMessageVault vault;
     private final User user;
     private final MessageId messageId;
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskSerializationTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskSerializationTest.java
new file mode 100644
index 0000000..236adc2
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskSerializationTest.java
@@ -0,0 +1,72 @@
+/****************************************************************
+ * 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.MessageId;
+import org.apache.james.mailbox.model.TestMessageId;
+import org.apache.james.server.task.json.JsonTaskSerializer;
+import org.apache.james.vault.DeletedMessageVault;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+class DeletedMessagesVaultDeleteTaskSerializationTest {
+
+    private DeletedMessageVault deletedMessageVault;
+    private JsonTaskSerializer taskSerializer;
+    private final String username = "james";
+    private final User user = User.fromUsername(username);
+
+    private final TestMessageId.Factory messageIdFactory = new 
TestMessageId.Factory();
+    private final MessageId messageId = messageIdFactory.generate();
+
+    private final String serializedDeleteMessagesVaultDeleteTask = "{\"type\": 
\"deletedMessages/delete\", \"userName\":\"james\", \"messageId\": \"" + 
messageId.serialize() + "\"}";
+
+    @BeforeEach
+    void setUp() {
+        deletedMessageVault = mock(DeletedMessageVault.class);
+        DeletedMessagesVaultDeleteTask.Factory factory = new 
DeletedMessagesVaultDeleteTask.Factory(deletedMessageVault, messageIdFactory);
+        taskSerializer = new 
JsonTaskSerializer(DeletedMessagesVaultDeleteTask.MODULE.apply(factory));
+    }
+
+    @Test
+    void deleteMessagesVaultDeleteTaskShouldBeSerializable() throws 
JsonProcessingException {
+        DeletedMessagesVaultDeleteTask task = new 
DeletedMessagesVaultDeleteTask(deletedMessageVault, user, messageId);
+
+        assertThatJson(taskSerializer.serialize(task))
+            .isEqualTo(serializedDeleteMessagesVaultDeleteTask);
+    }
+
+    @Test
+    void deleteMessagesVaultDeleteTaskShouldBeDeserializable() throws 
IOException {
+        DeletedMessagesVaultDeleteTask task = new 
DeletedMessagesVaultDeleteTask(deletedMessageVault, user, messageId);
+
+        
assertThat(taskSerializer.deserialize(serializedDeleteMessagesVaultDeleteTask))
+            .isEqualToComparingOnlyGivenFields(task, "user", "messageId");
+    }
+
+}
\ No newline at end of file


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

Reply via email to