This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 5eb43b49f1a2b2bc20082515f776794ef469802f Author: RĂ©mi Kowalski <rkowal...@linagora.com> AuthorDate: Fri Aug 30 17:04:04 2019 +0200 JAMES-2813 serialize MigrationTaskAdditionalInformationDTO --- .../cassandra/migration/MigrationTask.java | 7 ++-- .../MigrationTaskAdditionalInformationsDTO.java | 47 ++++++++++++++++++++++ .../migration/MigrationTaskSerializationTest.java | 15 +++++++ 3 files changed, 66 insertions(+), 3 deletions(-) diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java index dabc884..fafb144 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java @@ -65,10 +65,11 @@ public class MigrationTask implements Task { public static final TaskType CASSANDRA_MIGRATION = TaskType.of("CassandraMigration"); - public static class Details implements TaskExecutionDetails.AdditionalInformation { + public static class AdditionalInformations implements TaskExecutionDetails.AdditionalInformation { + private final SchemaVersion toVersion; - public Details(SchemaVersion toVersion) { + public AdditionalInformations(SchemaVersion toVersion) { this.toVersion = toVersion; } @@ -147,7 +148,7 @@ public class MigrationTask implements Task { @Override public Optional<TaskExecutionDetails.AdditionalInformation> details() { - return Optional.of(new Details(target)); + return Optional.of(new AdditionalInformations(target)); } } diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskAdditionalInformationsDTO.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskAdditionalInformationsDTO.java new file mode 100644 index 0000000..b8e8400 --- /dev/null +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskAdditionalInformationsDTO.java @@ -0,0 +1,47 @@ +/**************************************************************** + * 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.backends.cassandra.migration; + +import org.apache.james.backends.cassandra.versions.SchemaVersion; +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 MigrationTaskAdditionalInformationsDTO implements AdditionalInformationDTO { + + static final AdditionalInformationDTOModule<MigrationTask.AdditionalInformations, MigrationTaskAdditionalInformationsDTO> SERIALIZATION_MODULE = + DTOModule.forDomainObject(MigrationTask.AdditionalInformations.class) + .convertToDTO(MigrationTaskAdditionalInformationsDTO.class) + .toDomainObjectConverter(dto -> new MigrationTask.AdditionalInformations(new SchemaVersion(dto.getTargetVersion()))) + .toDTOConverter((details, type) -> new MigrationTaskAdditionalInformationsDTO(details.getToVersion())) + .typeName(MigrationTask.CASSANDRA_MIGRATION.asString()) + .withFactory(AdditionalInformationDTOModule::new); + + private final int targetVersion; + + public MigrationTaskAdditionalInformationsDTO(@JsonProperty("targetVersion") int targetVersion) { + this.targetVersion = targetVersion; + } + + public int getTargetVersion() { + return targetVersion; + } +} diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/MigrationTaskSerializationTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/MigrationTaskSerializationTest.java index ecf395d..6f2fdc6 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/MigrationTaskSerializationTest.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/MigrationTaskSerializationTest.java @@ -26,6 +26,7 @@ import java.io.IOException; import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO; import org.apache.james.backends.cassandra.versions.SchemaVersion; +import org.apache.james.server.task.json.JsonTaskAdditionalInformationsSerializer; import org.apache.james.server.task.json.JsonTaskSerializer; import org.junit.jupiter.api.Test; @@ -35,11 +36,13 @@ class MigrationTaskSerializationTest { private static final int SCHEMA_VERSION = 12; private static final String SERIALIZED_TASK = "{\"type\": \"CassandraMigration\", \"targetVersion\": 12}"; + private static final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"targetVersion\": 12}"; private final CassandraSchemaVersionDAO cassandraSchemaVersionDAO = mock(CassandraSchemaVersionDAO.class); private final CassandraSchemaTransitions transitions = mock(CassandraSchemaTransitions.class); private final MigrationTask.Factory factory = target -> new MigrationTask(cassandraSchemaVersionDAO, transitions, target); private final JsonTaskSerializer taskSerializer = new JsonTaskSerializer(MigrationTaskDTO.SERIALIZATION_MODULE.apply(factory)); + private JsonTaskAdditionalInformationsSerializer jsonAdditionalInformationSerializer = new JsonTaskAdditionalInformationsSerializer(MigrationTaskAdditionalInformationsDTO.SERIALIZATION_MODULE); @Test void taskShouldBeSerializable() throws JsonProcessingException { @@ -54,4 +57,16 @@ class MigrationTaskSerializationTest { .isEqualToComparingFieldByField(task); } + @Test + void additionalInformationShouldBeSerializable() throws JsonProcessingException { + MigrationTask.AdditionalInformations details = new MigrationTask.AdditionalInformations(new SchemaVersion(SCHEMA_VERSION)); + assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION); + } + + @Test + void additonalInformationShouldBeDeserializable() throws IOException { + MigrationTask.AdditionalInformations details = new MigrationTask.AdditionalInformations(new SchemaVersion(SCHEMA_VERSION)); + assertThat(jsonAdditionalInformationSerializer.deserialize("CassandraMigration", SERIALIZED_ADDITIONAL_INFORMATION)) + .isEqualToComparingFieldByField(details); + } } \ 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