You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2020/06/11 15:25:41 UTC

[james-project] 04/17: JAMES-3194 Inject DTOConverter for every product

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 7c1adec91f44c237d60d989a63326ff7faaab327
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri May 15 15:51:03 2020 +0700

    JAMES-3194 Inject DTOConverter for every product
    
    Note that is requires splitting guice injections for it
---
 .../org/apache/james/CassandraJamesServerMain.java |   2 +
 ...assandraConsistencyTaskSerializationModule.java | 110 +++++
 .../james/CassandraRabbitMQJamesServerMain.java    |   4 +-
 .../modules/DistributedTaskManagerModule.java      |   3 +
 .../DistributedTaskSerializationModule.java        | 107 +++++
 .../james/modules/TaskSerializationModule.java     | 475 ---------------------
 server/container/guice/guice-common/pom.xml        |   4 +
 .../james/modules/server/TaskManagerModule.java    |   2 +
 .../modules/server/TaskSerializationModule.java}   |  36 +-
 .../modules/mailbox/LuceneSearchMailboxModule.java |   2 +
 .../modules/vault/DeletedMessageVaultModule.java   |   1 +
 .../vault/VaultTaskSerializationModule.java        |  82 ++++
 server/container/guice/mailbox/pom.xml             |   4 +
 .../mailbox/ReIndexingTaskSerializationModule.java | 110 +++++
 .../server/JmapTaskSerializationModule.java        |  56 +++
 .../james/modules/server/JmapTasksModule.java      |   2 +
 .../james/modules/server/MailboxRoutesModule.java  |   2 +
 .../server/MailboxesExportRoutesModule.java        |   1 +
 ...adminMailboxExportTaskSerializationModule.java} |  32 +-
 .../WebadminMailboxTaskSerializationModule.java    |  79 ++++
 .../modules/server/MailQueueRoutesModule.java      |   2 +
 .../server/MailQueueTaskSerializationModule.java   |  57 +++
 .../server/MailRepositoriesRoutesModule.java       |   2 +
 .../MailRepositoryTaskSerializationModule.java     |  71 +++
 24 files changed, 739 insertions(+), 507 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index 8ecdf1a..167bb2e 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import org.apache.james.eventsourcing.eventstore.cassandra.EventNestedTypes;
 import org.apache.james.json.DTOModule;
 import org.apache.james.modules.BlobExportMechanismModule;
+import org.apache.james.modules.CassandraConsistencyTaskSerializationModule;
 import org.apache.james.modules.MailboxModule;
 import org.apache.james.modules.activemq.ActiveMQQueueModule;
 import org.apache.james.modules.data.CassandraDLPConfigurationStoreModule;
