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 76ffc2106c1f4ed4c5275d91e04bcfbb8464d048
Author: Benoit Tellier <[email protected]>
AuthorDate: Mon Jun 1 16:09:49 2020 +0700

    JAMES-3194 Leverage named injection to uncouple storage and presentation 
DTOs for additional tasks
---
 .../org/apache/james/CassandraJamesServerMain.java |  2 +
 ...assandraConsistencyTaskSerializationModule.java | 39 ++++++++++++
 .../java/org/apache/james/JPAJamesServerMain.java  |  4 +-
 .../vault/VaultTaskSerializationModule.java        | 28 +++++++++
 .../server/JmapTaskSerializationModule.java        | 14 +++++
 .../WebAdminReIndexingTaskSerializationModule.java | 73 ++++++++++++++++++++++
 ...badminMailboxExportTaskSerializationModule.java |  8 +++
 .../WebadminMailboxTaskSerializationModule.java    | 26 ++++++++
 .../server/MailQueueTaskSerializationModule.java   | 15 +++++
 .../MailRepositoryTaskSerializationModule.java     | 21 +++++++
 .../james/modules/server/TaskRoutesModule.java     | 19 ++++++
 .../james/webadmin/dto/DTOModuleInjections.java}   | 19 +-----
 .../apache/james/webadmin/routes/TasksRoutes.java  |  5 +-
 .../WebAdminReprocessingContextInformationDTO.java | 29 ++++++---
 ...lboxReindexingTaskAdditionalInformationDTO.java | 26 ++++----
 ...UserReindexingTaskAdditionalInformationDTO.java | 21 ++++---
 ...AdminReprocessingContextInformationDTOTest.java | 23 +++++--
 .../WebAdminSingleMailboxReprocessingDTOTest.java  | 15 ++++-
 .../dto/WebAdminUserReprocessingDTOTest.java       | 17 +++--
 19 files changed, 346 insertions(+), 58 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 167bb2e..2c2e189 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
@@ -69,6 +69,7 @@ import org.apache.james.modules.server.ReIndexingModule;
 import org.apache.james.modules.server.SieveRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
 import org.apache.james.modules.server.TaskManagerModule;
+import 
org.apache.james.modules.server.WebAdminReIndexingTaskSerializationModule;
 import org.apache.james.modules.server.WebAdminServerModule;
 import org.apache.james.modules.spamassassin.SpamAssassinListenerModule;
 import org.apache.james.modules.vault.DeletedMessageVaultRoutesModule;
