This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit e61f8f879d57d2e9ddf057080f7705029fbb3532
Author: Benoit Tellier <[email protected]>
AuthorDate: Thu Dec 12 08:12:42 2019 +0100

    JAMES-3006 Use Task factory in mail repositories routes
---
 .../webadmin/routes/MailRepositoriesRoutes.java    | 71 +++++++++++-----------
 .../routes/MailRepositoriesRoutesTest.java         | 12 ++--
 2 files changed, 43 insertions(+), 40 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
 
b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index 4bd881f..4b3f123 100644
--- 
a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -43,7 +43,6 @@ import org.apache.james.mailrepository.api.MailRepositoryPath;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.task.Task;
-import org.apache.james.task.TaskId;
 import org.apache.james.task.TaskManager;
 import org.apache.james.util.streams.Limit;
 import org.apache.james.util.streams.Offset;
@@ -53,11 +52,14 @@ import 
org.apache.james.webadmin.dto.ExtendedMailRepositoryResponse;
 import org.apache.james.webadmin.dto.InaccessibleFieldException;
 import org.apache.james.webadmin.dto.MailDto;
 import org.apache.james.webadmin.dto.MailDto.AdditionalField;
-import org.apache.james.webadmin.dto.TaskIdDto;
 import org.apache.james.webadmin.service.MailRepositoryStoreService;
 import org.apache.james.webadmin.service.ReprocessingAllMailsTask;
 import org.apache.james.webadmin.service.ReprocessingOneMailTask;
 import org.apache.james.webadmin.service.ReprocessingService;
+import org.apache.james.webadmin.tasks.TaskFactory;
+import org.apache.james.webadmin.tasks.TaskGenerator;
+import org.apache.james.webadmin.tasks.TaskIdDto;
+import org.apache.james.webadmin.tasks.TaskRegistrationKey;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
 import org.apache.james.webadmin.utils.JsonTransformer;
@@ -85,6 +87,8 @@ import spark.Service;
 public class MailRepositoriesRoutes implements Routes {
 
     public static final String MAIL_REPOSITORIES = "mailRepositories";
+    private static final TaskRegistrationKey REPROCESS_ACTION = 
TaskRegistrationKey.of("reprocess");
+    private static final String ACTION_PARAMETER = "action";
 
     private final JsonTransformer jsonTransformer;
     private final MailRepositoryStoreService repositoryStoreService;
@@ -389,12 +393,10 @@ public class MailRepositoriesRoutes implements Routes {
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request 
- unknown action")
     })
     public void defineDeleteAll() {
-        service.delete(MAIL_REPOSITORIES + "/:encodedPath/mails", (request, 
response) -> {
+        TaskGenerator taskGenerator = request -> {
             MailRepositoryPath path = decodedRepositoryPath(request);
             try {
-                Task task = 
repositoryStoreService.createClearMailRepositoryTask(path);
-                TaskId taskId = taskManager.submit(task);
-                return TaskIdDto.respond(response, taskId);
+                return 
repositoryStoreService.createClearMailRepositoryTask(path);
             } catch (MailRepositoryStore.MailRepositoryStoreException | 
MessagingException e) {
                 throw ErrorResponder.builder()
                     .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
@@ -403,7 +405,8 @@ public class MailRepositoriesRoutes implements Routes {
                     .message("Error while deleting all mails")
                     .haltError();
             }
-        }, jsonTransformer);
+        };
+        service.delete(MAIL_REPOSITORIES + "/:encodedPath/mails", 
taskGenerator.asRoute(taskManager), jsonTransformer);
     }
 
     @PATCH
@@ -441,18 +444,17 @@ public class MailRepositoriesRoutes implements Routes {
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request 
- unknown action")
     })
     public void defineReprocessAll() {
-        service.patch(MAIL_REPOSITORIES + "/:encodedPath/mails", (request, 
response) -> {
-            Task task = toAllMailReprocessingTask(request);
-            TaskId taskId = taskManager.submit(task);
-            return TaskIdDto.respond(response, taskId);
-        }, jsonTransformer);
+        service.patch(MAIL_REPOSITORIES + "/:encodedPath/mails",
+            TaskFactory.builder()
+                .register(REPROCESS_ACTION, this::reprocessAll)
+                .buildAsRoute(taskManager),
+            jsonTransformer);
     }
 
