Skip to content

Commit

Permalink
SONAR-6947 Create and use CreateTemplateWsRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
teryk committed Nov 17, 2015
1 parent 31f6f53 commit f4d2557
Show file tree
Hide file tree
Showing 11 changed files with 133 additions and 25 deletions.
Expand Up @@ -33,7 +33,7 @@
import static java.lang.String.format; import static java.lang.String.format;
import static org.apache.commons.lang.StringUtils.isBlank; import static org.apache.commons.lang.StringUtils.isBlank;
import static org.sonar.api.security.DefaultGroups.isAnyone; import static org.sonar.api.security.DefaultGroups.isAnyone;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PATTERN; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_QUALIFIER; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_QUALIFIER;
import static org.sonar.server.ws.WsUtils.checkRequest; import static org.sonar.server.ws.WsUtils.checkRequest;
Expand Down Expand Up @@ -87,7 +87,7 @@ public static void validateProjectPattern(@Nullable String projectPattern) {
try { try {
Pattern.compile(projectPattern); Pattern.compile(projectPattern);
} catch (PatternSyntaxException e) { } catch (PatternSyntaxException e) {
throw new BadRequestException(format("The '%s' parameter must be a valid Java regular expression. '%s' was passed", PARAM_PATTERN, projectPattern)); throw new BadRequestException(format("The '%s' parameter must be a valid Java regular expression. '%s' was passed", PARAM_PROJECT_KEY_PATTERN, projectPattern));
} }
} }
} }
Expand Up @@ -112,7 +112,7 @@ private static void createTemplateNameParameter(NewAction action) {
} }


public static void createTemplateProjectKeyPatternParameter(NewAction action) { public static void createTemplateProjectKeyPatternParameter(NewAction action) {
action.createParam(org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PATTERN) action.createParam(org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN)
.setDescription("Project key pattern. Must be a valid Java regular expression") .setDescription("Project key pattern. Must be a valid Java regular expression")
.setExampleValue(".*\\.finance\\..*"); .setExampleValue(".*\\.finance\\..*");
} }
Expand Down
Expand Up @@ -29,23 +29,24 @@
import org.sonar.db.permission.PermissionTemplateDto; import org.sonar.db.permission.PermissionTemplateDto;
import org.sonar.server.permission.ws.PermissionsWsAction; import org.sonar.server.permission.ws.PermissionsWsAction;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonarqube.ws.WsPermissions.CreateTemplateWsResponse;
import org.sonarqube.ws.WsPermissions.PermissionTemplate; import org.sonarqube.ws.WsPermissions.PermissionTemplate;
import org.sonarqube.ws.WsPermissions.WsCreatePermissionTemplateResponse; import org.sonarqube.ws.client.permission.CreateTemplateWsRequest;


import static java.lang.String.format; import static java.lang.String.format;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PATTERN;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateDescriptionParameter;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateProjectKeyPatternParameter;
import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_WITH_SAME_NAME; import static org.sonar.server.permission.ws.PermissionRequestValidator.MSG_TEMPLATE_WITH_SAME_NAME;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPattern; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateProjectPattern;
import static org.sonar.server.permission.ws.PermissionRequestValidator.validateTemplateNameFormat; import static org.sonar.server.permission.ws.PermissionRequestValidator.validateTemplateNameFormat;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateDescriptionParameter;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateProjectKeyPatternParameter;
import static org.sonar.server.permission.ws.template.PermissionTemplateDtoBuilder.create; import static org.sonar.server.permission.ws.template.PermissionTemplateDtoBuilder.create;
import static org.sonar.server.permission.ws.template.PermissionTemplateDtoToPermissionTemplateResponse.toPermissionTemplateResponse; import static org.sonar.server.permission.ws.template.PermissionTemplateDtoToPermissionTemplateResponse.toPermissionTemplateResponse;
import static org.sonar.server.ws.WsUtils.checkRequest; import static org.sonar.server.ws.WsUtils.checkRequest;
import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonar.server.ws.WsUtils.writeProtobuf;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;


