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]
