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 81fbf90179f5dddc0c58e6ebd9a4640e10fb80b1 Author: Benoit Tellier <[email protected]> AuthorDate: Thu Dec 12 08:16:21 2019 +0100 JAMES-3006 Use Task factory in cassandra alias projection routes --- .../apache/james/webadmin/dto/ActionMappings.java | 36 ---------------- .../webadmin/routes/CassandraMappingsRoutes.java | 22 +++++----- .../webadmin/service/CassandraMappingsService.java | 12 +----- .../james/webadmin/dto/ActionMappingsTest.java | 49 ---------------------- .../routes/CassandraMappingsRoutesTest.java | 4 +- 5 files changed, 13 insertions(+), 110 deletions(-) diff --git a/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/dto/ActionMappings.java b/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/dto/ActionMappings.java deleted file mode 100644 index 7ca05b1..0000000 --- a/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/dto/ActionMappings.java +++ /dev/null @@ -1,36 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.webadmin.dto; - -import java.util.Arrays; - -import com.google.common.base.Preconditions; - -public enum ActionMappings { - SolveInconsistencies; - - public static ActionMappings parse(String action) { - Preconditions.checkArgument(action != null, "'action' url parameter is mandatory"); - return Arrays.stream(ActionMappings.values()) - .filter(element -> element.toString().equalsIgnoreCase(action)) - .findAny() - .orElseThrow(() -> new IllegalArgumentException("'" + action + "' is not a valid action query parameter")); - } -} \ No newline at end of file diff --git a/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/routes/CassandraMappingsRoutes.java b/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/routes/CassandraMappingsRoutes.java index 15c3d4e..5a4aa8d 100644 --- a/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/routes/CassandraMappingsRoutes.java +++ b/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/routes/CassandraMappingsRoutes.java @@ -24,14 +24,13 @@ import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; -import org.apache.james.task.Task; -import org.apache.james.task.TaskId; import org.apache.james.task.TaskManager; import org.apache.james.webadmin.Constants; import org.apache.james.webadmin.Routes; -import org.apache.james.webadmin.dto.ActionMappings; -import org.apache.james.webadmin.dto.TaskIdDto; import org.apache.james.webadmin.service.CassandraMappingsService; +import org.apache.james.webadmin.tasks.TaskFactory; +import org.apache.james.webadmin.tasks.TaskIdDto; +import org.apache.james.webadmin.tasks.TaskRegistrationKey; import org.apache.james.webadmin.utils.JsonTransformer; import org.eclipse.jetty.http.HttpStatus; @@ -42,8 +41,7 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ResponseHeader; -import spark.Request; -import spark.Response; +import spark.Route; import spark.Service; @Api(tags = "Cassandra Mappings Operations") @@ -51,6 +49,7 @@ import spark.Service; @Produces(Constants.JSON_CONTENT_TYPE) public class CassandraMappingsRoutes implements Routes { public static final String ROOT_PATH = "cassandra/mappings"; + private static final TaskRegistrationKey SOLVE_INCONSISTENCIES = TaskRegistrationKey.of("SolveInconsistencies"); private final CassandraMappingsService cassandraMappingsService; private final TaskManager taskManager; @@ -73,7 +72,7 @@ public class CassandraMappingsRoutes implements Routes { @Override public void define(Service service) { - service.post(ROOT_PATH, this::performActionOnMappings, jsonTransformer); + service.post(ROOT_PATH, performActionOnMappings(), jsonTransformer); } @POST @@ -97,10 +96,9 @@ public class CassandraMappingsRoutes implements Routes { @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = INVALID_ACTION_ARGUMENT_REQUEST), @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = ACTION_REQUEST_CAN_NOT_BE_DONE) }) - public TaskIdDto performActionOnMappings(Request request, Response response) { - ActionMappings action = ActionMappings.parse(request.queryParams("action")); - Task task = cassandraMappingsService.createActionTask(action); - TaskId taskId = taskManager.submit(task); - return TaskIdDto.respond(response, taskId); + public Route performActionOnMappings() { + return TaskFactory.builder() + .register(SOLVE_INCONSISTENCIES, request -> cassandraMappingsService.solveMappingsSourcesInconsistencies()) + .buildAsRoute(taskManager); } } diff --git a/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsService.java b/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsService.java index e1733ef..5edcaf9 100644 --- a/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsService.java +++ b/server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsService.java @@ -24,7 +24,6 @@ import javax.inject.Inject; import org.apache.james.rrt.cassandra.CassandraMappingsSourcesDAO; import org.apache.james.rrt.cassandra.migration.MappingsSourcesMigration; import org.apache.james.task.Task; -import org.apache.james.webadmin.dto.ActionMappings; public class CassandraMappingsService { private final MappingsSourcesMigration mappingsSourcesMigration; @@ -37,16 +36,7 @@ public class CassandraMappingsService { this.cassandraMappingsSourcesDAO = cassandraMappingsSourcesDAO; } - public Task createActionTask(ActionMappings action) { - switch (action) { - case SolveInconsistencies: - return solveMappingsSourcesInconsistencies(); - default: - throw new IllegalArgumentException(action + " is not a supported action"); - } - } - - private Task solveMappingsSourcesInconsistencies() { + public Task solveMappingsSourcesInconsistencies() { return new CassandraMappingsSolveInconsistenciesTask(mappingsSourcesMigration, cassandraMappingsSourcesDAO); } } diff --git a/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/dto/ActionMappingsTest.java b/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/dto/ActionMappingsTest.java deleted file mode 100644 index 3cfe691..0000000 --- a/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/dto/ActionMappingsTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.webadmin.dto; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -import org.junit.jupiter.api.Test; - -class ActionMappingsTest { - private static final String ACTION = "SolveInconsistencies"; - - @Test - void parseShouldSucceedWithCorrectActionMappingsArgument() { - assertThat(ActionMappings.parse(ACTION)).isEqualTo(ActionMappings.SolveInconsistencies); - } - - @Test - void parseShouldFailWithIncorrectActionMappingsArgument() { - assertThatThrownBy(() -> ActionMappings.parse("incorrect-action")) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("'incorrect-action' is not a valid action query parameter"); - } - - @Test - void parseShouldFailWithMissingActionMappingsArgument() { - assertThatThrownBy(() -> ActionMappings.parse(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("'action' url parameter is mandatory"); - } - -} diff --git a/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/routes/CassandraMappingsRoutesTest.java b/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/routes/CassandraMappingsRoutesTest.java index 22a0a22..8215091 100644 --- a/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/routes/CassandraMappingsRoutesTest.java +++ b/server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/routes/CassandraMappingsRoutesTest.java @@ -140,7 +140,7 @@ class CassandraMappingsRoutesTest { .body("statusCode", is(400)) .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType())) .body("message", is("Invalid arguments supplied in the user request")) - .body("details", is("'invalid-action' is not a valid action query parameter")); + .body("details", is("Invalid value supplied for 'action': invalid-action. Supported values are [SolveInconsistencies]")); } @Test @@ -152,7 +152,7 @@ class CassandraMappingsRoutesTest { .body("statusCode", is(400)) .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType())) .body("message", is("Invalid arguments supplied in the user request")) - .body("details", is("'action' url parameter is mandatory")); + .body("details", is("'action' query parameter is compulsory. Supported values are [SolveInconsistencies]")); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