@@ -139,6 +140,7 @@ public class CassandraJamesServerMain implements JamesServerMain {
         CASSANDRA_EVENT_STORE_JSON_SERIALIZATION_DEFAULT_MODULE);
 
     public static final Module CASSANDRA_MAILBOX_MODULE = Modules.combine(
+        new CassandraConsistencyTaskSerializationModule(),
         new CassandraMailboxModule(),
         new CassandraDeletedMessageVaultModule(),
         new ElasticSearchClientModule(),
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/CassandraConsistencyTaskSerializationModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/CassandraConsistencyTaskSerializationModule.java
new file mode 100644
index 0000000..2b565c2
--- /dev/null
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/CassandraConsistencyTaskSerializationModule.java
@@ -0,0 +1,110 @@
+/****************************************************************
+ * 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.modules;
+
+import org.apache.james.backends.cassandra.migration.MigrationTask;
+import org.apache.james.backends.cassandra.migration.MigrationTaskAdditionalInformationDTO;
+import org.apache.james.backends.cassandra.migration.MigrationTaskDTO;
+import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTaskAdditionalInformationDTO;
+import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTaskDTO;
+import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTaskRunner;
+import org.apache.james.mailbox.cassandra.mail.task.RecomputeMailboxCountersService;
+import org.apache.james.mailbox.cassandra.mail.task.RecomputeMailboxCountersTaskAdditionalInformationDTO;
+import org.apache.james.mailbox.cassandra.mail.task.RecomputeMailboxCountersTaskDTO;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesService;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesTaskAdditionalInformationDTO;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesTaskDTO;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesService;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesTaskAdditionalInformationDTO;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesTaskDTO;
+import org.apache.james.rrt.cassandra.CassandraMappingsSourcesDAO;
+import org.apache.james.rrt.cassandra.migration.MappingsSourcesMigration;
+import org.apache.james.rrt.cassandra.migration.MappingsSourcesMigrationTaskAdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.webadmin.service.CassandraMappingsSolveInconsistenciesTask;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class CassandraConsistencyTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> cassandraMappingsSolveInconsistenciesTask(MappingsSourcesMigration migration, CassandraMappingsSourcesDAO dao) {
+        return CassandraMappingsSolveInconsistenciesTask.module(migration, dao);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> mailboxMergingTask(MailboxMergingTaskRunner taskRunner) {
+        return MailboxMergingTaskDTO.module(taskRunner);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> solveMailboxInconsistenciesTask(SolveMailboxInconsistenciesService service) {
+        return SolveMailboxInconsistenciesTaskDTO.module(service);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeMailboxCountersTask(RecomputeMailboxCountersService service) {
+        return RecomputeMailboxCountersTaskDTO.module(service);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> migrationTask(MigrationTask.Factory factory) {
+        return MigrationTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> solveMessageInconsistenciesTask(SolveMessageInconsistenciesService solveMessageInconsistenciesService) {
+        return SolveMessageInconsistenciesTaskDTO.module(solveMessageInconsistenciesService);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> cassandraMappingsSolveInconsistenciesAdditionalInformation() {
+        return MappingsSourcesMigrationTaskAdditionalInformationDTO.serializationModule(CassandraMappingsSolveInconsistenciesTask.TYPE);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> mailboxMergingAdditionalInformation() {
+        return MailboxMergingTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> solveMailboxInconsistenciesAdditionalInformation() {
+        return SolveMailboxInconsistenciesTaskAdditionalInformationDTO.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeMailboxCountersAdditionalInformation() {
+        return RecomputeMailboxCountersTaskAdditionalInformationDTO.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> migrationTaskAdditionalInformation() {
+        return MigrationTaskAdditionalInformationDTO.serializationModule();
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> solveMessageInconsistenciesAdditionalInformation() {
+        return SolveMessageInconsistenciesTaskAdditionalInformationDTO.MODULE;
+    }
+}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
index e9730fa..588ee9b 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
@@ -22,7 +22,7 @@ package org.apache.james;
 import static org.apache.james.CassandraJamesServerMain.REQUIRE_TASK_MANAGER_MODULE;
 
 import org.apache.james.modules.DistributedTaskManagerModule;
-import org.apache.james.modules.TaskSerializationModule;
+import org.apache.james.modules.DistributedTaskSerializationModule;
 import org.apache.james.modules.blobstore.BlobStoreCacheModulesChooser;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.apache.james.modules.blobstore.BlobStoreModulesChooser;
@@ -37,7 +37,7 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain {
     protected static final Module MODULES =
         Modules
             .override(Modules.combine(REQUIRE_TASK_MANAGER_MODULE, new DistributedTaskManagerModule()))
-            .with(new RabbitMQModule(), new RabbitMQEventBusModule(), new TaskSerializationModule());
+            .with(new RabbitMQModule(), new RabbitMQEventBusModule(), new DistributedTaskSerializationModule());
 
     public static void main(String[] args) throws Exception {
         CassandraRabbitMQJamesConfiguration configuration = CassandraRabbitMQJamesConfiguration.builder()
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskManagerModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskManagerModule.java
index ce0333f..d970f5a 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskManagerModule.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskManagerModule.java
@@ -22,6 +22,7 @@ package org.apache.james.modules;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.modules.server.HostnameModule;
+import org.apache.james.modules.server.TaskSerializationModule;
 import org.apache.james.task.TaskManager;
 import org.apache.james.task.eventsourcing.EventSourcingTaskManager;
 import org.apache.james.task.eventsourcing.TaskExecutionDetailsProjection;
@@ -45,6 +46,8 @@ public class DistributedTaskManagerModule extends AbstractModule {
     @Override
     protected void configure() {
         install(new HostnameModule());
+        install(new TaskSerializationModule());
+
         bind(CassandraTaskExecutionDetailsProjection.class).in(Scopes.SINGLETON);
         bind(EventSourcingTaskManager.class).in(Scopes.SINGLETON);
         bind(RabbitMQWorkQueueSupplier.class).in(Scopes.SINGLETON);
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskSerializationModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskSerializationModule.java
new file mode 100644
index 0000000..2cbed70
--- /dev/null
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/DistributedTaskSerializationModule.java
@@ -0,0 +1,107 @@
+/****************************************************************
+ * 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.modules;
+
+import java.util.Set;
+
+import javax.inject.Named;
+
+import org.apache.james.eventsourcing.Event;
+import org.apache.james.eventsourcing.eventstore.cassandra.EventNestedTypes;
+import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO;
+import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
+import org.apache.james.json.DTOConverter;
+import org.apache.james.json.DTOModule;
+import org.apache.james.modules.mailbox.ReIndexingTaskSerializationModule;
+import org.apache.james.server.task.json.JsonTaskSerializer;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.task.eventsourcing.distributed.TasksSerializationModule;
+
+import com.google.common.collect.Sets;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class DistributedTaskSerializationModule extends AbstractModule {
+    @Override
+    protected void configure() {
+        install(new ReIndexingTaskSerializationModule());
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskCreatedSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                                                        DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                                                        DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.CREATED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskStartedSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                         DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                         DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.STARTED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskCancelRequestedSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                                 DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                                 DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.CANCEL_REQUESTED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskCancelledSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                           DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                           DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.CANCELLED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskCompletedSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                           DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                           DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.COMPLETED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskFailedSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                        DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                        DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.FAILED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @ProvidesIntoSet
+    public EventDTOModule<? extends Event, ? extends EventDTO> taskUpdatedSerialization(JsonTaskSerializer jsonTaskSerializer,
+                                                        DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
+                                                        DTOConverter<Task, TaskDTO> taskConverter) {
+        return TasksSerializationModule.UPDATED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
+    }
+
+    @Named(EventNestedTypes.EVENT_NESTED_TYPES_INJECTION_NAME)
+    @Provides
+    public Set<DTOModule<?, ? extends org.apache.james.json.DTO>> eventNestedTypes(Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO>> additionalInformationDTOModules,
+                                                                                   Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules) {
+        return Sets.union(additionalInformationDTOModules, taskDTOModules);
+    }
+}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
deleted file mode 100644
index 5c63753..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
+++ /dev/null
@@ -1,475 +0,0 @@
-/****************************************************************
- * 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.modules;
-
-import java.time.Clock;
-import java.util.Set;
-
-import javax.inject.Named;
-
-import org.apache.james.backends.cassandra.migration.MigrationTask;
-import org.apache.james.backends.cassandra.migration.MigrationTaskAdditionalInformationDTO;
-import org.apache.james.backends.cassandra.migration.MigrationTaskDTO;
-import org.apache.james.eventsourcing.Event;
-import org.apache.james.eventsourcing.eventstore.cassandra.EventNestedTypes;
-import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO;
-import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
-import org.apache.james.json.DTOConverter;
-import org.apache.james.json.DTOModule;
-import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTaskAdditionalInformationDTO;
-import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTaskDTO;
-import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTaskRunner;
-import org.apache.james.mailbox.cassandra.mail.task.RecomputeMailboxCountersService;
-import org.apache.james.mailbox.cassandra.mail.task.RecomputeMailboxCountersTaskAdditionalInformationDTO;
-import org.apache.james.mailbox.cassandra.mail.task.RecomputeMailboxCountersTaskDTO;
-import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesService;
-import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesTaskAdditionalInformationDTO;
-import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesTaskDTO;
-import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesService;
-import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesTaskAdditionalInformationDTO;
-import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesTaskDTO;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService;
-import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTaskAdditionalInformationDTO;
-import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTaskDTO;
-import org.apache.james.queue.api.MailQueueFactory;
-import org.apache.james.queue.api.ManageableMailQueue;
-import org.apache.james.rrt.cassandra.CassandraMappingsSourcesDAO;
-import org.apache.james.rrt.cassandra.migration.MappingsSourcesMigration;
-import org.apache.james.rrt.cassandra.migration.MappingsSourcesMigrationTaskAdditionalInformationDTO;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
-import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
-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.task.eventsourcing.distributed.TasksSerializationModule;
-import org.apache.james.vault.blob.BlobStoreVaultGarbageCollectionTask;
-import org.apache.james.vault.blob.BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO;
-import org.apache.james.vault.blob.BlobStoreVaultGarbageCollectionTaskDTO;
-import org.apache.james.webadmin.data.jmap.MessageFastViewProjectionCorrector;
-import org.apache.james.webadmin.data.jmap.RecomputeAllFastViewProjectionItemsTask;
-import org.apache.james.webadmin.data.jmap.RecomputeAllFastViewTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.data.jmap.RecomputeUserFastViewProjectionItemsTask;
-import org.apache.james.webadmin.data.jmap.RecomputeUserFastViewTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.CassandraMappingsSolveInconsistenciesTask;
-import org.apache.james.webadmin.service.ClearMailQueueTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.ClearMailQueueTaskDTO;
-import org.apache.james.webadmin.service.ClearMailRepositoryTask;
-import org.apache.james.webadmin.service.ClearMailRepositoryTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.ClearMailRepositoryTaskDTO;
-import org.apache.james.webadmin.service.DeleteMailsFromMailQueueTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.DeleteMailsFromMailQueueTaskDTO;
-import org.apache.james.webadmin.service.EventDeadLettersRedeliverAllTaskDTO;
-import org.apache.james.webadmin.service.EventDeadLettersRedeliverGroupTaskDTO;
-import org.apache.james.webadmin.service.EventDeadLettersRedeliverOneTaskDTO;
-import org.apache.james.webadmin.service.EventDeadLettersRedeliverService;
-import org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.ExportService;
-import org.apache.james.webadmin.service.MailboxesExportTask;
-import org.apache.james.webadmin.service.MailboxesExportTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.ReprocessingAllMailsTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.ReprocessingAllMailsTaskDTO;
-import org.apache.james.webadmin.service.ReprocessingOneMailTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.service.ReprocessingOneMailTaskDTO;
-import org.apache.james.webadmin.service.ReprocessingService;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTask;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTaskDTO;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultExportTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultExportTaskDTO;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRestoreTaskAdditionalInformationDTO;
-import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRestoreTaskDTO;
-import org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTask;
-import org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTaskDTO;
-import org.apache.mailbox.tools.indexer.FullReindexingTaskDTO;
-import org.apache.mailbox.tools.indexer.MessageIdReIndexingTask;
-import org.apache.mailbox.tools.indexer.MessageIdReindexingTaskAdditionalInformationDTO;
-import org.apache.mailbox.tools.indexer.MessageIdReindexingTaskDTO;
-import org.apache.mailbox.tools.indexer.ReIndexerPerformer;
-import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO;
-import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTask;
-import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTaskAdditionalInformationDTO;
-import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTaskDTO;
-import org.apache.mailbox.tools.indexer.SingleMessageReindexingTask;
-import org.apache.mailbox.tools.indexer.SingleMessageReindexingTaskAdditionalInformationDTO;
-import org.apache.mailbox.tools.indexer.SingleMessageReindexingTaskDTO;
-import org.apache.mailbox.tools.indexer.UserReindexingTask;
-import org.apache.mailbox.tools.indexer.UserReindexingTaskAdditionalInformationDTO;
-import org.apache.mailbox.tools.indexer.UserReindexingTaskDTO;
-
-import com.google.common.collect.Sets;
-import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
-import com.google.inject.multibindings.ProvidesIntoSet;
-
-public class TaskSerializationModule extends AbstractModule {
-
-    @Provides
-    @Singleton
-    public DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationDTOConverter(Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO>> modules) {
-        return new DTOConverter<>(modules);
-    }
-
-    @Provides
-    @Singleton
-    public DTOConverter<Task, TaskDTO> taskDTOConverter(Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules) {
-        return new DTOConverter<>(taskDTOModules);
-
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskCreatedSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                                                        DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                                                        DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.CREATED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskStartedSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                         DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                         DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.STARTED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskCancelRequestedSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                                 DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                                 DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.CANCEL_REQUESTED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskCancelledSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                           DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                           DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.CANCELLED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskCompletedSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                           DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                           DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.COMPLETED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskFailedSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                        DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                        DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.FAILED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public EventDTOModule<? extends Event, ? extends EventDTO> taskUpdatedSerialization(JsonTaskSerializer jsonTaskSerializer,
-                                                        DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationConverter,
-                                                        DTOConverter<Task, TaskDTO> taskConverter) {
-        return TasksSerializationModule.UPDATED.create(jsonTaskSerializer, additionalInformationConverter, taskConverter);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> blobStoreVaultGarbageCollectionTask(BlobStoreVaultGarbageCollectionTask.Factory factory) {
-        return BlobStoreVaultGarbageCollectionTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> cassandraMappingsSolveInconsistenciesTask(MappingsSourcesMigration migration, CassandraMappingsSourcesDAO dao) {
-        return CassandraMappingsSolveInconsistenciesTask.module(migration, dao);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> clearMailQueueTask(MailQueueFactory<? extends ManageableMailQueue> mailQueueFactory) {
-        return ClearMailQueueTaskDTO.module(mailQueueFactory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeAllJmapPreviewsTask(MessageFastViewProjectionCorrector corrector) {
-        return RecomputeAllFastViewProjectionItemsTask.module(corrector);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeUserJmapPreviewsTask(MessageFastViewProjectionCorrector corrector) {
-        return RecomputeUserFastViewProjectionItemsTask.module(corrector);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> mailboxesExportTask(ExportService exportService) {
-        return MailboxesExportTask.module(exportService);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> clearMailRepositoryTask(ClearMailRepositoryTask.Factory factory) {
-        return ClearMailRepositoryTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> deleteMailsFromMailQueueTask(MailQueueFactory<? extends ManageableMailQueue> mailQueueFactory) {
-        return DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> deletedMessagesVaultDeleteTask(DeletedMessagesVaultDeleteTask.Factory factory) {
-        return DeletedMessagesVaultDeleteTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> deletedMessagesVaultExportTask(DeletedMessagesVaultExportTaskDTO.Factory factory) {
-        return DeletedMessagesVaultExportTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> deletedMessagesVaultRestoreTask(DeletedMessagesVaultRestoreTaskDTO.Factory factory) {
-        return DeletedMessagesVaultRestoreTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> eventDeadLettersRedeliverAllTask(EventDeadLettersRedeliverService service) {
-        return EventDeadLettersRedeliverAllTaskDTO.module(service);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> eventDeadLettersRedeliverGroupTask(EventDeadLettersRedeliverService service) {
-        return EventDeadLettersRedeliverGroupTaskDTO.module(service);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> eventDeadLettersRedeliverOneTask(EventDeadLettersRedeliverService service) {
-        return EventDeadLettersRedeliverOneTaskDTO.module(service);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> fullReindexTask(ReIndexerPerformer performer) {
-        return FullReindexingTaskDTO.module(performer);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> errorRecoveryIndexationTask(ErrorRecoveryIndexationTask.Factory factory) {
-        return ErrorRecoveryIndexationTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> mailboxMergingTask(MailboxMergingTaskRunner taskRunner) {
-        return MailboxMergingTaskDTO.module(taskRunner);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> solveMailboxInconsistenciesTask(SolveMailboxInconsistenciesService service) {
-        return SolveMailboxInconsistenciesTaskDTO.module(service);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeMailboxCountersTask(RecomputeMailboxCountersService service) {
-        return RecomputeMailboxCountersTaskDTO.module(service);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeCurrentQuotasTask(RecomputeCurrentQuotasService service) {
-        return RecomputeCurrentQuotasTaskDTO.module(service);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> messageIdReindexingTask(MessageIdReIndexingTask.Factory factory) {
-        return MessageIdReindexingTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> migrationTask(MigrationTask.Factory factory) {
-        return MigrationTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> reprocessingAllMailsTask(ReprocessingService reprocessingService) {
-        return ReprocessingAllMailsTaskDTO.module(reprocessingService);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> reprocessingOneMailsTask(ReprocessingService reprocessingService) {
-        return ReprocessingOneMailTaskDTO.module(Clock.systemUTC(), reprocessingService);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> solveMessageInconsistenciesTask(SolveMessageInconsistenciesService solveMessageInconsistenciesService) {
-        return SolveMessageInconsistenciesTaskDTO.module(solveMessageInconsistenciesService);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> singleMailboxReindexingTask(SingleMailboxReindexingTask.Factory factory) {
-        return SingleMailboxReindexingTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> singleMessageReindexingTask(SingleMessageReindexingTask.Factory factory) {
-        return SingleMessageReindexingTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public TaskDTOModule<? extends Task, ? extends TaskDTO> userReindexingTask(UserReindexingTask.Factory factory) {
-        return UserReindexingTaskDTO.module(factory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> blobStoreVaultGarbageCollectionAdditionalInformation() {
-        return BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> cassandraMappingsSolveInconsistenciesAdditionalInformation() {
-        return MappingsSourcesMigrationTaskAdditionalInformationDTO.serializationModule(CassandraMappingsSolveInconsistenciesTask.TYPE);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> clearMailQueueAdditionalInformation() {
-        return ClearMailQueueTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> clearMailRepositoryAdditionalInformation() {
-        return ClearMailRepositoryTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deleteMailsFromMailQueueAdditionalInformation() {
-        return DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deletedMessagesVaultDeleteAdditionalInformation(MessageId.Factory factory) {
-        return DeletedMessagesVaultDeleteTaskAdditionalInformationDTO.serializationModule(factory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deletedMessagesVaultExportAdditionalInformation() {
-        return DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deletedMessagesVaultRestoreAdditionalInformation() {
-        return DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> errorRecoveryAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
-        return ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask.serializationModule(mailboxIdFactory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> eventDeadLettersRedeliveryAdditionalInformationForAll() {
-        return EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForAll.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> eventDeadLettersRedeliveryAdditionalInformationForGroup() {
-        return EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> eventDeadLettersRedeliveryAdditionalInformationForOne() {
-        return EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForOne.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> fullReindexAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
-        return ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask.serializationModule(mailboxIdFactory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> mailboxMergingAdditionalInformation() {
-        return MailboxMergingTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> solveMailboxInconsistenciesAdditionalInformation() {
-        return SolveMailboxInconsistenciesTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeMailboxCountersAdditionalInformation() {
-        return RecomputeMailboxCountersTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeCurrentQuotasAdditionalInformation() {
-        return RecomputeCurrentQuotasTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> messageIdReindexingAdditionalInformation(MessageId.Factory messageIdFactory) {
-        return MessageIdReindexingTaskAdditionalInformationDTO.serializationModule(messageIdFactory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> migrationTaskAdditionalInformation() {
-        return MigrationTaskAdditionalInformationDTO.serializationModule();
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> reprocessingAllMailsAdditionalInformation() {
-        return ReprocessingAllMailsTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> reprocessingOneMailAdditionalInformation() {
-        return ReprocessingOneMailTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> singleMailboxReindexingAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
-        return SingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> singleMessageReindexingAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
-        return SingleMessageReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> userReindexingAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
-        return UserReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeAllJmapPreviewsAdditionalInformation() {
-        return RecomputeAllFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeUserJmapPreviewsAdditionalInformation() {
-        return RecomputeUserFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> mailboxesExportAdditionalInformation() {
-        return MailboxesExportTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
-    }
-
-    @ProvidesIntoSet
-    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> solveMessageInconsistenciesAdditionalInformation() {
-        return SolveMessageInconsistenciesTaskAdditionalInformationDTO.MODULE;
-    }
-
-    @Named(EventNestedTypes.EVENT_NESTED_TYPES_INJECTION_NAME)
-    @Provides
-    public Set<DTOModule<?, ? extends org.apache.james.json.DTO>> eventNestedTypes(Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO>> additionalInformationDTOModules,
-                                                                                   Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules) {
-        return Sets.union(additionalInformationDTOModules, taskDTOModules);
-    }
-}
diff --git a/server/container/guice/guice-common/pom.xml b/server/container/guice/guice-common/pom.xml
index e24d450..4d6c6625 100644
--- a/server/container/guice/guice-common/pom.xml
+++ b/server/container/guice/guice-common/pom.xml
@@ -111,6 +111,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-task-json</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-task-memory</artifactId>
         </dependency>
         <dependency>
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskManagerModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskManagerModule.java
index 484ad4c..d07ed8f 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskManagerModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskManagerModule.java
@@ -29,6 +29,8 @@ public class TaskManagerModule extends AbstractModule {
     @Override
     protected void configure() {
         install(new HostnameModule());
+        install(new TaskSerializationModule());
+
         bind(MemoryTaskManager.class).in(Scopes.SINGLETON);
         bind(TaskManager.class).to(MemoryTaskManager.class);
     }
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskSerializationModule.java
similarity index 53%
copy from server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
copy to server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskSerializationModule.java
index 4e09cdb..884b947 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/TaskSerializationModule.java
@@ -19,24 +19,30 @@
 
 package org.apache.james.modules.server;
 
-import org.apache.james.webadmin.routes.UserMailboxesRoutes;
-import org.apache.james.webadmin.service.ExportService;
-import org.apache.james.webadmin.service.MailboxesExportRequestToTask;
-import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+import java.util.Set;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Scopes;
-import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Names;
+import org.apache.james.json.DTOConverter;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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;
 
-public class MailboxesExportRoutesModule extends AbstractModule {
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
 
-    @Override
-    protected void configure() {
-        install(new MailboxesBackupModule());
+public class TaskSerializationModule extends AbstractModule {
+    @Provides
+    @Singleton
+    public DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> additionalInformationDTOConverter(Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO>> modules) {
+        return new DTOConverter<>(modules);
+    }
 
-        bind(ExportService.class).in(Scopes.SINGLETON);
-        Multibinder.newSetBinder(binder(), TaskFromRequestRegistry.TaskRegistration.class, Names.named(UserMailboxesRoutes.USER_MAILBOXES_OPERATIONS_INJECTION_KEY))
-            .addBinding().to(MailboxesExportRequestToTask.class);
+    @Provides
+    @Singleton
+    public DTOConverter<Task, TaskDTO> taskDTOConverter(Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules) {
+        return new DTOConverter<>(taskDTOModules);
     }
 }
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
index 7b5c6de..78c5bba 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
@@ -39,6 +39,8 @@ public class LuceneSearchMailboxModule extends AbstractModule {
 
     @Override
     protected void configure() {
+        install(new ReIndexingTaskSerializationModule());
+
         bind(LuceneMessageSearchIndex.class).in(Scopes.SINGLETON);
         bind(MessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
         bind(ListeningMessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
index 9d26a1d..c6ac334 100644
--- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
+++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
@@ -30,6 +30,7 @@ public class DeletedMessageVaultModule extends AbstractModule {
     @Override
     protected void configure() {
         install(new DeletedMessageVaultRetentionModule());
+        install(new VaultTaskSerializationModule());
 
         bind(BucketNameGenerator.class).in(Scopes.SINGLETON);
         bind(BlobStoreDeletedMessageVault.class).in(Scopes.SINGLETON);
diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/VaultTaskSerializationModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/VaultTaskSerializationModule.java
new file mode 100644
index 0000000..b59c3ce
--- /dev/null
+++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/VaultTaskSerializationModule.java
@@ -0,0 +1,82 @@
+/****************************************************************
+ * 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.modules.vault;
+
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.blob.BlobStoreVaultGarbageCollectionTask;
+import org.apache.james.vault.blob.BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO;
+import org.apache.james.vault.blob.BlobStoreVaultGarbageCollectionTaskDTO;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTask;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTaskDTO;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultExportTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultExportTaskDTO;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRestoreTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRestoreTaskDTO;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class VaultTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> blobStoreVaultGarbageCollectionTask(BlobStoreVaultGarbageCollectionTask.Factory factory) {
+        return BlobStoreVaultGarbageCollectionTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> deletedMessagesVaultDeleteTask(DeletedMessagesVaultDeleteTask.Factory factory) {
+        return DeletedMessagesVaultDeleteTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> deletedMessagesVaultExportTask(DeletedMessagesVaultExportTaskDTO.Factory factory) {
+        return DeletedMessagesVaultExportTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> deletedMessagesVaultRestoreTask(DeletedMessagesVaultRestoreTaskDTO.Factory factory) {
+        return DeletedMessagesVaultRestoreTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> blobStoreVaultGarbageCollectionAdditionalInformation() {
+        return BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deletedMessagesVaultDeleteAdditionalInformation(MessageId.Factory factory) {
+        return DeletedMessagesVaultDeleteTaskAdditionalInformationDTO.serializationModule(factory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deletedMessagesVaultExportAdditionalInformation() {
+        return DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deletedMessagesVaultRestoreAdditionalInformation() {
+        return DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE;
+    }
+}
diff --git a/server/container/guice/mailbox/pom.xml b/server/container/guice/mailbox/pom.xml
index ecc3efa..53b833f 100644
--- a/server/container/guice/mailbox/pom.xml
+++ b/server/container/guice/mailbox/pom.xml
@@ -52,6 +52,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-tools-indexer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-guice-configuration</artifactId>
         </dependency>
         <dependency>
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ReIndexingTaskSerializationModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ReIndexingTaskSerializationModule.java
new file mode 100644
index 0000000..fda0438
--- /dev/null
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ReIndexingTaskSerializationModule.java
@@ -0,0 +1,110 @@
+/****************************************************************
+ * 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.modules.mailbox;
+
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.mailbox.tools.indexer.ErrorRecoveryIndexationTask;
+import org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTaskDTO;
+import org.apache.mailbox.tools.indexer.FullReindexingTaskDTO;
+import org.apache.mailbox.tools.indexer.MessageIdReIndexingTask;
+import org.apache.mailbox.tools.indexer.MessageIdReindexingTaskAdditionalInformationDTO;
+import org.apache.mailbox.tools.indexer.MessageIdReindexingTaskDTO;
+import org.apache.mailbox.tools.indexer.ReIndexerPerformer;
+import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO;
+import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTask;
+import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTaskAdditionalInformationDTO;
+import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTaskDTO;
+import org.apache.mailbox.tools.indexer.SingleMessageReindexingTask;
+import org.apache.mailbox.tools.indexer.SingleMessageReindexingTaskAdditionalInformationDTO;
+import org.apache.mailbox.tools.indexer.SingleMessageReindexingTaskDTO;
+import org.apache.mailbox.tools.indexer.UserReindexingTask;
+import org.apache.mailbox.tools.indexer.UserReindexingTaskAdditionalInformationDTO;
+import org.apache.mailbox.tools.indexer.UserReindexingTaskDTO;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class ReIndexingTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> fullReindexTask(ReIndexerPerformer performer) {
+        return FullReindexingTaskDTO.module(performer);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> errorRecoveryIndexationTask(ErrorRecoveryIndexationTask.Factory factory) {
+        return ErrorRecoveryIndexationTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> messageIdReindexingTask(MessageIdReIndexingTask.Factory factory) {
+        return MessageIdReindexingTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> singleMailboxReindexingTask(SingleMailboxReindexingTask.Factory factory) {
+        return SingleMailboxReindexingTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> singleMessageReindexingTask(SingleMessageReindexingTask.Factory factory) {
+        return SingleMessageReindexingTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> userReindexingTask(UserReindexingTask.Factory factory) {
+        return UserReindexingTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> errorRecoveryAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
+        return ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask.serializationModule(mailboxIdFactory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> fullReindexAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
+        return ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask.serializationModule(mailboxIdFactory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> messageIdReindexingAdditionalInformation(MessageId.Factory messageIdFactory) {
+        return MessageIdReindexingTaskAdditionalInformationDTO.serializationModule(messageIdFactory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> singleMailboxReindexingAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
+        return SingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> singleMessageReindexingAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
+        return SingleMessageReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> userReindexingAdditionalInformation(MailboxId.Factory mailboxIdFactory) {
+        return UserReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
+    }
+}
diff --git a/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTaskSerializationModule.java b/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTaskSerializationModule.java
new file mode 100644
index 0000000..de4fe7b
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTaskSerializationModule.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.modules.server;
+
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.webadmin.data.jmap.MessageFastViewProjectionCorrector;
+import org.apache.james.webadmin.data.jmap.RecomputeAllFastViewProjectionItemsTask;
+import org.apache.james.webadmin.data.jmap.RecomputeAllFastViewTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.data.jmap.RecomputeUserFastViewProjectionItemsTask;
+import org.apache.james.webadmin.data.jmap.RecomputeUserFastViewTaskAdditionalInformationDTO;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class JmapTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeAllJmapPreviewsTask(MessageFastViewProjectionCorrector corrector) {
+        return RecomputeAllFastViewProjectionItemsTask.module(corrector);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeUserJmapPreviewsTask(MessageFastViewProjectionCorrector corrector) {
+        return RecomputeUserFastViewProjectionItemsTask.module(corrector);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeAllJmapPreviewsAdditionalInformation() {
+        return RecomputeAllFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeUserJmapPreviewsAdditionalInformation() {
+        return RecomputeUserFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+}
diff --git a/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTasksModule.java b/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTasksModule.java
index 5b6931e..73b1030 100644
--- a/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTasksModule.java
+++ b/server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTasksModule.java
@@ -32,6 +32,8 @@ import com.google.inject.name.Names;
 public class JmapTasksModule extends AbstractModule {
     @Override
     protected void configure() {
+        install(new JmapTaskSerializationModule());
+
         Multibinder.newSetBinder(binder(), TaskFromRequestRegistry.TaskRegistration.class, Names.named(MailboxesRoutes.ALL_MAILBOXES_TASKS))
             .addBinding().to(RecomputeAllFastViewProjectionItemsRequestToTask.class);
 
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
index 6da9e2c..cc16843 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
@@ -44,6 +44,8 @@ public class MailboxRoutesModule extends AbstractModule {
 
     @Override
     protected void configure() {
+        install(new WebadminMailboxTaskSerializationModule());
+
         Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
         routesMultibinder.addBinding().to(DomainQuotaRoutes.class);
         routesMultibinder.addBinding().to(EventDeadLettersRoutes.class);
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
index 4e09cdb..2a7021f 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
@@ -34,6 +34,7 @@ public class MailboxesExportRoutesModule extends AbstractModule {
     @Override
     protected void configure() {
         install(new MailboxesBackupModule());
+        install(new WebadminMailboxExportTaskSerializationModule());
 
         bind(ExportService.class).in(Scopes.SINGLETON);
         Multibinder.newSetBinder(binder(), TaskFromRequestRegistry.TaskRegistration.class, Names.named(UserMailboxesRoutes.USER_MAILBOXES_OPERATIONS_INJECTION_KEY))
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
similarity index 54%
copy from server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
copy to server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
index 4e09cdb..90f69af 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
@@ -16,27 +16,29 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
 package org.apache.james.modules.server;
 
-import org.apache.james.webadmin.routes.UserMailboxesRoutes;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.webadmin.service.ExportService;
-import org.apache.james.webadmin.service.MailboxesExportRequestToTask;
-import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+import org.apache.james.webadmin.service.MailboxesExportTask;
+import org.apache.james.webadmin.service.MailboxesExportTaskAdditionalInformationDTO;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.Scopes;
-import com.google.inject.multibindings.Multibinder;
-import com.google.inject.name.Names;
-
-public class MailboxesExportRoutesModule extends AbstractModule {
+import com.google.inject.multibindings.ProvidesIntoSet;
 
-    @Override
-    protected void configure() {
-        install(new MailboxesBackupModule());
+public class WebadminMailboxExportTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> mailboxesExportTask(ExportService exportService) {
+        return MailboxesExportTask.module(exportService);
+    }
 
-        bind(ExportService.class).in(Scopes.SINGLETON);
-        Multibinder.newSetBinder(binder(), TaskFromRequestRegistry.TaskRegistration.class, Names.named(UserMailboxesRoutes.USER_MAILBOXES_OPERATIONS_INJECTION_KEY))
-            .addBinding().to(MailboxesExportRequestToTask.class);
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> mailboxesExportAdditionalInformation() {
+        return MailboxesExportTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 }
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
new file mode 100644
index 0000000..b7dbb5b
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
@@ -0,0 +1,79 @@
+/****************************************************************
+ * 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.modules.server;
+
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTaskAdditionalInformationDTO;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTaskDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.webadmin.service.EventDeadLettersRedeliverAllTaskDTO;
+import org.apache.james.webadmin.service.EventDeadLettersRedeliverGroupTaskDTO;
+import org.apache.james.webadmin.service.EventDeadLettersRedeliverOneTaskDTO;
+import org.apache.james.webadmin.service.EventDeadLettersRedeliverService;
+import org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditionalInformationDTO;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class WebadminMailboxTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> eventDeadLettersRedeliverAllTask(EventDeadLettersRedeliverService service) {
+        return EventDeadLettersRedeliverAllTaskDTO.module(service);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> eventDeadLettersRedeliverGroupTask(EventDeadLettersRedeliverService service) {
+        return EventDeadLettersRedeliverGroupTaskDTO.module(service);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> eventDeadLettersRedeliverOneTask(EventDeadLettersRedeliverService service) {
+        return EventDeadLettersRedeliverOneTaskDTO.module(service);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeCurrentQuotasTask(RecomputeCurrentQuotasService service) {
+        return RecomputeCurrentQuotasTaskDTO.module(service);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> eventDeadLettersRedeliveryAdditionalInformationForAll() {
+        return EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForAll.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> eventDeadLettersRedeliveryAdditionalInformationForGroup() {
+        return EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> eventDeadLettersRedeliveryAdditionalInformationForOne() {
+        return EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForOne.MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> recomputeCurrentQuotasAdditionalInformation() {
+        return RecomputeCurrentQuotasTaskAdditionalInformationDTO.MODULE;
+    }
+}
diff --git a/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java b/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
index 127c53a..d8dd186 100644
--- a/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
@@ -28,6 +28,8 @@ import com.google.inject.multibindings.Multibinder;
 public class MailQueueRoutesModule extends AbstractModule {
     @Override
     protected void configure() {
+        install(new MailQueueTaskSerializationModule());
+
         Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
         routesMultibinder.addBinding().to(MailQueueRoutes.class);
     }
diff --git a/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueTaskSerializationModule.java b/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueTaskSerializationModule.java
new file mode 100644
index 0000000..14495ea
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueTaskSerializationModule.java
@@ -0,0 +1,57 @@
+/****************************************************************
+ * 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.modules.server;
+
+import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.webadmin.service.ClearMailQueueTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.service.ClearMailQueueTaskDTO;
+import org.apache.james.webadmin.service.DeleteMailsFromMailQueueTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.service.DeleteMailsFromMailQueueTaskDTO;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class MailQueueTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> clearMailQueueTask(MailQueueFactory<? extends ManageableMailQueue> mailQueueFactory) {
+        return ClearMailQueueTaskDTO.module(mailQueueFactory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> deleteMailsFromMailQueueTask(MailQueueFactory<? extends ManageableMailQueue> mailQueueFactory) {
+        return DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> clearMailQueueAdditionalInformation() {
+        return ClearMailQueueTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> deleteMailsFromMailQueueAdditionalInformation() {
+        return DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE;
+    }
+}
diff --git a/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoriesRoutesModule.java b/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoriesRoutesModule.java
index a4a4706..eb24141 100644
--- a/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoriesRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoriesRoutesModule.java
@@ -28,6 +28,8 @@ import com.google.inject.multibindings.Multibinder;
 public class MailRepositoriesRoutesModule extends AbstractModule {
     @Override
     protected void configure() {
+        install(new MailRepositoryTaskSerializationModule());
+
         Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
         routesMultibinder.addBinding().to(MailRepositoriesRoutes.class);
     }
diff --git a/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoryTaskSerializationModule.java b/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoryTaskSerializationModule.java
new file mode 100644
index 0000000..5f8d4c7
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoryTaskSerializationModule.java
@@ -0,0 +1,71 @@
+/****************************************************************
+ * 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.modules.server;
+
+import java.time.Clock;
+
+import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
+import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+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.webadmin.service.ClearMailRepositoryTask;
+import org.apache.james.webadmin.service.ClearMailRepositoryTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.service.ClearMailRepositoryTaskDTO;
+import org.apache.james.webadmin.service.ReprocessingAllMailsTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.service.ReprocessingAllMailsTaskDTO;
+import org.apache.james.webadmin.service.ReprocessingOneMailTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.service.ReprocessingOneMailTaskDTO;
+import org.apache.james.webadmin.service.ReprocessingService;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+
+public class MailRepositoryTaskSerializationModule extends AbstractModule {
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> clearMailRepositoryTask(ClearMailRepositoryTask.Factory factory) {
+        return ClearMailRepositoryTaskDTO.module(factory);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> reprocessingAllMailsTask(ReprocessingService reprocessingService) {
+        return ReprocessingAllMailsTaskDTO.module(reprocessingService);
+    }
+
+    @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> reprocessingOneMailsTask(ReprocessingService reprocessingService) {
+        return ReprocessingOneMailTaskDTO.module(Clock.systemUTC(), reprocessingService);
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> clearMailRepositoryAdditionalInformation() {
+        return ClearMailRepositoryTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> reprocessingAllMailsAdditionalInformation() {
+        return ReprocessingAllMailsTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends  AdditionalInformationDTO> reprocessingOneMailAdditionalInformation() {
+        return ReprocessingOneMailTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+}


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