From 4beb2af88d3e1378d19bbaec1859c4c59acb6252 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 23 Aug 2016 16:58:15 +0200 Subject: SONAR-7968 Create client for list_definitions WS --- .../server/settings/ws/ListDefinitionsAction.java | 76 +++++++++++++++------- .../org/sonar/server/settings/ws/SettingsWs.java | 4 +- .../settings/ws/SettingsWsComponentParameters.java | 39 ++--------- .../org/sonar/server/settings/ws/ValuesAction.java | 4 +- .../settings/ws/ListDefinitionsActionTest.java | 3 +- 5 files changed, 64 insertions(+), 62 deletions(-) (limited to 'server') diff --git a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ListDefinitionsAction.java b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ListDefinitionsAction.java index db554d019fe..714a383e636 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ListDefinitionsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ListDefinitionsAction.java @@ -20,7 +20,7 @@ package org.sonar.server.settings.ws; import java.util.List; -import javax.annotation.CheckForNull; +import java.util.Optional; import org.sonar.api.PropertyType; import org.sonar.api.config.PropertyDefinition; import org.sonar.api.config.PropertyDefinitions; @@ -28,33 +28,42 @@ import org.sonar.api.config.PropertyFieldDefinition; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; +import org.sonar.api.web.UserRole; +import org.sonar.core.permission.GlobalPermissions; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.component.ComponentDto; +import org.sonar.server.component.ComponentFinder; +import org.sonar.server.user.UserSession; import org.sonarqube.ws.Settings; import org.sonarqube.ws.Settings.ListDefinitionsWsResponse; +import org.sonarqube.ws.client.setting.ListDefinitionsRequest; import static org.elasticsearch.common.Strings.isNullOrEmpty; -import static org.sonar.server.settings.ws.SettingsWsComponentParameters.PARAM_COMPONENT_ID; -import static org.sonar.server.settings.ws.SettingsWsComponentParameters.PARAM_COMPONENT_KEY; +import static org.sonar.server.component.ComponentFinder.ParamNames.ID_AND_KEY; import static org.sonar.server.settings.ws.SettingsWsComponentParameters.addComponentParameters; import static org.sonar.server.ws.WsUtils.writeProtobuf; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.ACTION_LIST_DEFINITIONS; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.PARAM_COMPONENT_ID; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.PARAM_COMPONENT_KEY; public class ListDefinitionsAction implements SettingsWsAction { private final DbClient dbClient; - private final SettingsWsComponentParameters settingsWsComponentParameters; + private final ComponentFinder componentFinder; + private final UserSession userSession; private final PropertyDefinitions propertyDefinitions; - public ListDefinitionsAction(DbClient dbClient, SettingsWsComponentParameters settingsWsComponentParameters, PropertyDefinitions propertyDefinitions) { + public ListDefinitionsAction(DbClient dbClient, ComponentFinder componentFinder, UserSession userSession, PropertyDefinitions propertyDefinitions) { this.dbClient = dbClient; - this.settingsWsComponentParameters = settingsWsComponentParameters; + this.componentFinder = componentFinder; + this.userSession = userSession; this.propertyDefinitions = propertyDefinitions; } @Override public void define(WebService.NewController context) { - WebService.NewAction action = context.createAction("list_definitions") + WebService.NewAction action = context.createAction(ACTION_LIST_DEFINITIONS) .setDescription(String.format("List settings definitions.
" + "Either '%s' or '%s' can be provided, not both.
" + "Requires one of the following permissions: " + @@ -65,7 +74,6 @@ public class ListDefinitionsAction implements SettingsWsAction { .setResponseExample(getClass().getResource("list_definitions-example.json")) .setSince("6.1") .setHandler(this); - addComponentParameters(action); } @@ -75,16 +83,52 @@ public class ListDefinitionsAction implements SettingsWsAction { } private ListDefinitionsWsResponse doHandle(Request request) { - String qualifier = getQualifier(request); + ListDefinitionsRequest wsRequest = toWsRequest(request); + Optional qualifier = getQualifier(wsRequest); ListDefinitionsWsResponse.Builder wsResponse = ListDefinitionsWsResponse.newBuilder(); propertyDefinitions.getAll().stream() - .filter(definition -> qualifier == null ? definition.global() : definition.qualifiers().contains(qualifier)) + .filter(definition -> qualifier.isPresent() ? definition.qualifiers().contains(qualifier.get()) : definition.global()) .filter(definition -> !definition.type().equals(PropertyType.LICENSE)) .forEach(definition -> addDefinition(definition, wsResponse)); return wsResponse.build(); } + private static ListDefinitionsRequest toWsRequest(Request request) { + return ListDefinitionsRequest.builder() + .setComponentId(request.param(PARAM_COMPONENT_ID)) + .setComponentKey(request.param(PARAM_COMPONENT_KEY)) + .build(); + } + + private Optional getQualifier(ListDefinitionsRequest wsRequest) { + DbSession dbSession = dbClient.openSession(false); + try { + Optional component = getComponent(dbSession, wsRequest); + checkAdminPermission(component); + return component.isPresent() ? Optional.of(component.get().qualifier()) : Optional.empty(); + } finally { + dbClient.closeSession(dbSession); + } + } + + private Optional getComponent(DbSession dbSession, ListDefinitionsRequest wsRequest) { + String componentId = wsRequest.getComponentId(); + String componentKey = wsRequest.getComponentKey(); + if (componentId != null || componentKey != null) { + return Optional.of(componentFinder.getByUuidOrKey(dbSession, componentId, componentKey, ID_AND_KEY)); + } + return Optional.empty(); + } + + private void checkAdminPermission(Optional component) { + if (component.isPresent()) { + userSession.checkComponentUuidPermission(UserRole.ADMIN, component.get().uuid()); + } else { + userSession.checkPermission(GlobalPermissions.SYSTEM_ADMIN); + } + } + private void addDefinition(PropertyDefinition definition, ListDefinitionsWsResponse.Builder wsResponse) { String key = definition.key(); Settings.Definition.Builder builder = wsResponse.addDefinitionsBuilder() @@ -133,16 +177,4 @@ public class ListDefinitionsAction implements SettingsWsAction { .build(); } - @CheckForNull - private String getQualifier(Request request) { - DbSession dbSession = dbClient.openSession(false); - try { - ComponentDto component = settingsWsComponentParameters.getComponent(dbSession, request); - settingsWsComponentParameters.checkAdminPermission(component); - return component == null ? null : component.qualifier(); - } finally { - dbClient.closeSession(dbSession); - } - } - } diff --git a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWs.java b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWs.java index 6ed340e0884..546e8c7db8e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWs.java @@ -21,6 +21,8 @@ package org.sonar.server.settings.ws; import org.sonar.api.server.ws.WebService; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.CONTROLLER_SETTINGS; + public class SettingsWs implements WebService { private final SettingsWsAction[] actions; @@ -31,7 +33,7 @@ public class SettingsWs implements WebService { @Override public void define(Context context) { - NewController controller = context.createController("api/settings") + NewController controller = context.createController(CONTROLLER_SETTINGS) .setDescription("Manage settings.") .setSince("6.1"); for (SettingsWsAction action : actions) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWsComponentParameters.java b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWsComponentParameters.java index 40a3e5fb9e1..6251ce9cbbf 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWsComponentParameters.java +++ b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWsComponentParameters.java @@ -19,32 +19,17 @@ */ package org.sonar.server.settings.ws; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.WebService; -import org.sonar.api.web.UserRole; -import org.sonar.core.permission.GlobalPermissions; -import org.sonar.db.DbSession; -import org.sonar.db.component.ComponentDto; -import org.sonar.server.component.ComponentFinder; -import org.sonar.server.user.UserSession; import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01; -import static org.sonar.server.component.ComponentFinder.ParamNames.ID_AND_KEY; import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.PARAM_COMPONENT_ID; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.PARAM_COMPONENT_KEY; public class SettingsWsComponentParameters { - static final String PARAM_COMPONENT_ID = "componentId"; - static final String PARAM_COMPONENT_KEY = "componentKey"; - - private final ComponentFinder componentFinder; - private final UserSession userSession; - - public SettingsWsComponentParameters(ComponentFinder componentFinder, UserSession userSession) { - this.componentFinder = componentFinder; - this.userSession = userSession; + private SettingsWsComponentParameters() { + // Only static methods } static void addComponentParameters(WebService.NewAction action) { @@ -57,20 +42,4 @@ public class SettingsWsComponentParameters { .setExampleValue(KEY_PROJECT_EXAMPLE_001); } - @CheckForNull - ComponentDto getComponent(DbSession dbSession, Request request) { - if (request.hasParam(PARAM_COMPONENT_ID) || request.hasParam(PARAM_COMPONENT_KEY)) { - return componentFinder.getByUuidOrKey(dbSession, request.param(PARAM_COMPONENT_ID), request.param(PARAM_COMPONENT_KEY), ID_AND_KEY); - } - return null; - } - - void checkAdminPermission(@Nullable ComponentDto component) { - if (component == null) { - userSession.checkPermission(GlobalPermissions.SYSTEM_ADMIN); - } else { - userSession.checkComponentUuidPermission(UserRole.ADMIN, component.uuid()); - } - } - } diff --git a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ValuesAction.java b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ValuesAction.java index 3ca00245a23..79f65c935ab 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ValuesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/settings/ws/ValuesAction.java @@ -43,10 +43,10 @@ import org.sonarqube.ws.Settings.ValuesWsResponse; import static org.elasticsearch.common.Strings.isNullOrEmpty; import static org.sonar.api.PropertyType.PROPERTY_SET; -import static org.sonar.server.settings.ws.SettingsWsComponentParameters.PARAM_COMPONENT_ID; -import static org.sonar.server.settings.ws.SettingsWsComponentParameters.PARAM_COMPONENT_KEY; import static org.sonar.server.settings.ws.SettingsWsComponentParameters.addComponentParameters; import static org.sonar.server.ws.WsUtils.writeProtobuf; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.PARAM_COMPONENT_ID; +import static org.sonarqube.ws.client.setting.SettingsWsParameters.PARAM_COMPONENT_KEY; public class ValuesAction implements SettingsWsAction { diff --git a/server/sonar-server/src/test/java/org/sonar/server/settings/ws/ListDefinitionsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/settings/ws/ListDefinitionsActionTest.java index c670f788ad5..b49851d2517 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/settings/ws/ListDefinitionsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/settings/ws/ListDefinitionsActionTest.java @@ -79,9 +79,8 @@ public class ListDefinitionsActionTest { ComponentDto project; PropertyDefinitions propertyDefinitions = new PropertyDefinitions(); - SettingsWsComponentParameters settingsWsComponentParameters = new SettingsWsComponentParameters(new ComponentFinder(dbClient), userSession); - WsActionTester ws = new WsActionTester(new ListDefinitionsAction(dbClient, settingsWsComponentParameters, propertyDefinitions)); + WsActionTester ws = new WsActionTester(new ListDefinitionsAction(dbClient, new ComponentFinder(dbClient), userSession, propertyDefinitions)); @Before public void setUp() throws Exception { -- cgit v1.2.3