aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-08-23 16:58:15 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-08-25 11:29:40 +0200
commit4beb2af88d3e1378d19bbaec1859c4c59acb6252 (patch)
tree4f822bfda5c65183721ed3b3ec612a455713ec90 /server
parentf4d9bd4f139e9300dc08adceb370b660b1ec220b (diff)
downloadsonarqube-4beb2af88d3e1378d19bbaec1859c4c59acb6252.tar.gz
sonarqube-4beb2af88d3e1378d19bbaec1859c4c59acb6252.zip
SONAR-7968 Create client for list_definitions WS
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/settings/ws/ListDefinitionsAction.java76
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWs.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/settings/ws/SettingsWsComponentParameters.java39
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/settings/ws/ValuesAction.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/settings/ws/ListDefinitionsActionTest.java3
5 files changed, 64 insertions, 62 deletions
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.<br>" +
"Either '%s' or '%s' can be provided, not both.<br> " +
"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<String> 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<String> getQualifier(ListDefinitionsRequest wsRequest) {
+ DbSession dbSession = dbClient.openSession(false);
+ try {
+ Optional<ComponentDto> component = getComponent(dbSession, wsRequest);
+ checkAdminPermission(component);
+ return component.isPresent() ? Optional.of(component.get().qualifier()) : Optional.empty();
+ } finally {
+ dbClient.closeSession(dbSession);
+ }
+ }
+
+ private Optional<ComponentDto> 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<ComponentDto> 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 {