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]
