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