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 179aa3e1006125aed86c5693c07e0dcd12a1f1de
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Tue Jul 16 16:23:48 2019 +0200

    JAMES-2813 Add DTOMdule.toDomainObjectConverter
---
 .../eventstore/cassandra/JsonEventSerializer.java  |  2 +-
 .../eventstore/cassandra/dto/EventDTO.java         |  8 +--
 .../eventstore/cassandra/dto/EventDTOModule.java   |  6 +-
 .../cassandra/dto/OtherTestEventDTO.java           |  3 +-
 .../eventstore/cassandra/dto/TestEventDTO.java     |  3 +-
 .../cassandra/dto/TestEventDTOModules.java         |  6 +-
 json/src/main/java/org/apache/james/json/DTO.java  |  3 +-
 .../main/java/org/apache/james/json/DTOModule.java | 68 ++++++++++++-------
 .../apache/james/json/JsonGenericSerializer.java   | 14 ++--
 .../java/org/apache/JsonGenericSerializerTest.java |  2 +-
 json/src/test/java/org/apache/dto/FirstDTO.java    |  3 +-
 json/src/test/java/org/apache/dto/SecondDTO.java   |  3 +-
 json/src/test/java/org/apache/dto/TestModule.java  |  6 +-
 json/src/test/java/org/apache/dto/TestModules.java | 36 +++++-----
 .../quota/cassandra/dto/QuotaEventDTOModules.java  |  3 +-
 .../dto/QuotaThresholdChangedEventDTO.java         |  3 +-
 mailbox/tools/indexer/pom.xml                      |  6 +-
 .../tools/indexer/SingleMailboxReindexingTask.java | 26 ++++----
 .../dto/SingleMailboxReindexingTaskDTO.java        | 29 +++------
 .../indexer/SingleMailboxReindexingTaskTest.java   | 21 ------
 .../tools/indexer/TasksSerializationTest.java      | 76 ++++++++++++++++++++++
 .../cassandra/DLPConfigurationItemAddedDTO.java    |  3 +-
 .../cassandra/DLPConfigurationItemsRemovedDTO.java |  3 +-
 .../cassandra/DLPConfigurationModules.java         |  6 +-
 .../FilteringRuleSetDefineDTOModules.java          |  3 +-
 .../filtering/FilteringRuleSetDefinedDTO.java      |  3 +-
 .../CassandraMailQueueViewConfigurationModule.java |  3 +-
 .../configuration/ConfigurationChangedDTO.java     |  3 +-
 .../james/server/task/json/JsonTaskSerializer.java |  2 +-
 .../apache/james/server/task/json/dto/TaskDTO.java |  9 +--
 .../james/server/task/json/dto/TaskDTOModule.java  |  6 +-
 .../apache/james/server/task/json/TestTask.java    |  2 +-
 .../james/server/task/json/dto/TestTaskDTO.java    |  3 +-
 .../server/task/json/dto/TestTaskDTOModules.java   |  3 +-
 34 files changed, 214 insertions(+), 162 deletions(-)

diff --git 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializer.java
 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializer.java
index 943abc4..acf5976 100644
--- 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializer.java
+++ 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializer.java
@@ -46,7 +46,7 @@ public class JsonEventSerializer {
         }
     }
 