-    private Task toAllMailReprocessingTask(Request request) throws 
UnsupportedEncodingException, MailRepositoryStore.MailRepositoryStoreException, 
MessagingException {
+    private Task reprocessAll(Request request) throws 
UnsupportedEncodingException, MailRepositoryStore.MailRepositoryStoreException {
         MailRepositoryPath path = decodedRepositoryPath(request);
-        enforceActionParameter(request);
-        Optional<String> targetProcessor = 
Optional.ofNullable(request.queryParams("processor"));
-        String targetQueue = 
Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
+        Optional<String> targetProcessor = parseTargetProcessor(request);
+        String targetQueue = parseTargetQueue(request);
 
         Long repositorySize = repositoryStoreService.size(path).orElse(0L);
         return new ReprocessingAllMailsTask(reprocessingService, 
repositorySize, path, targetQueue, targetProcessor);
@@ -493,32 +495,21 @@ public class MailRepositoriesRoutes implements Routes {
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request 
- unknown action")
     })
     public void defineReprocessOne() {
-        service.patch(MAIL_REPOSITORIES + "/:encodedPath/mails/:key", 
(request, response) -> {
-            Task task = toOneMailReprocessingTask(request);
-            TaskId taskId = taskManager.submit(task);
-            return TaskIdDto.respond(response, taskId);
-        }, jsonTransformer);
+        service.patch(MAIL_REPOSITORIES + "/:encodedPath/mails/:key",
+            TaskFactory.builder()
+                .register(REPROCESS_ACTION, this::reprocessOne)
+                .buildAsRoute(taskManager),
+            jsonTransformer);
     }
 
-    private Task toOneMailReprocessingTask(Request request) throws 
UnsupportedEncodingException {
+    private Task reprocessOne(Request request) throws 
UnsupportedEncodingException {
         MailRepositoryPath path = decodedRepositoryPath(request);
         MailKey key = new MailKey(request.params("key"));
-        enforceActionParameter(request);
-        Optional<String> targetProcessor = 
Optional.ofNullable(request.queryParams("processor"));
-        String targetQueue = 
Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
 
-        return new ReprocessingOneMailTask(reprocessingService, path, 
targetQueue, key, targetProcessor, Clock.systemUTC());
-    }
+        Optional<String> targetProcessor = parseTargetProcessor(request);
+        String targetQueue = parseTargetQueue(request);
 
-    private void enforceActionParameter(Request request) {
-        String action = request.queryParams("action");
-        if (!"reprocess".equals(action)) {
-            throw ErrorResponder.builder()
-                .statusCode(HttpStatus.BAD_REQUEST_400)
-                .type(ErrorType.INVALID_ARGUMENT)
-                .message("action query parameter is mandatory. The only 
supported value is `reprocess`")
-                .haltError();
-        }
+        return new ReprocessingOneMailTask(reprocessingService, path, 
targetQueue, key, targetProcessor, Clock.systemUTC());
     }
 
     private Set<AdditionalField> extractAdditionalFields(String 
additionalFieldsParam) throws IllegalArgumentException {
@@ -532,6 +523,14 @@ public class MailRepositoriesRoutes implements Routes {
             .collect(Guavate.toImmutableSet());
     }
 
+    private Optional<String> parseTargetProcessor(Request request) {
+        return Optional.ofNullable(request.queryParams("processor"));
+    }
+
+    private String parseTargetQueue(Request request) {
+        return 
Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
+    }
+
     private MailRepositoryPath decodedRepositoryPath(Request request) throws 
UnsupportedEncodingException {
         return MailRepositoryPath.fromEncoded(request.params("encodedPath"));
     }
diff --git 
a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 00aeef4..2568146 100644
--- 
a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -1075,7 +1075,8 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
             .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
-            .body("message", is("action query parameter is mandatory. The only 
supported value is `reprocess`"));
+            .body("message", is("Invalid arguments supplied in the user 
request"))
+            .body("details", is("Invalid value supplied for 'action': invalid. 
Supported values are [reprocess]"));
     }
 
     @Test
@@ -1086,7 +1087,8 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
             .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
-            .body("message", is("action query parameter is mandatory. The only 
supported value is `reprocess`"));
+            .body("message", is("Invalid arguments supplied in the user 
request"))
+            .body("details", is("'action' query parameter is compulsory. 
Supported values are [reprocess]"));
     }
 
     @Test
@@ -1433,7 +1435,8 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
             .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
-            .body("message", is("action query parameter is mandatory. The only 
supported value is `reprocess`"));
+            .body("message", is("Invalid arguments supplied in the user 
request"))
+            .body("details", is("Invalid value supplied for 'action': invalid. 
Supported values are [reprocess]"));
     }
 
     @Test
@@ -1449,7 +1452,8 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
             .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
-            .body("message", is("action query parameter is mandatory. The only 
supported value is `reprocess`"));
+            .body("message", is("Invalid arguments supplied in the user 
request"))
+            .body("details", is("'action' query parameter is compulsory. 
Supported values are [reprocess]"));
     }
 
     @Test


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

Reply via email to