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 bt...@apache.org on 2019/12/17 01:55:35 UTC
[james-project] 14/24: JAMES-3006 Use Task factory in mail
repositories routes
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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org