-    private JsonGenericSerializer<Event, EventDTO<Event>> 
jsonGenericSerializer;
+    private JsonGenericSerializer<Event, EventDTO> jsonGenericSerializer;
 
     @Inject
     public JsonEventSerializer(Set<EventDTOModule> modules) {
diff --git 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTO.java
 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTO.java
index eeb448a..8e849c1 100644
--- 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTO.java
+++ 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTO.java
@@ -19,13 +19,7 @@
 
 package org.apache.james.eventsourcing.eventstore.cassandra.dto;
 
-import org.apache.james.eventsourcing.Event;
 import org.apache.james.json.DTO;
 
-public interface EventDTO<T extends Event> extends DTO<T> {
-    T toEvent();
-
-    default T toDomainObject() {
-        return toEvent();
-    }
+public interface EventDTO extends DTO {
 }
diff --git 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTOModule.java
 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTOModule.java
index f68d13a..fc0d675 100644
--- 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTOModule.java
+++ 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTOModule.java
@@ -22,14 +22,14 @@ package 
org.apache.james.eventsourcing.eventstore.cassandra.dto;
 import org.apache.james.eventsourcing.Event;
 import org.apache.james.json.DTOModule;
 
-public class EventDTOModule<T extends Event, U extends EventDTO<T>> extends 
DTOModule<T, U> {
+public class EventDTOModule<T extends Event, U extends EventDTO> extends 
DTOModule<T, U> {
 
     public static <EventTypeT extends Event> DTOModule.Builder<EventTypeT> 
forEvent(Class<EventTypeT> eventType) {
         return new DTOModule.Builder<>(eventType);
     }
 
-    public EventDTOModule(DTOConverter<T, U> converter, Class<T> 
domainObjectType, Class<U> dtoType, String typeName) {
-        super(converter, domainObjectType, dtoType, typeName);
+    public EventDTOModule(DTOConverter<T, U> converter, 
DomainObjectConverter<T, U> toDomainObjectConverter, Class<T> domainObjectType, 
Class<U> dtoType, String typeName) {
+        super(converter, toDomainObjectConverter, domainObjectType, dtoType, 
typeName);
     }
 
     @Override
diff --git 
a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/OtherTestEventDTO.java
 
b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/OtherTestEventDTO.java
index 222c911..cb68fd6 100644
--- 
a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/OtherTestEventDTO.java
+++ 
b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/OtherTestEventDTO.java
@@ -26,7 +26,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class OtherTestEventDTO implements EventDTO<OtherEvent> {
+public class OtherTestEventDTO implements EventDTO {
     private final String type;
     private final long data;
     private final int eventId;
@@ -61,7 +61,6 @@ public class OtherTestEventDTO implements 
EventDTO<OtherEvent> {
     }
 
     @JsonIgnore
-    @Override
     public OtherEvent toEvent() {
         return new OtherEvent(
             EventId.fromSerialized(eventId),
diff --git 
a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTO.java
 
b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTO.java
index 17d191a..d01cd32 100644
--- 
a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTO.java
+++ 
b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTO.java
@@ -28,7 +28,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestEventDTO implements EventDTO<TestEvent> {
+public class TestEventDTO implements EventDTO {
     private final String type;
     private final String data;
     private final int eventId;
@@ -63,7 +63,6 @@ public class TestEventDTO implements EventDTO<TestEvent> {
     }
 
     @JsonIgnore
-    @Override
     public TestEvent toEvent() {
         return new TestEvent(
             EventId.fromSerialized(eventId),
diff --git 
a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTOModules.java
 
b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTOModules.java
index 2aed742..966cbed 100644
--- 
a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTOModules.java
+++ 
b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTOModules.java
@@ -27,7 +27,8 @@ public interface TestEventDTOModules {
     EventDTOModule TEST_TYPE = EventDTOModule
             .forEvent(TestEvent.class)
             .convertToDTO(TestEventDTO.class)
-            .convertWith((event, typeName) -> new TestEventDTO(
+            .toDomainObjectConverter(TestEventDTO::toEvent)
+            .toDTOConverter((event, typeName) -> new TestEventDTO(
                 typeName,
                 event.getData(),
                 event.eventId().serialize(),
@@ -39,7 +40,8 @@ public interface TestEventDTOModules {
         EventDTOModule
             .forEvent(OtherEvent.class)
             .convertToDTO(OtherTestEventDTO.class)
-            .convertWith((event, typeName) -> new OtherTestEventDTO(
+            .toDomainObjectConverter(OtherTestEventDTO::toEvent)
+            .toDTOConverter((event, typeName) -> new OtherTestEventDTO(
                 typeName,
                 event.getPayload(),
                 event.eventId().serialize(),
diff --git a/json/src/main/java/org/apache/james/json/DTO.java 
b/json/src/main/java/org/apache/james/json/DTO.java
index b0e8564..1984716 100644
--- a/json/src/main/java/org/apache/james/json/DTO.java
+++ b/json/src/main/java/org/apache/james/json/DTO.java
@@ -1,5 +1,4 @@
 package org.apache.james.json;
 
-public interface DTO<T> {
-    T toDomainObject();
+public interface DTO {
 }
diff --git a/json/src/main/java/org/apache/james/json/DTOModule.java 
b/json/src/main/java/org/apache/james/json/DTOModule.java
index 8baeb8f..2810cff 100644
--- a/json/src/main/java/org/apache/james/json/DTOModule.java
+++ b/json/src/main/java/org/apache/james/json/DTOModule.java
@@ -19,14 +19,18 @@
 
 package org.apache.james.json;
 
-public class DTOModule<T, U extends DTO<T>> {
+public class DTOModule<T, U extends DTO> {
 
-    public interface DTOConverter<T, U extends DTO<T>> {
+    public interface DTOConverter<T, U extends DTO> {
         U convert(T domainObject, String typeName);
     }
 
-    public interface ModuleFactory<T, U extends DTO<T>, ModuleTypeT extends 
DTOModule<T, U>> {
-        ModuleTypeT create(DTOConverter<T, U> converter, Class<T> 
domainObjectType, Class<U> dtoType, String typeName);
+    public interface DomainObjectConverter<T, U extends DTO> {
+        T convert(U dto);
+    }
+
+    public interface ModuleFactory<T, U extends DTO, ModuleTypeT extends 
DTOModule<T, U>> {
+        ModuleTypeT create(DTOConverter<T, U> converter, 
DomainObjectConverter<T, U> toDomainObjectConverter, Class<T> domainObjectType, 
Class<U> dtoType, String typeName);
     }
 
     public static <T> Builder<T> forDomainObject(Class<T> domainObjectType) {
@@ -41,43 +45,55 @@ public class DTOModule<T, U extends DTO<T>> {
             this.type = type;
         }
 
-        public <U extends DTO<T>> RequireConversionFunctionBuilder<U> 
convertToDTO(Class<U> dtoType) {
-            return new RequireConversionFunctionBuilder<>(dtoType);
+        public <U extends DTO> RequireToDomainObjectConverterBuilder<U> 
convertToDTO(Class<U> dtoType) {
+            return new RequireToDomainObjectConverterBuilder<>(dtoType);
         }
 
-        public class RequireConversionFunctionBuilder<U extends DTO<T>> {
+        public class RequireToDomainObjectConverterBuilder<U extends DTO> {
 
             private final Class<U> dtoType;
 
-            private RequireConversionFunctionBuilder(Class<U> dtoType) {
+            RequireToDomainObjectConverterBuilder(Class<U> dtoType) {
                 this.dtoType = dtoType;
             }
 
-            public RequireTypeNameBuilder convertWith(DTOConverter<T, U> 
converter) {
-                return new RequireTypeNameBuilder(converter);
+            public RequireToDTOConverterBuilder 
toDomainObjectConverter(DomainObjectConverter<T, U> converter) {
+                return new RequireToDTOConverterBuilder(converter);
             }
 
-            public class RequireTypeNameBuilder {
-                private final DTOConverter<T, U> converter;
+            public class RequireToDTOConverterBuilder {
+                private DomainObjectConverter<T, U> toDomainObjectConverter;
 
-                private RequireTypeNameBuilder(DTOConverter<T, U> converter) {
-                    this.converter = converter;
+                private RequireToDTOConverterBuilder(DomainObjectConverter<T, 
U> toDomainObjectConverter) {
+                    this.toDomainObjectConverter = toDomainObjectConverter;
                 }
 
-                public RequireModuleFactory typeName(String typeName) {
-                    return new RequireModuleFactory(typeName);
+                public RequireTypeNameBuilder toDTOConverter(DTOConverter<T, 
U> converter) {
+                    return new RequireTypeNameBuilder(converter);
                 }
 
-                public class RequireModuleFactory {
+                public class RequireTypeNameBuilder {
+                    private final DTOConverter<T, U> converter;
 
-                    private final String typeName;
+                    private RequireTypeNameBuilder(DTOConverter<T, U> 
converter) {
+                        this.converter = converter;
+                    }
 
-                    private RequireModuleFactory(String typeName) {
-                        this.typeName = typeName;
+                    public RequireModuleFactory typeName(String typeName) {
+                        return new RequireModuleFactory(typeName);
                     }
 
-                    public <ModuleTypeT extends DTOModule<T, U>> ModuleTypeT 
withFactory(ModuleFactory<T, U, ModuleTypeT> factory) {
-                        return factory.create(converter, type, dtoType, 
typeName);
+                    public class RequireModuleFactory {
+
+                        private final String typeName;
+
+                        private RequireModuleFactory(String typeName) {
+                            this.typeName = typeName;
+                        }
+
+                        public <ModuleTypeT extends DTOModule<T, U>> 
ModuleTypeT withFactory(ModuleFactory<T, U, ModuleTypeT> factory) {
+                            return factory.create(converter, 
toDomainObjectConverter, type, dtoType, typeName);
+                        }
                     }
                 }
             }
@@ -85,17 +101,23 @@ public class DTOModule<T, U extends DTO<T>> {
     }
 
     private final DTOConverter<T, U> converter;
+    private final DomainObjectConverter<T, U> toDomainObjectConverter;
     private final Class<T> domainObjectType;
     private final Class<U> dtoType;
     private final String typeName;
 
-    protected DTOModule(DTOConverter<T, U> converter, Class<T> 
domainObjectType, Class<U> dtoType, String typeName) {
+    protected DTOModule(DTOConverter<T, U> converter, DomainObjectConverter<T, 
U> toDomainObjectConverter,  Class<T> domainObjectType, Class<U> dtoType, 
String typeName) {
         this.converter = converter;
+        this.toDomainObjectConverter = toDomainObjectConverter;
         this.domainObjectType = domainObjectType;
         this.dtoType = dtoType;
         this.typeName = typeName;
     }
 
+    public DomainObjectConverter<T, U> getToDomainObjectConverter() {
+        return toDomainObjectConverter;
+    }
+
     public String getDomainObjectType() {
         return typeName;
     }
diff --git 
a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java 
b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
index 6934320..4cf19d2 100644
--- a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
+++ b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
@@ -37,7 +37,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableSet;
 
-public class JsonGenericSerializer<T, U extends DTO<T>> {
+public class JsonGenericSerializer<T, U extends DTO> {
 
     public static class InvalidTypeException extends RuntimeException {
         public InvalidTypeException(String message) {
@@ -60,7 +60,7 @@ public class JsonGenericSerializer<T, U extends DTO<T>> {
     private final ObjectMapper objectMapper;
 
     @SafeVarargs
-    public static <T, U extends DTO<T>> JsonGenericSerializer of(DTOModule<T, 
U>... modules) {
+    public static <T, U extends DTO> JsonGenericSerializer of(DTOModule<T, 
U>... modules) {
         return new JsonGenericSerializer<>(ImmutableSet.copyOf(modules));
     }
 
@@ -99,18 +99,16 @@ public class JsonGenericSerializer<T, U extends DTO<T>> {
                 throw new InvalidTypeException("No \"type\" property found in 
the json document");
             }
 
-            U dto = objectMapper.readValue(
-                objectMapper.treeAsTokens(jsonNode),
-                retrieveDTOClass(typeNode.asText()));
-            return dto.toDomainObject();
+            DTOModule<T, U> dtoModule = 
retrieveModuleForType(typeNode.asText());
+            U dto = 
objectMapper.readValue(objectMapper.treeAsTokens(jsonNode), 
dtoModule.getDTOClass());
+            return dtoModule.getToDomainObjectConverter().convert(dto);
         } catch (MismatchedInputException e) {
             throw new InvalidTypeException("Duplicate \"type\" properties 
found in the json document", e);
         }
     }
 
-    private Class<? extends U> retrieveDTOClass(String type) {
+    private DTOModule<T, U> retrieveModuleForType(String type) {
         return Optional.ofNullable(typeToModule.get(type))
-            .map(DTOModule::getDTOClass)
             .orElseThrow(() -> new UnknownTypeException("unknown type " + 
type));
     }
 
diff --git a/json/src/test/java/org/apache/JsonGenericSerializerTest.java 
b/json/src/test/java/org/apache/JsonGenericSerializerTest.java
index c450e68..6334a74 100644
--- a/json/src/test/java/org/apache/JsonGenericSerializerTest.java
+++ b/json/src/test/java/org/apache/JsonGenericSerializerTest.java
@@ -81,7 +81,7 @@ class JsonGenericSerializerTest {
     @ParameterizedTest
     @MethodSource
     void serializeShouldHandleAllKnownTypes(BaseType domainObject, String 
serializedJson) throws Exception {
-        JsonGenericSerializer<BaseType, DTO<BaseType>> serializer = 
JsonGenericSerializer.of(
+        JsonGenericSerializer<BaseType, DTO> serializer = 
JsonGenericSerializer.of(
                 TestModules.FIRST_TYPE,
                 TestModules.SECOND_TYPE);
 
diff --git a/json/src/test/java/org/apache/dto/FirstDTO.java 
b/json/src/test/java/org/apache/dto/FirstDTO.java
index f8b1496..9e4f46b 100644
--- a/json/src/test/java/org/apache/dto/FirstDTO.java
+++ b/json/src/test/java/org/apache/dto/FirstDTO.java
@@ -28,7 +28,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class FirstDTO implements DTO<FirstDomainObject> {
+public class FirstDTO implements DTO {
     private final String type;
     private final Optional<Long> id;
     private final String time;
@@ -63,7 +63,6 @@ public class FirstDTO implements DTO<FirstDomainObject> {
     }
 
     @JsonIgnore
-    @Override
     public FirstDomainObject toDomainObject() {
         return new FirstDomainObject(id, ZonedDateTime.parse(time), payload);
     }
diff --git a/json/src/test/java/org/apache/dto/SecondDTO.java 
b/json/src/test/java/org/apache/dto/SecondDTO.java
index b900100..d31929a 100644
--- a/json/src/test/java/org/apache/dto/SecondDTO.java
+++ b/json/src/test/java/org/apache/dto/SecondDTO.java
@@ -27,7 +27,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class SecondDTO implements DTO<SecondDomainObject> {
+public class SecondDTO implements DTO {
     private final String type;
     private final String id;
     private final String payload;
@@ -55,7 +55,6 @@ public class SecondDTO implements DTO<SecondDomainObject> {
     }
 
     @JsonIgnore
-    @Override
     public SecondDomainObject toDomainObject() {
         return new SecondDomainObject(UUID.fromString(id), payload);
     }
diff --git a/json/src/test/java/org/apache/dto/TestModule.java 
b/json/src/test/java/org/apache/dto/TestModule.java
index afa4f2c..ef81042 100644
--- a/json/src/test/java/org/apache/dto/TestModule.java
+++ b/json/src/test/java/org/apache/dto/TestModule.java
@@ -22,9 +22,9 @@ package org.apache.dto;
 import org.apache.james.json.DTO;
 import org.apache.james.json.DTOModule;
 
-public class TestModule<T extends BaseType, U extends DTO<T>> extends 
DTOModule<T, U> {
+public class TestModule<T extends BaseType, U extends DTO> extends 
DTOModule<T, U> {
 
-    protected TestModule(DTOConverter<T, U> converter, Class<T> 
domainObjectType, Class<U> dtoType, String typeName) {
-        super(converter, domainObjectType, dtoType, typeName);
+    protected TestModule(DTOConverter<T, U> converter, 
DomainObjectConverter<T, U> toDomainObjectConverter, Class<T> domainObjectType, 
Class<U> dtoType, String typeName) {
+        super(converter, toDomainObjectConverter, domainObjectType, dtoType, 
typeName);
     }
 }
diff --git a/json/src/test/java/org/apache/dto/TestModules.java 
b/json/src/test/java/org/apache/dto/TestModules.java
index 534f6ed..6810997 100644
--- a/json/src/test/java/org/apache/dto/TestModules.java
+++ b/json/src/test/java/org/apache/dto/TestModules.java
@@ -24,24 +24,26 @@ import org.apache.james.json.DTOModule;
 public interface TestModules {
 
     TestModule FIRST_TYPE = DTOModule
-            .forDomainObject(FirstDomainObject.class)
-            .convertToDTO(FirstDTO.class)
-            .convertWith((domainObject, typeName) -> new FirstDTO(
-                typeName,
-                domainObject.getId(),
-                domainObject.getTime().toString(),
-                domainObject.getPayload()))
-            .typeName("first")
-            .withFactory(TestModule::new);
+        .forDomainObject(FirstDomainObject.class)
+        .convertToDTO(FirstDTO.class)
+        .toDomainObjectConverter(FirstDTO::toDomainObject)
+        .toDTOConverter((domainObject, typeName) -> new FirstDTO(
+            typeName,
+            domainObject.getId(),
+            domainObject.getTime().toString(),
+            domainObject.getPayload()))
+        .typeName("first")
+        .withFactory(TestModule::new);
 
     TestModule SECOND_TYPE = DTOModule
-            .forDomainObject(SecondDomainObject.class)
-            .convertToDTO(SecondDTO.class)
-            .convertWith((domainObject, typeName) -> new SecondDTO(
-                typeName,
-                domainObject.getId().toString(),
-                domainObject.getPayload()))
-            .typeName("second")
-            .withFactory(TestModule::new);
+        .forDomainObject(SecondDomainObject.class)
+        .convertToDTO(SecondDTO.class)
+        .toDomainObjectConverter(SecondDTO::toDomainObject)
+        .toDTOConverter((domainObject, typeName) -> new SecondDTO(
+            typeName,
+            domainObject.getId().toString(),
+            domainObject.getPayload()))
+        .typeName("second")
+        .withFactory(TestModule::new);
 
 }
diff --git 
a/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaEventDTOModules.java
 
b/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaEventDTOModules.java
index 8012a00..85266d4 100644
--- 
a/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaEventDTOModules.java
+++ 
b/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaEventDTOModules.java
@@ -28,7 +28,8 @@ public interface QuotaEventDTOModules {
         EventDTOModule
             .forEvent(QuotaThresholdChangedEvent.class)
             .convertToDTO(QuotaThresholdChangedEventDTO.class)
-            .convertWith(QuotaThresholdChangedEventDTO::from)
+            .toDomainObjectConverter(QuotaThresholdChangedEventDTO::toEvent)
+            .toDTOConverter(QuotaThresholdChangedEventDTO::from)
             .typeName("quota-threshold-change")
             .withFactory(EventDTOModule::new);
 
diff --git 
a/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaThresholdChangedEventDTO.java
 
b/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaThresholdChangedEventDTO.java
index 499f28f..fe058f8 100644
--- 
a/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaThresholdChangedEventDTO.java
+++ 
b/mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaThresholdChangedEventDTO.java
@@ -28,7 +28,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-class QuotaThresholdChangedEventDTO implements 
EventDTO<QuotaThresholdChangedEvent> {
+class QuotaThresholdChangedEventDTO implements EventDTO {
 
     @JsonIgnore
     public static QuotaThresholdChangedEventDTO 
from(QuotaThresholdChangedEvent event, String type) {
@@ -96,7 +96,6 @@ class QuotaThresholdChangedEventDTO implements 
EventDTO<QuotaThresholdChangedEve
     }
 
     @JsonIgnore
-    @Override
     public QuotaThresholdChangedEvent toEvent() {
         return new QuotaThresholdChangedEvent(
             EventId.fromSerialized(eventId),
diff --git a/mailbox/tools/indexer/pom.xml b/mailbox/tools/indexer/pom.xml
index 27c8b2e..38c1a6a 100644
--- a/mailbox/tools/indexer/pom.xml
+++ b/mailbox/tools/indexer/pom.xml
@@ -91,6 +91,10 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-task-json</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
             <artifactId>jackson-datatype-guava</artifactId>
             <scope>test</scope>
@@ -163,4 +167,4 @@
         </plugins>
     </build>
 
-</project>
\ No newline at end of file
+</project>
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
index 43d1849..cdda208 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
@@ -19,7 +19,6 @@
 
 package org.apache.mailbox.tools.indexer;
 
-import java.util.Map;
 import java.util.Optional;
 
 import javax.inject.Inject;
@@ -27,9 +26,7 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.collect.ImmutableMap;
+import org.apache.mailbox.tools.indexer.dto.SingleMailboxReindexingTaskDTO;
 
 public class SingleMailboxReindexingTask implements Task {
 
@@ -50,16 +47,18 @@ public class SingleMailboxReindexingTask implements Task {
 
     public static class Factory {
 
-        private MailboxId.Factory mailboxIdFactory;
+        private final ReIndexerPerformer reIndexerPerformer;
+        private final MailboxId.Factory mailboxIdFactory;
 
         @Inject
-        public Factory(MailboxId.Factory mailboxIdFactory) {
+        public Factory(ReIndexerPerformer reIndexerPerformer, 
MailboxId.Factory mailboxIdFactory) {
+            this.reIndexerPerformer = reIndexerPerformer;
             this.mailboxIdFactory = mailboxIdFactory;
         }
 
-        public Task create(JsonNode parameters) {
-            MailboxId mailboxId = 
mailboxIdFactory.fromString(parameters.get("mailboxId").asText());
-            return new SingleMailboxReindexingTask(null, mailboxId);
+        public SingleMailboxReindexingTask 
create(SingleMailboxReindexingTaskDTO dto) {
+            MailboxId mailboxId = 
mailboxIdFactory.fromString(dto.getMailboxId());
+            return new SingleMailboxReindexingTask(reIndexerPerformer, 
mailboxId);
         }
     }
 
@@ -90,14 +89,13 @@ public class SingleMailboxReindexingTask implements Task {
         return MAILBOX_RE_INDEXING;
     }
 
-    @Override
-    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(additionalInformation);
+    public MailboxId getMailboxId() {
+        return mailboxId;
     }
 
     @Override
-    public Map<String, String> parameters() {
-        return ImmutableMap.of("mailboxId", mailboxId.serialize());
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.of(additionalInformation);
     }
 
 }
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/dto/SingleMailboxReindexingTaskDTO.java
similarity index 69%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to 
mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/dto/SingleMailboxReindexingTaskDTO.java
index ae8928f..de7100b 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/dto/SingleMailboxReindexingTaskDTO.java
@@ -17,27 +17,20 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.server.task.json.dto;
+package org.apache.mailbox.tools.indexer.dto;
 
-import org.apache.james.server.task.json.TestTask;
+import org.apache.james.server.task.json.dto.TaskDTO;
 
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestTaskDTO implements TaskDTO<TestTask> {
-    private final long parameter;
-    private final String type;
+public class SingleMailboxReindexingTaskDTO implements TaskDTO {
 
+    private final String type;
+    private final String mailboxId;
 
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
+    public SingleMailboxReindexingTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("mailboxId") String mailboxId) {
         this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
+        this.mailboxId = mailboxId;
     }
 
     @Override
@@ -45,11 +38,7 @@ public class TestTaskDTO implements TaskDTO<TestTask> {
         return type;
     }
 
-    @JsonIgnore
-    @Override
-    public TestTask toTask() {
-        return new TestTask(parameter);
+    public String getMailboxId() {
+        return mailboxId;
     }
-
-
 }
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskTest.java
deleted file mode 100644
index ccda108..0000000
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.apache.mailbox.tools.indexer;
-
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-import org.apache.james.mailbox.model.TestId;
-import org.junit.jupiter.api.Test;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
-
-class SingleMailboxReindexingTaskTest {
-
-    @Test
-    void parametersShouldReturnMapWithStringValues() {
-        ReIndexerPerformer reIndexerPerformer = mock(ReIndexerPerformer.class);
-        TestId mailboxId = TestId.of(1L);
-        SingleMailboxReindexingTask task = new 
SingleMailboxReindexingTask(reIndexerPerformer, mailboxId);
-        assertThat(task.parameters()).isEqualTo(ImmutableMap.of("mailboxId", 
"1"));
-    }
-
-}
\ No newline at end of file
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/TasksSerializationTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/TasksSerializationTest.java
new file mode 100644
index 0000000..15826d1
--- /dev/null
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/TasksSerializationTest.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.mailbox.tools.indexer;
+
+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.mailbox.model.TestId;
+import org.apache.james.server.task.json.JsonTaskSerializer;
+import org.apache.james.server.task.json.dto.TaskDTOModule;
+import org.apache.mailbox.tools.indexer.dto.SingleMailboxReindexingTaskDTO;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+class TasksSerializationTest {
+
+    private SingleMailboxReindexingTask.Factory factory;
+    private TaskDTOModule module;
+    private ReIndexerPerformer reIndexerPerformer;
+
+    @BeforeEach
+    void setUp() {
+        reIndexerPerformer = mock(ReIndexerPerformer.class);
+        factory = new SingleMailboxReindexingTask.Factory(reIndexerPerformer, 
new TestId.Factory());
+        module = TaskDTOModule
+            .forTask(SingleMailboxReindexingTask.class)
+            .convertToDTO(SingleMailboxReindexingTaskDTO.class)
+            .toDomainObjectConverter(factory::create)
+            .toDTOConverter((task, typeName) ->
+                new SingleMailboxReindexingTaskDTO(typeName, 
task.getMailboxId().serialize())
+            )
+            .typeName("mailbox-reindexer")
+            .withFactory(TaskDTOModule::new);
+    }
+
+    @Test
+    void singleMailboxReindexingShouldBeSerializable() throws 
JsonProcessingException {
+        TestId mailboxId = TestId.of(1L);
+        SingleMailboxReindexingTask task = new 
SingleMailboxReindexingTask(reIndexerPerformer, mailboxId);
+
+        assertThatJson(new JsonTaskSerializer(module).serialize(task))
+                .isEqualTo("{\"type\": \"mailbox-reindexer\", \"mailboxId\": 
\"1\"}");
+    }
+
+    @Test
+    void singleMailboxReindexingShouldBeDeserializable() throws IOException {
+        TestId mailboxId = TestId.of(1L);
+        SingleMailboxReindexingTask task = new 
SingleMailboxReindexingTask(reIndexerPerformer, mailboxId);
+
+        String serializedTask = "{\"type\": \"mailbox-reindexer\", 
\"mailboxId\": \"1\"}";
+        assertThat(new JsonTaskSerializer(module).deserialize(serializedTask))
+            .isEqualToComparingOnlyGivenFields(task, "reIndexerPerformer", 
"mailboxId");
+    }
+}
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemAddedDTO.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemAddedDTO.java
index 1545679..f42bd39 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemAddedDTO.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemAddedDTO.java
@@ -34,7 +34,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.Preconditions;
 
-class DLPConfigurationItemAddedDTO implements 
EventDTO<ConfigurationItemsAdded> {
+class DLPConfigurationItemAddedDTO implements EventDTO {
 
     public static DLPConfigurationItemAddedDTO from(ConfigurationItemsAdded 
event, String type) {
         return new DLPConfigurationItemAddedDTO(
@@ -83,7 +83,6 @@ class DLPConfigurationItemAddedDTO implements 
EventDTO<ConfigurationItemsAdded>
     }
 
     @JsonIgnore
-    @Override
     public ConfigurationItemsAdded toEvent() {
         return new ConfigurationItemsAdded(
             DLPAggregateId.parse(aggregateId),
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemsRemovedDTO.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemsRemovedDTO.java
index 5d3a80a..c6c2ccb 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemsRemovedDTO.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemsRemovedDTO.java
@@ -34,7 +34,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.Preconditions;
 
-class DLPConfigurationItemsRemovedDTO implements 
EventDTO<ConfigurationItemsRemoved> {
+class DLPConfigurationItemsRemovedDTO implements EventDTO {
 
     public static DLPConfigurationItemsRemovedDTO 
from(ConfigurationItemsRemoved event, String type) {
         return new DLPConfigurationItemsRemovedDTO(
@@ -83,7 +83,6 @@ class DLPConfigurationItemsRemovedDTO implements 
EventDTO<ConfigurationItemsRemo
     }
 
     @JsonIgnore
-    @Override
     public ConfigurationItemsRemoved toEvent() {
         return new ConfigurationItemsRemoved(
             DLPAggregateId.parse(aggregateId),
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationModules.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationModules.java
index 692aa0d..36c0217 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationModules.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationModules.java
@@ -29,7 +29,8 @@ public interface DLPConfigurationModules {
         EventDTOModule
             .forEvent(ConfigurationItemsAdded.class)
             .convertToDTO(DLPConfigurationItemAddedDTO.class)
-            .convertWith(DLPConfigurationItemAddedDTO::from)
+            .toDomainObjectConverter(DLPConfigurationItemAddedDTO::toEvent)
+            .toDTOConverter(DLPConfigurationItemAddedDTO::from)
             .typeName("dlp-configuration-store")
             .withFactory(EventDTOModule::new);
 
@@ -37,7 +38,8 @@ public interface DLPConfigurationModules {
         EventDTOModule
             .forEvent(ConfigurationItemsRemoved.class)
             .convertToDTO(DLPConfigurationItemsRemovedDTO.class)
-            .convertWith(DLPConfigurationItemsRemovedDTO::from)
+            .toDomainObjectConverter(DLPConfigurationItemsRemovedDTO::toEvent)
+            .toDTOConverter(DLPConfigurationItemsRemovedDTO::from)
             .typeName("dlp-configuration-clear")
             .withFactory(EventDTOModule::new);
 
diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefineDTOModules.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefineDTOModules.java
index f8002f6..3f8314a 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefineDTOModules.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefineDTOModules.java
@@ -30,7 +30,8 @@ public interface FilteringRuleSetDefineDTOModules {
         EventDTOModule
             .forEvent(RuleSetDefined.class)
             .convertToDTO(FilteringRuleSetDefinedDTO.class)
-            .convertWith(FilteringRuleSetDefinedDTO::from)
+            .toDomainObjectConverter(FilteringRuleSetDefinedDTO::toEvent)
+            .toDTOConverter(FilteringRuleSetDefinedDTO::from)
             .typeName(TYPE)
             .withFactory(EventDTOModule::new);
 
diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefinedDTO.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefinedDTO.java
index b655711..e35e6ae 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefinedDTO.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefinedDTO.java
@@ -31,7 +31,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.collect.ImmutableList;
 
-public class FilteringRuleSetDefinedDTO implements EventDTO<RuleSetDefined> {
+public class FilteringRuleSetDefinedDTO implements EventDTO {
 
     public static FilteringRuleSetDefinedDTO from(RuleSetDefined event, String 
type) {
         return new FilteringRuleSetDefinedDTO(
@@ -77,7 +77,6 @@ public class FilteringRuleSetDefinedDTO implements 
EventDTO<RuleSetDefined> {
     }
 
     @JsonIgnore
-    @Override
     public RuleSetDefined toEvent() {
         return new RuleSetDefined(
             FilteringAggregateId.parse(aggregateId),
diff --git 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationModule.java
 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationModule.java
index e3b4fc6..cb0df9a 100644
--- 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationModule.java
+++ 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationModule.java
@@ -29,7 +29,8 @@ public interface CassandraMailQueueViewConfigurationModule {
         EventDTOModule
             .forEvent(ConfigurationChanged.class)
             .convertToDTO(ConfigurationChangedDTO.class)
-            .convertWith(ConfigurationChangedDTO::from)
+            .toDomainObjectConverter(ConfigurationChangedDTO::toEvent)
+            .toDTOConverter(ConfigurationChangedDTO::from)
             .typeName(TYPE_NAME)
             .withFactory(EventDTOModule::new);
 }
diff --git 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTO.java
 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTO.java
index 80a8ab7..a621e2a 100644
--- 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTO.java
+++ 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTO.java
@@ -30,7 +30,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.Preconditions;
 
-class ConfigurationChangedDTO implements EventDTO<ConfigurationChanged> {
+class ConfigurationChangedDTO implements EventDTO {
 
     static ConfigurationChangedDTO from(ConfigurationChanged 
configurationChanged, String type) {
         Preconditions.checkNotNull(configurationChanged);
@@ -74,7 +74,6 @@ class ConfigurationChangedDTO implements 
EventDTO<ConfigurationChanged> {
     }
 
     @JsonIgnore
-    @Override
     public ConfigurationChanged toEvent() {
         return new ConfigurationChanged(
             () -> aggregateKey,
diff --git 
a/server/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskSerializer.java
 
b/server/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskSerializer.java
index 21b048e..3f616c2 100644
--- 
a/server/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskSerializer.java
+++ 
b/server/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskSerializer.java
@@ -46,7 +46,7 @@ public class JsonTaskSerializer {
         }
     }
 
-    private JsonGenericSerializer<Task, TaskDTO<Task>> jsonGenericSerializer;
+    private JsonGenericSerializer<Task, TaskDTO> jsonGenericSerializer;
 
     @Inject
     public JsonTaskSerializer(@SuppressWarnings("rawtypes") Set<TaskDTOModule> 
modules) {
diff --git 
a/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTO.java
 
b/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTO.java
index 3dc3670..2217abd 100644
--- 
a/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTO.java
+++ 
b/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTO.java
@@ -1,15 +1,8 @@
 package org.apache.james.server.task.json.dto;
 
 import org.apache.james.json.DTO;
-import org.apache.james.task.Task;
 
-public interface TaskDTO<T extends Task> extends DTO<T> {
-
-    T toTask();
+public interface TaskDTO extends DTO {
 
     String getType();
-
-    default T toDomainObject() {
-        return toTask();
-    }
 }
\ No newline at end of file
diff --git 
a/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTOModule.java
 
b/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTOModule.java
index 0737025..5e5393e 100644
--- 
a/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTOModule.java
+++ 
b/server/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTOModule.java
@@ -21,13 +21,13 @@ package org.apache.james.server.task.json.dto;
 import org.apache.james.json.DTOModule;
 import org.apache.james.task.Task;
 
-public class TaskDTOModule<T extends Task, U extends TaskDTO<T>> extends 
DTOModule<T, U> {
+public class TaskDTOModule<T extends Task, U extends TaskDTO> extends 
DTOModule<T, U> {
 
     public static <TaskTypeT extends Task> Builder<TaskTypeT> 
forTask(Class<TaskTypeT> taskType) {
         return new Builder<>(taskType);
     }
 
-    public TaskDTOModule(DTOConverter<T, U> converter, Class<T> 
domainObjectType, Class<U> dtoType, String typeName) {
-        super(converter, domainObjectType, dtoType, typeName);
+    public TaskDTOModule(DTOConverter<T, U> converter, 
DomainObjectConverter<T, U> toDomainObjectConverter, Class<T> domainObjectType, 
Class<U> dtoType, String typeName) {
+        super(converter, toDomainObjectConverter, domainObjectType, dtoType, 
typeName);
     }
 }
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/TestTask.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/TestTask.java
index 84aa4a4..f83ea0b 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/TestTask.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/TestTask.java
@@ -34,7 +34,7 @@ public class TestTask implements Task {
     }
 
     @Override
-    public Result run() throws InterruptedException {
+    public Result run() {
         return null;
     }
 
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
index ae8928f..3a67475 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
@@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestTaskDTO implements TaskDTO<TestTask> {
+public class TestTaskDTO implements TaskDTO {
     private final long parameter;
     private final String type;
 
@@ -46,7 +46,6 @@ public class TestTaskDTO implements TaskDTO<TestTask> {
     }
 
     @JsonIgnore
-    @Override
     public TestTask toTask() {
         return new TestTask(parameter);
     }
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java
index 499b96c..18ace22 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java
@@ -26,7 +26,8 @@ public interface TestTaskDTOModules {
     TaskDTOModule TEST_TYPE = TaskDTOModule
         .forTask(TestTask.class)
         .convertToDTO(TestTaskDTO.class)
-        .convertWith((task, typeName) -> new TestTaskDTO(
+        .toDomainObjectConverter(TestTaskDTO::toTask)
+        .toDTOConverter((task, typeName) -> new TestTaskDTO(
             typeName,
             task.getParameter()))
         .typeName("testTask")


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

Reply via email to