@@ -100,6 +101,7 @@ public class CassandraJamesServerMain implements 
JamesServerMain {
         new SieveRoutesModule(),
         new SwaggerRoutesModule(),
         new WebAdminServerModule(),
+        new WebAdminReIndexingTaskSerializationModule(),
         new MessagesRoutesModule());
 
     public static final Module PROTOCOLS = Modules.combine(
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
index 2b565c2..7c1546b 100644
--- 
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
@@ -42,10 +42,13 @@ 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.dto.DTOModuleInjections;
+import 
org.apache.james.webadmin.dto.WebAdminMigrationTaskAdditionalInformationDTO;
 import 
org.apache.james.webadmin.service.CassandraMappingsSolveInconsistenciesTask;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class CassandraConsistencyTaskSerializationModule extends 
AbstractModule {
     @ProvidesIntoSet
@@ -83,28 +86,64 @@ public class CassandraConsistencyTaskSerializationModule 
extends AbstractModule
         return 
MappingsSourcesMigrationTaskAdditionalInformationDTO.serializationModule(CassandraMappingsSolveInconsistenciesTask.TYPE);
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminCassandraMappingsSolveInconsistenciesAdditionalInformation() {
+        return 
MappingsSourcesMigrationTaskAdditionalInformationDTO.serializationModule(CassandraMappingsSolveInconsistenciesTask.TYPE);
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> mailboxMergingAdditionalInformation() {
         return MailboxMergingTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminMailboxMergingAdditionalInformation() {
+        return MailboxMergingTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> solveMailboxInconsistenciesAdditionalInformation() {
         return SolveMailboxInconsistenciesTaskAdditionalInformationDTO.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminSolveMailboxInconsistenciesAdditionalInformation() {
+        return SolveMailboxInconsistenciesTaskAdditionalInformationDTO.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> recomputeMailboxCountersAdditionalInformation() {
         return RecomputeMailboxCountersTaskAdditionalInformationDTO.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminRecomputeMailboxCountersAdditionalInformation() {
+        return RecomputeMailboxCountersTaskAdditionalInformationDTO.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> migrationTaskAdditionalInformation() {
         return MigrationTaskAdditionalInformationDTO.serializationModule();
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminMigrationTaskAdditionalInformation() {
+        return 
WebAdminMigrationTaskAdditionalInformationDTO.serializationModule();
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> solveMessageInconsistenciesAdditionalInformation() {
         return SolveMessageInconsistenciesTaskAdditionalInformationDTO.MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminSolveMessageInconsistenciesAdditionalInformation() {
+        return SolveMessageInconsistenciesTaskAdditionalInformationDTO.MODULE;
+    }
 }
diff --git 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
index 6e742c5..5895e24 100644
--- 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -47,6 +47,7 @@ import org.apache.james.modules.server.ReIndexingModule;
 import org.apache.james.modules.server.SieveRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
 import org.apache.james.modules.server.TaskManagerModule;
+import 
org.apache.james.modules.server.WebAdminReIndexingTaskSerializationModule;
 import org.apache.james.modules.server.WebAdminServerModule;
 import org.apache.james.modules.spamassassin.SpamAssassinListenerModule;
 import org.apache.james.server.core.configuration.Configuration;
@@ -65,7 +66,8 @@ public class JPAJamesServerMain implements JamesServerMain {
         new MailRepositoriesRoutesModule(),
         new ReIndexingModule(),
         new SwaggerRoutesModule(),
-        new SieveRoutesModule());
+        new SieveRoutesModule(),
+        new WebAdminReIndexingTaskSerializationModule());
 
     private static final Module PROTOCOLS = Modules.combine(
         new IMAPServerModule(),
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
index b59c3ce..cc7340e 100644
--- 
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
@@ -28,6 +28,7 @@ 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.dto.DTOModuleInjections;
 import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTask;
 import 
org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTaskAdditionalInformationDTO;
 import 
org.apache.james.webadmin.vault.routes.DeletedMessagesVaultDeleteTaskDTO;
@@ -35,9 +36,12 @@ import 
org.apache.james.webadmin.vault.routes.DeletedMessagesVaultExportTaskAddi
 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.james.webadmin.vault.routes.WebAdminDeletedMessagesVaultDeleteTaskAdditionalInformationDTO;
+import 
org.apache.james.webadmin.vault.routes.WebAdminDeletedMessagesVaultRestoreTaskAdditionalInformationDTO;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class VaultTaskSerializationModule extends AbstractModule {
     @ProvidesIntoSet
@@ -65,18 +69,42 @@ public class VaultTaskSerializationModule extends 
AbstractModule {
         return 
BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminBlobStoreVaultGarbageCollectionAdditionalInformation() {
+        return 
BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
deletedMessagesVaultDeleteAdditionalInformation(MessageId.Factory factory) {
         return 
DeletedMessagesVaultDeleteTaskAdditionalInformationDTO.serializationModule(factory);
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminDeletedMessagesVaultDeleteAdditionalInformation(MessageId.Factory 
factory) {
+        return 
WebAdminDeletedMessagesVaultDeleteTaskAdditionalInformationDTO.serializationModule(factory);
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> deletedMessagesVaultExportAdditionalInformation() {
         return DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminDeletedMessagesVaultExportAdditionalInformation() {
+        return DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> deletedMessagesVaultRestoreAdditionalInformation() {
         return DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminDeletedMessagesVaultRestoreAdditionalInformation() {
+        return 
WebAdminDeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE;
+    }
 }
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
index de4fe7b..2c45797 100644
--- 
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
@@ -29,9 +29,11 @@ import 
org.apache.james.webadmin.data.jmap.RecomputeAllFastViewProjectionItemsTa
 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.dto.DTOModuleInjections;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class JmapTaskSerializationModule extends AbstractModule {
     @ProvidesIntoSet
@@ -49,8 +51,20 @@ public class JmapTaskSerializationModule extends 
AbstractModule {
         return 
RecomputeAllFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminRecomputeAllJmapPreviewsAdditionalInformation() {
+        return 
RecomputeAllFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> recomputeUserJmapPreviewsAdditionalInformation() {
         return 
RecomputeUserFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminRecomputeUserJmapPreviewsAdditionalInformation() {
+        return 
RecomputeUserFastViewTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
 }
diff --git 
a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebAdminReIndexingTaskSerializationModule.java
 
b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebAdminReIndexingTaskSerializationModule.java
new file mode 100644
index 0000000..819ffd0
--- /dev/null
+++ 
b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebAdminReIndexingTaskSerializationModule.java
@@ -0,0 +1,73 @@
+/****************************************************************
+ * 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.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.task.TaskExecutionDetails;
+import org.apache.james.webadmin.dto.DTOModuleInjections;
+import org.apache.james.webadmin.dto.WebAdminReprocessingContextInformationDTO;
+import 
org.apache.james.webadmin.dto.WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO;
+import 
org.apache.james.webadmin.dto.WebAdminUserReindexingTaskAdditionalInformationDTO;
+import 
org.apache.mailbox.tools.indexer.MessageIdReindexingTaskAdditionalInformationDTO;
+import 
org.apache.mailbox.tools.indexer.SingleMessageReindexingTaskAdditionalInformationDTO;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
+
+public class WebAdminReIndexingTaskSerializationModule extends AbstractModule {
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> errorRecoveryAdditionalInformation(MailboxId.Factory 
mailboxIdFactory) {
+        return 
WebAdminReprocessingContextInformationDTO.WebAdminErrorRecoveryIndexationDTO.serializationModule(mailboxIdFactory);
+    }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> fullReindexAdditionalInformation(MailboxId.Factory 
mailboxIdFactory) {
+        return 
WebAdminReprocessingContextInformationDTO.WebAdminFullIndexationDTO.serializationModule(mailboxIdFactory);
+    }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
messageIdReindexingAdditionalInformation(MessageId.Factory messageIdFactory) {
+        return 
MessageIdReindexingTaskAdditionalInformationDTO.serializationModule(messageIdFactory);
+    }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
singleMailboxReindexingAdditionalInformation(MailboxId.Factory 
mailboxIdFactory) {
+        return 
WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
+    }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
singleMessageReindexingAdditionalInformation(MailboxId.Factory 
mailboxIdFactory) {
+        return 
SingleMessageReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
+    }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> userReindexingAdditionalInformation(MailboxId.Factory 
mailboxIdFactory) {
+        return 
WebAdminUserReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory);
+    }
+}
diff --git 
a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
 
b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
index 90f69af..7afff0b 100644
--- 
a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
+++ 
b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
@@ -24,12 +24,14 @@ 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.dto.DTOModuleInjections;
 import org.apache.james.webadmin.service.ExportService;
 import org.apache.james.webadmin.service.MailboxesExportTask;
 import 
org.apache.james.webadmin.service.MailboxesExportTaskAdditionalInformationDTO;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class WebadminMailboxExportTaskSerializationModule extends 
AbstractModule {
     @ProvidesIntoSet
@@ -41,4 +43,10 @@ public class WebadminMailboxExportTaskSerializationModule 
extends AbstractModule
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> mailboxesExportAdditionalInformation() {
         return 
MailboxesExportTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminMailboxesExportAdditionalInformation() {
+        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
index b7dbb5b..dd5ffbe 100644
--- 
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
@@ -27,6 +27,7 @@ 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.dto.DTOModuleInjections;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliverAllTaskDTO;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliverGroupTaskDTO;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliverOneTaskDTO;
@@ -35,6 +36,7 @@ import 
org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditiona
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class WebadminMailboxTaskSerializationModule extends AbstractModule {
     @ProvidesIntoSet
@@ -62,18 +64,42 @@ public class WebadminMailboxTaskSerializationModule extends 
AbstractModule {
         return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForAll.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminEventDeadLettersRedeliveryAdditionalInformationForAll() {
+        return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForAll.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
eventDeadLettersRedeliveryAdditionalInformationForGroup() {
         return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminEventDeadLettersRedeliveryAdditionalInformationForGroup() {
+        return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
eventDeadLettersRedeliveryAdditionalInformationForOne() {
         return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForOne.MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminEventDeadLettersRedeliveryAdditionalInformationForOne() {
+        return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForOne.MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> recomputeCurrentQuotasAdditionalInformation() {
         return RecomputeCurrentQuotasTaskAdditionalInformationDTO.MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminRecomputeCurrentQuotasAdditionalInformation() 
{
+        return RecomputeCurrentQuotasTaskAdditionalInformationDTO.MODULE;
+    }
 }
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
index 14495ea..75c220d 100644
--- 
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
@@ -26,13 +26,16 @@ 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.dto.DTOModuleInjections;
 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 
org.apache.james.webadmin.service.WebAdminDeleteMailsFromMailQueueTaskAdditionalInformationDTO;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class MailQueueTaskSerializationModule extends AbstractModule {
     @ProvidesIntoSet
@@ -50,8 +53,20 @@ public class MailQueueTaskSerializationModule extends 
AbstractModule {
         return ClearMailQueueTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminClearMailQueueAdditionalInformation() {
+        return ClearMailQueueTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> deleteMailsFromMailQueueAdditionalInformation() {
         return DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
webAdminDeleteMailsFromMailQueueAdditionalInformation() {
+        return 
WebAdminDeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE;
+    }
 }
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
index 5f8d4c7..1af8fe9 100644
--- 
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
@@ -26,6 +26,7 @@ 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.dto.DTOModuleInjections;
 import org.apache.james.webadmin.service.ClearMailRepositoryTask;
 import 
org.apache.james.webadmin.service.ClearMailRepositoryTaskAdditionalInformationDTO;
 import org.apache.james.webadmin.service.ClearMailRepositoryTaskDTO;
@@ -34,9 +35,11 @@ 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.service.WebAdminClearMailRepositoryTaskAdditionalInformationDTO;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.google.inject.name.Named;
 
 public class MailRepositoryTaskSerializationModule extends AbstractModule {
     @ProvidesIntoSet
@@ -59,13 +62,31 @@ public class MailRepositoryTaskSerializationModule extends 
AbstractModule {
         return 
ClearMailRepositoryTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminClearMailRepositoryAdditionalInformation() {
+        return 
WebAdminClearMailRepositoryTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> reprocessingAllMailsAdditionalInformation() {
         return 
ReprocessingAllMailsTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminReprocessingAllMailsAdditionalInformation() {
+        return 
ReprocessingAllMailsTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> reprocessingOneMailAdditionalInformation() {
         return 
ReprocessingOneMailTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminReprocessingOneMailAdditionalInformation() {
+        return 
ReprocessingOneMailTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
 }
diff --git 
a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
 
b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
index 390bb17..cd5a10f 100644
--- 
a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
+++ 
b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
@@ -19,12 +19,22 @@
 
 package org.apache.james.modules.server;
 
+import java.util.Set;
+
+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.task.TaskExecutionDetails;
 import org.apache.james.webadmin.Routes;
+import org.apache.james.webadmin.dto.DTOModuleInjections;
 import org.apache.james.webadmin.routes.TasksRoutes;
 
 import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
 import com.google.inject.Scopes;
+import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Named;
 
 public class TaskRoutesModule extends AbstractModule {
     @Override
@@ -34,4 +44,13 @@ public class TaskRoutesModule extends AbstractModule {
         Multibinder<Routes> routesMultibinder = 
Multibinder.newSetBinder(binder(), Routes.class);
         routesMultibinder.addBinding().to(TasksRoutes.class);
     }
+
+    @Named(DTOModuleInjections.WEBADMIN_DTO)
+    @Provides
+    @Singleton
+    public DTOConverter<TaskExecutionDetails.AdditionalInformation, 
AdditionalInformationDTO> additionalInformationDTOConverter(
+            @Named(DTOModuleInjections.WEBADMIN_DTO) 
Set<AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends 
AdditionalInformationDTO>> modules) {
+
+        return new DTOConverter<>(modules);
+    }
 }
diff --git 
a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
 
b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/DTOModuleInjections.java
similarity index 67%
copy from 
server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
copy to 
server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/DTOModuleInjections.java
index 390bb17..2f4055c 100644
--- 
a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
+++ 
b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/DTOModuleInjections.java
@@ -17,21 +17,8 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.modules.server;
+package org.apache.james.webadmin.dto;
 
-import org.apache.james.webadmin.Routes;
-import org.apache.james.webadmin.routes.TasksRoutes;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Scopes;
-import com.google.inject.multibindings.Multibinder;
-
-public class TaskRoutesModule extends AbstractModule {
-    @Override
-    protected void configure() {
-        bind(TasksRoutes.class).in(Scopes.SINGLETON);
-
-        Multibinder<Routes> routesMultibinder = 
Multibinder.newSetBinder(binder(), Routes.class);
-        routesMultibinder.addBinding().to(TasksRoutes.class);
-    }
+public interface DTOModuleInjections {
+    String WEBADMIN_DTO = "webadmin-dto";
 }
diff --git 
a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
 
b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
index 9316ad7..35ad151 100644
--- 
a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 import java.util.function.Supplier;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -39,6 +40,7 @@ import org.apache.james.task.TaskManager;
 import org.apache.james.task.TaskNotFoundException;
 import org.apache.james.util.DurationParser;
 import org.apache.james.webadmin.Routes;
+import org.apache.james.webadmin.dto.DTOModuleInjections;
 import org.apache.james.webadmin.dto.ExecutionDetailsDto;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.JsonTransformer;
@@ -69,7 +71,8 @@ public class TasksRoutes implements Routes {
     private final DTOConverter<TaskExecutionDetails.AdditionalInformation, 
AdditionalInformationDTO> additionalInformationDTOConverter;
 
     @Inject
-    public TasksRoutes(TaskManager taskManager, JsonTransformer 
jsonTransformer, DTOConverter<TaskExecutionDetails.AdditionalInformation, 
AdditionalInformationDTO> additionalInformationDTOConverter) {
+    public TasksRoutes(TaskManager taskManager, JsonTransformer 
jsonTransformer,
+                       @Named(DTOModuleInjections.WEBADMIN_DTO) 
DTOConverter<TaskExecutionDetails.AdditionalInformation, 
AdditionalInformationDTO> additionalInformationDTOConverter) {
         this.taskManager = taskManager;
         this.jsonTransformer = jsonTransformer;
         this.additionalInformationDTOConverter = 
additionalInformationDTOConverter;
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
index 0c67a50..1b43b3e 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
@@ -19,9 +19,11 @@
 package org.apache.james.webadmin.dto;
 
 import java.time.Instant;
+import java.util.List;
 
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.json.DTOModule;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
@@ -29,6 +31,8 @@ import 
org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTask;
 import org.apache.mailbox.tools.indexer.FullReindexingTask;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO;
 
+import com.github.steveash.guavate.Guavate;
+
 public class WebAdminReprocessingContextInformationDTO implements 
AdditionalInformationDTO {
     public static class WebAdminErrorRecoveryIndexationDTO extends 
WebAdminReprocessingContextInformationDTO {
         public static 
AdditionalInformationDTOModule<ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask,
 WebAdminErrorRecoveryIndexationDTO> serializationModule(MailboxId.Factory 
mailboxIdFactory) {
@@ -41,14 +45,14 @@ public class WebAdminReprocessingContextInformationDTO 
implements AdditionalInfo
                     type,
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
-                    
SerializableReIndexingExecutionFailures.from(details.failures()),
+                    details.failures(),
                     details.timestamp()))
                 
.typeName(ErrorRecoveryIndexationTask.PREVIOUS_FAILURES_INDEXING.asString())
                 .withFactory(AdditionalInformationDTOModule::new);
         }
 
         WebAdminErrorRecoveryIndexationDTO(String type, int 
successfullyReprocessedMailCount, int failedReprocessedMailCount,
-                                           
SerializableReIndexingExecutionFailures failures, Instant timestamp) {
+                                           ReIndexingExecutionFailures 
failures, Instant timestamp) {
             super(type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, timestamp);
         }
     }
@@ -64,14 +68,14 @@ public class WebAdminReprocessingContextInformationDTO 
implements AdditionalInfo
                     type,
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
-                    
SerializableReIndexingExecutionFailures.from(details.failures()),
+                    details.failures(),
                     details.timestamp()))
                 .typeName(FullReindexingTask.FULL_RE_INDEXING.asString())
                 .withFactory(AdditionalInformationDTOModule::new);
         }
 
         WebAdminFullIndexationDTO(String type, int 
successfullyReprocessedMailCount, int failedReprocessedMailCount,
-                                  SerializableReIndexingExecutionFailures 
failures, Instant timestamp) {
+                                  ReIndexingExecutionFailures failures, 
Instant timestamp) {
             super(type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, timestamp);
         }
 
@@ -80,16 +84,21 @@ public class WebAdminReprocessingContextInformationDTO 
implements AdditionalInfo
     protected final String type;
     protected final int successfullyReprocessedMailCount;
     protected final int failedReprocessedMailCount;
-    protected final SerializableReIndexingExecutionFailures failures;
+    protected final SerializableReIndexingExecutionFailures messageFailures;
+    private final List<String> mailboxFailures;
     protected final Instant timestamp;
 
 
     WebAdminReprocessingContextInformationDTO(String type, int 
successfullyReprocessedMailCount, int failedReprocessedMailCount,
-                                              
SerializableReIndexingExecutionFailures failures, Instant timestamp) {
+                                              ReIndexingExecutionFailures 
failures,
+                                              Instant timestamp) {
         this.type = type;
         this.successfullyReprocessedMailCount = 
successfullyReprocessedMailCount;
         this.failedReprocessedMailCount = failedReprocessedMailCount;
-        this.failures = failures;
+        this.messageFailures = 
SerializableReIndexingExecutionFailures.from(failures);
+        this.mailboxFailures = failures.mailboxFailures().stream()
+            .map(MailboxId::serialize)
+            .collect(Guavate.toImmutableList());
         this.timestamp = timestamp;
     }
 
@@ -102,7 +111,11 @@ public class WebAdminReprocessingContextInformationDTO 
implements AdditionalInfo
     }
 
     public SerializableReIndexingExecutionFailures getFailures() {
-        return failures;
+        return messageFailures;
+    }
+
+    public List<String> getMailboxFailures() {
+        return mailboxFailures;
     }
 
     public Instant getTimestamp() {
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
index 6574e7a..199177c 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
@@ -19,16 +19,17 @@
 package org.apache.james.webadmin.dto;
 
 import java.time.Instant;
+import java.util.List;
 
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.json.DTOModule;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTask;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO 
implements AdditionalInformationDTO {
 
@@ -43,7 +44,7 @@ public class 
WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO impleme
                 details.getMailboxId(),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
-                
SerializableReIndexingExecutionFailures.from(details.failures()),
+                details.failures(),
                 details.timestamp()))
             
.typeName(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING.asString())
             .withFactory(AdditionalInformationDTOModule::new);
@@ -53,18 +54,15 @@ public class 
WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO impleme
     private final String mailboxId;
 
     @JsonCreator
-    private 
WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO(@JsonProperty("type")
 String type,
-                                                                        
@JsonProperty("mailboxId") String mailboxId,
-                                                                        
@JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
-                                                                        
@JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
-                                                                        
@JsonProperty("failures") SerializableReIndexingExecutionFailures failures,
-                                                                        
@JsonProperty("timestamp") Instant timestamp) {
+    private WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO(String 
type,
+                                                                        String 
mailboxId,
+                                                                        int 
successfullyReprocessedMailCount,
+                                                                        int 
failedReprocessedMailCount,
+                                                                        
ReIndexingExecutionFailures failures,
+                                                                        
Instant timestamp) {
         this.mailboxId = mailboxId;
         this.reprocessingContextInformationDTO = new 
WebAdminReprocessingContextInformationDTO(
-            type,
-            successfullyReprocessedMailCount,
-            failedReprocessedMailCount, failures,
-            timestamp);
+            type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, timestamp);
     }
 
     @Override
@@ -91,4 +89,8 @@ public class 
WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO impleme
     public SerializableReIndexingExecutionFailures getFailures() {
         return reprocessingContextInformationDTO.getFailures();
     }
+
+    public List<String> getMailboxFailures() {
+        return reprocessingContextInformationDTO.getMailboxFailures();
+    }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
index 9d5c17a..7991a04 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
@@ -19,16 +19,17 @@
 package org.apache.james.webadmin.dto;
 
 import java.time.Instant;
+import java.util.List;
 
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.json.DTOModule;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 import org.apache.mailbox.tools.indexer.UserReindexingTask;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class WebAdminUserReindexingTaskAdditionalInformationDTO implements 
AdditionalInformationDTO {
 
@@ -43,7 +44,7 @@ public class 
WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
                 details.getUsername(),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
-                
SerializableReIndexingExecutionFailures.from(details.failures()),
+                details.failures(),
                 details.timestamp()))
             .typeName(UserReindexingTask.USER_RE_INDEXING.asString())
             .withFactory(AdditionalInformationDTOModule::new);
@@ -53,12 +54,12 @@ public class 
WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
     private final String username;
 
     @JsonCreator
-    private 
WebAdminUserReindexingTaskAdditionalInformationDTO(@JsonProperty("type") String 
type,
-                                                               
@JsonProperty("username") String username,
-                                                               
@JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
-                                                               
@JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
-                                                               
@JsonProperty("failures") SerializableReIndexingExecutionFailures failures,
-                                                               
@JsonProperty("timestamp") Instant timestamp) {
+    private WebAdminUserReindexingTaskAdditionalInformationDTO(String type,
+                                                               String username,
+                                                               int 
successfullyReprocessedMailCount,
+                                                               int 
failedReprocessedMailCount,
+                                                               
ReIndexingExecutionFailures failures,
+                                                               Instant 
timestamp) {
         this.username = username;
         this.reprocessingContextInformationDTO = new 
WebAdminReprocessingContextInformationDTO(
             type,
@@ -90,4 +91,8 @@ public class 
WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
     public SerializableReIndexingExecutionFailures getFailures() {
         return reprocessingContextInformationDTO.getFailures();
     }
+
+    public List<String> getMailboxFailures() {
+        return reprocessingContextInformationDTO.getMailboxFailures();
+    }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
index c8d25af..cf0e6da 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
@@ -19,7 +19,6 @@
 package org.apache.james.webadmin.dto;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.time.Instant;
@@ -29,6 +28,7 @@ import org.apache.james.json.JsonGenericSerializer;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO;
 import org.junit.jupiter.api.Test;
@@ -39,8 +39,20 @@ import com.google.common.collect.ImmutableList;
 class WebAdminReprocessingContextInformationDTOTest {
     private static final Instant TIMESTAMP = 
Instant.parse("2018-11-13T12:00:55Z");
 
-    private final String serializedErrorRecoveryAdditionalInformation = 
"{\"type\":\"error-recovery-indexation\",\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]},\"timestamp\":\"2018-11-13T12:00:55Z\"}";
-    private final String serializedFullAdditionalInformation = 
"{\"type\":\"full-reindexing\",\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]},\"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedErrorRecoveryAdditionalInformation = "{" +
+        "  \"type\":\"error-recovery-indexation\"," +
+        "  \"successfullyReprocessedMailCount\":42," +
+        "  \"failedReprocessedMailCount\":2," +
+        "  \"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
+        "  \"mailboxFailures\":[\"3\", \"4\"]," +
+        "  \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedFullAdditionalInformation = "{" +
+        "  \"type\":\"full-reindexing\"," +
+        "  \"successfullyReprocessedMailCount\":42," +
+        "  \"failedReprocessedMailCount\":2," +
+        "  \"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
+        "  \"mailboxFailures\":[\"3\", \"4\"]," +
+        "  \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
@@ -48,8 +60,9 @@ class WebAdminReprocessingContextInformationDTOTest {
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
     private final ReIndexingExecutionFailures.ReIndexingFailure 
indexingFailure2 = new 
ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2);
-    private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures 
= ImmutableList.of(indexingFailure, indexingFailure2);
-    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(failures);
+    private final List<ReIndexingExecutionFailures.ReIndexingFailure> 
messageFailures = ImmutableList.of(indexingFailure, indexingFailure2);
+    private final ImmutableList<MailboxId> mailboxFailures = 
ImmutableList.of(TestId.of(3), TestId.of(4));
+    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(messageFailures, mailboxFailures);
 
     @Test
     void shouldSerializeErrorRecoveryAdditionalInformation() throws Exception {
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
index 30bd411..02f4795 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
@@ -28,6 +28,7 @@ import org.apache.james.json.JsonGenericSerializer;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO;
 import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTask;
@@ -39,7 +40,14 @@ import com.google.common.collect.ImmutableList;
 class WebAdminSingleMailboxReprocessingDTOTest {
     private static final Instant TIMESTAMP = 
Instant.parse("2018-11-13T12:00:55Z");
 
-    private final String serializedAdditionalInformation = 
"{\"type\":\"mailbox-reindexing\",\"mailboxId\":\"1\",\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]},\"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{" +
+        "  \"type\":\"mailbox-reindexing\"," +
+        "  \"mailboxId\":\"1\"," +
+        "  \"successfullyReprocessedMailCount\":42," +
+        "  \"failedReprocessedMailCount\":2," +
+        "  \"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
+        "  \"mailboxFailures\":[\"3\", \"4\"]," +
+        "  \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
@@ -47,8 +55,9 @@ class WebAdminSingleMailboxReprocessingDTOTest {
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
     private final ReIndexingExecutionFailures.ReIndexingFailure 
indexingFailure2 = new 
ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2);
-    private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures 
= ImmutableList.of(indexingFailure, indexingFailure2);
-    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(failures);
+    private final List<ReIndexingExecutionFailures.ReIndexingFailure> 
messageFailures = ImmutableList.of(indexingFailure, indexingFailure2);
+    private final ImmutableList<MailboxId> mailboxFailures = 
ImmutableList.of(TestId.of(3), TestId.of(4));
+    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(messageFailures, mailboxFailures);
 
     @Test
     void shouldSerializeAdditionalInformation() throws Exception {
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
index 9ea55a7..48acc11 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
@@ -29,18 +29,26 @@ import org.apache.james.json.JsonGenericSerializer;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTask;
 import org.apache.mailbox.tools.indexer.UserReindexingTask;
 import org.junit.jupiter.api.Test;
 
 import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
 import com.google.common.collect.ImmutableList;
 
+import net.javacrumbs.jsonunit.core.Option;
+
 class WebAdminUserReprocessingDTOTest {
     private static final Instant TIMESTAMP = 
Instant.parse("2018-11-13T12:00:55Z");
 
-    private final String serializedAdditionalInformation = 
"{\"type\":\"user-reindexing\",\"username\":\"bob\",\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]},\"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{" +
+        "  \"type\":\"user-reindexing\",\"username\":\"bob\"," +
+        "  \"successfullyReprocessedMailCount\":42," +
+        "  \"failedReprocessedMailCount\":2," +
+        "  \"failures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
+        "  \"mailboxFailures\":[\"3\", \"4\"]," +
+        "  \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
@@ -48,8 +56,9 @@ class WebAdminUserReprocessingDTOTest {
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
     private final ReIndexingExecutionFailures.ReIndexingFailure 
indexingFailure2 = new 
ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2);
-    private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures 
= ImmutableList.of(indexingFailure, indexingFailure2);
-    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(failures);
+    private final List<ReIndexingExecutionFailures.ReIndexingFailure> 
messageFailures = ImmutableList.of(indexingFailure, indexingFailure2);
+    private final ImmutableList<MailboxId> mailboxFailures = 
ImmutableList.of(TestId.of(3), TestId.of(4));
+    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(messageFailures, mailboxFailures);
 
     @Test
     void shouldSerializeAdditionalInformation() throws Exception {


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

Reply via email to