public class CreateTemplateAction implements PermissionsWsAction { public class CreateTemplateAction implements PermissionsWsAction {
private final DbClient dbClient; private final DbClient dbClient;
Expand Down Expand Up @@ -78,10 +79,15 @@ public void define(WebService.NewController context) {
} }


@Override @Override
public void handle(Request wsRequest, Response wsResponse) throws Exception { public void handle(Request request, Response response) throws Exception {
String name = wsRequest.mandatoryParam(PARAM_NAME); CreateTemplateWsResponse createTemplateWsResponse = doHandle(toCreateTemplateWsRequest(request));
String description = wsRequest.param(PARAM_DESCRIPTION); writeProtobuf(createTemplateWsResponse, request, response);
String projectPattern = wsRequest.param(PARAM_PATTERN); }

private CreateTemplateWsResponse doHandle(CreateTemplateWsRequest request) {
String name = request.getName();
String description = request.getDescription();
String projectPattern = request.getProjectKeyPattern();


DbSession dbSession = dbClient.openSession(false); DbSession dbSession = dbClient.openSession(false);
try { try {
Expand All @@ -91,13 +97,19 @@ public void handle(Request wsRequest, Response wsResponse) throws Exception {


PermissionTemplateDto permissionTemplate = insertTemplate(dbSession, name, description, projectPattern); PermissionTemplateDto permissionTemplate = insertTemplate(dbSession, name, description, projectPattern);


WsCreatePermissionTemplateResponse response = buildResponse(permissionTemplate); return buildResponse(permissionTemplate);
writeProtobuf(response, wsRequest, wsResponse);
} finally { } finally {
dbClient.closeSession(dbSession); dbClient.closeSession(dbSession);
} }
} }


private static CreateTemplateWsRequest toCreateTemplateWsRequest(Request request) {
return new CreateTemplateWsRequest()
.setName(request.mandatoryParam(PARAM_NAME))
.setDescription(request.param(PARAM_DESCRIPTION))
.setProjectKeyPattern(request.param(PARAM_PROJECT_KEY_PATTERN));
}

private void validateTemplateNameForCreation(DbSession dbSession, String name) { private void validateTemplateNameForCreation(DbSession dbSession, String name) {
validateTemplateNameFormat(name); validateTemplateNameFormat(name);


Expand All @@ -115,8 +127,8 @@ private PermissionTemplateDto insertTemplate(DbSession dbSession, String name, S
return template; return template;
} }


private static WsCreatePermissionTemplateResponse buildResponse(PermissionTemplateDto permissionTemplateDto) { private static CreateTemplateWsResponse buildResponse(PermissionTemplateDto permissionTemplateDto) {
PermissionTemplate permissionTemplateBuilder = toPermissionTemplateResponse(permissionTemplateDto); PermissionTemplate permissionTemplateBuilder = toPermissionTemplateResponse(permissionTemplateDto);
return WsCreatePermissionTemplateResponse.newBuilder().setPermissionTemplate(permissionTemplateBuilder).build(); return CreateTemplateWsResponse.newBuilder().setPermissionTemplate(permissionTemplateBuilder).build();
} }
} }
Expand Up @@ -42,7 +42,7 @@
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ID; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PATTERN; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createIdParameter; import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createIdParameter;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateDescriptionParameter; import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateDescriptionParameter;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateProjectKeyPatternParameter; import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateProjectKeyPatternParameter;
Expand Down Expand Up @@ -93,7 +93,7 @@ public void handle(Request wsRequest, Response wsResponse) throws Exception {
String uuid = wsRequest.mandatoryParam(PARAM_ID); String uuid = wsRequest.mandatoryParam(PARAM_ID);
String nameParam = wsRequest.param(PARAM_NAME); String nameParam = wsRequest.param(PARAM_NAME);
String descriptionParam = wsRequest.param(PARAM_DESCRIPTION); String descriptionParam = wsRequest.param(PARAM_DESCRIPTION);
String projectPatternParam = wsRequest.param(PARAM_PATTERN); String projectPatternParam = wsRequest.param(PARAM_PROJECT_KEY_PATTERN);


DbSession dbSession = dbClient.openSession(false); DbSession dbSession = dbClient.openSession(false);
try { try {
Expand Down
Expand Up @@ -45,7 +45,7 @@
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PATTERN; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;
import static org.sonar.test.JsonAssert.assertJson; import static org.sonar.test.JsonAssert.assertJson;


public class CreateTemplateActionTest { public class CreateTemplateActionTest {
Expand Down Expand Up @@ -167,7 +167,7 @@ private TestResponse newRequest(@Nullable String name, @Nullable String descript
request.setParam(PARAM_DESCRIPTION, description); request.setParam(PARAM_DESCRIPTION, description);
} }
if (projectPattern != null) { if (projectPattern != null) {
request.setParam(PARAM_PATTERN, projectPattern); request.setParam(PARAM_PROJECT_KEY_PATTERN, projectPattern);
} }


return request.execute(); return request.execute();
Expand Down
Expand Up @@ -54,7 +54,7 @@
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ID; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PATTERN; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;
import static org.sonar.test.JsonAssert.assertJson; import static org.sonar.test.JsonAssert.assertJson;


public class UpdateTemplateActionTest { public class UpdateTemplateActionTest {
Expand Down Expand Up @@ -234,7 +234,7 @@ private TestResponse newRequest(@Nullable String key, @Nullable String name, @Nu
request.setParam(PARAM_DESCRIPTION, description); request.setParam(PARAM_DESCRIPTION, description);
} }
if (projectPattern != null) { if (projectPattern != null) {
request.setParam(PARAM_PATTERN, projectPattern); request.setParam(PARAM_PROJECT_KEY_PATTERN, projectPattern);
} }


return request.execute(); return request.execute();
Expand Down
@@ -0,0 +1,61 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package org.sonarqube.ws.client.permission;

import javax.annotation.CheckForNull;
import javax.annotation.Nullable;

import static java.util.Objects.requireNonNull;

public class CreateTemplateWsRequest {
private String description;
private String name;
private String projectKeyPattern;

@CheckForNull
public String getDescription() {
return description;
}

public CreateTemplateWsRequest setDescription(@Nullable String description) {
this.description = description;
return this;
}

public String getName() {
return name;
}

public CreateTemplateWsRequest setName(String name) {
this.name = requireNonNull(name);
return this;
}

@CheckForNull
public String getProjectKeyPattern() {
return projectKeyPattern;
}

public CreateTemplateWsRequest setProjectKeyPattern(@Nullable String projectKeyPattern) {
this.projectKeyPattern = projectKeyPattern;
return this;
}
}
Expand Up @@ -21,15 +21,19 @@
package org.sonarqube.ws.client.permission; package org.sonarqube.ws.client.permission;


import org.sonarqube.ws.WsPermissions; import org.sonarqube.ws.WsPermissions;
import org.sonarqube.ws.WsPermissions.CreateTemplateWsResponse;
import org.sonarqube.ws.client.WsClient; import org.sonarqube.ws.client.WsClient;


import static org.sonarqube.ws.client.WsRequest.newGetRequest; import static org.sonarqube.ws.client.WsRequest.newGetRequest;
import static org.sonarqube.ws.client.WsRequest.newPostRequest; import static org.sonarqube.ws.client.WsRequest.newPostRequest;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_DESCRIPTION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_GROUP_ID; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_GROUP_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_GROUP_NAME; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_GROUP_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_ID; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_ID; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_NAME; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_USER_LOGIN; import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_USER_LOGIN;
Expand Down Expand Up @@ -95,6 +99,15 @@ public void applyTemplate(ApplyTemplateWsRequest request) {
.setParam(PARAM_TEMPLATE_NAME, request.getTemplateName())); .setParam(PARAM_TEMPLATE_NAME, request.getTemplateName()));
} }


public CreateTemplateWsResponse createTemplate(CreateTemplateWsRequest request) {
return wsClient.execute(newPostRequest(
action("create_template"))
.setParam(PARAM_NAME, request.getName())
.setParam(PARAM_DESCRIPTION, request.getDescription())
.setParam(PARAM_PROJECT_KEY_PATTERN, request.getProjectKeyPattern()),
CreateTemplateWsResponse.parser());
}

private static String action(String action) { private static String action(String action) {
return PermissionsWsParameters.ENDPOINT + "/" + action; return PermissionsWsParameters.ENDPOINT + "/" + action;
} }
Expand Down
Expand Up @@ -34,6 +34,6 @@ public class PermissionsWsParameters {
public static final String PARAM_ID = "id"; public static final String PARAM_ID = "id";
public static final String PARAM_NAME = "name"; public static final String PARAM_NAME = "name";
public static final String PARAM_DESCRIPTION = "description"; public static final String PARAM_DESCRIPTION = "description";
public static final String PARAM_PATTERN = "projectKeyPattern"; public static final String PARAM_PROJECT_KEY_PATTERN = "projectKeyPattern";
public static final String PARAM_QUALIFIER = "qualifier"; public static final String PARAM_QUALIFIER = "qualifier";
} }
@@ -0,0 +1,22 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

@javax.annotation.ParametersAreNonnullByDefault
package org.sonarqube.ws.client.permission;
2 changes: 1 addition & 1 deletion sonar-ws/src/main/protobuf/ws-permissions.proto
Expand Up @@ -58,7 +58,7 @@ message WsSearchProjectPermissionsResponse {
repeated Permission permissions = 3; repeated Permission permissions = 3;
} }


message WsCreatePermissionTemplateResponse { message CreateTemplateWsResponse {
optional PermissionTemplate permissionTemplate = 1; optional PermissionTemplate permissionTemplate = 1;
} }


Expand Down

0 comments on commit f4d2557

Please sign in to comment.