From 5032edb09474d7b4e110761eeb7f9b27055d775f Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Mon, 24 Aug 2015 08:59:17 +0200 Subject: [PATCH] Create WS Request Group class --- .../ws/AddGroupToTemplateAction.java | 13 ++-- .../ws/PermissionDependenciesFinder.java | 18 +++--- .../permission/ws/PermissionRequest.java | 29 +++------ .../sonar/server/permission/ws/WsGroup.java | 61 +++++++++++++++++++ 4 files changed, 83 insertions(+), 38 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsGroup.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java index 6e35f17edd0..ee330decfac 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java @@ -36,8 +36,6 @@ import static org.sonar.db.user.GroupMembershipQuery.IN; import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; import static org.sonar.server.permission.PermissionRequestValidator.validateNotAnyoneAndAdminPermission; import static org.sonar.server.permission.PermissionRequestValidator.validateProjectPermission; -import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; -import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; @@ -79,19 +77,18 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { String templateKey = wsRequest.mandatoryParam(PARAM_TEMPLATE_KEY); String permission = wsRequest.mandatoryParam(PARAM_PERMISSION); - Long groupIdParam = wsRequest.paramAsLong(PARAM_GROUP_ID); - String groupName = wsRequest.param(PARAM_GROUP_NAME); + WsGroup group = WsGroup.fromRequest(wsRequest); DbSession dbSession = dbClient.openSession(false); try { validateProjectPermission(permission); - validateNotAnyoneAndAdminPermission(permission, groupName); + validateNotAnyoneAndAdminPermission(permission, group.name()); PermissionTemplateDto template = dependenciesFinder.getTemplate(templateKey); - GroupDto group = dependenciesFinder.getGroup(dbSession, groupIdParam, groupName); + GroupDto groupDto = dependenciesFinder.getGroup(dbSession, group); - if (!groupAlreadyAdded(dbSession, template.getId(), group, permission)) { - Long groupId = group == null ? null : group.getId(); + if (!groupAlreadyAdded(dbSession, template.getId(), groupDto, permission)) { + Long groupId = groupDto == null ? null : groupDto.getId(); dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), groupId, permission); } } finally { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java index 32d73c48a08..68ef67dd4cc 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionDependenciesFinder.java @@ -22,7 +22,6 @@ package org.sonar.server.permission.ws; import com.google.common.base.Optional; import javax.annotation.CheckForNull; -import javax.annotation.Nullable; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.component.ComponentDto; @@ -35,7 +34,6 @@ import static java.lang.String.format; import static org.sonar.api.security.DefaultGroups.ANYONE; import static org.sonar.api.security.DefaultGroups.isAnyone; import static org.sonar.server.ws.WsUtils.checkFound; -import static org.sonar.server.ws.WsUtils.checkRequest; public class PermissionDependenciesFinder { private final DbClient dbClient; @@ -58,7 +56,7 @@ public class PermissionDependenciesFinder { } String getGroupName(DbSession dbSession, PermissionRequest request) { - GroupDto group = getGroup(dbSession, request.groupId(), request.groupName()); + GroupDto group = getGroup(dbSession, request.group()); return group == null ? ANYONE : group.getName(); } @@ -68,25 +66,27 @@ public class PermissionDependenciesFinder { * @return null if it's the anyone group */ @CheckForNull - GroupDto getGroup(DbSession dbSession, @Nullable Long groupId, @Nullable String groupName) { - checkRequest(groupId != null ^ groupName != null, "Group name or group id must be provided, not both."); + GroupDto getGroup(DbSession dbSession, WsGroup group) { + Long groupId = group.id(); + String groupName = group.name(); + if (isAnyone(groupName)) { return null; } - GroupDto group = null; + GroupDto groupDto = null; if (groupId != null) { - group = checkFound(dbClient.groupDao().selectById(dbSession, groupId), + groupDto = checkFound(dbClient.groupDao().selectById(dbSession, groupId), format("Group with id '%d' is not found", groupId)); } if (groupName != null) { - group = checkFound(dbClient.groupDao().selectByName(dbSession, groupName), + groupDto = checkFound(dbClient.groupDao().selectByName(dbSession, groupName), format("Group with name '%s' is not found", groupName)); } - return group; + return groupDto; } UserDto getUser(DbSession dbSession, String userLogin) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java index a6a87a7106d..8d1a1acd238 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionRequest.java @@ -28,21 +28,18 @@ import static org.sonar.api.server.ws.WebService.Param.PAGE; import static org.sonar.api.server.ws.WebService.Param.PAGE_SIZE; import static org.sonar.api.server.ws.WebService.Param.SELECTED; import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY; -import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; -import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME; +import static org.sonar.server.permission.PermissionRequestValidator.validateGlobalPermission; +import static org.sonar.server.permission.PermissionRequestValidator.validateProjectPermission; import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_KEY; import static org.sonar.server.permission.ws.Parameters.PARAM_PROJECT_UUID; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; -import static org.sonar.server.permission.PermissionRequestValidator.validateGlobalPermission; -import static org.sonar.server.permission.PermissionRequestValidator.validateProjectPermission; import static org.sonar.server.ws.WsUtils.checkRequest; class PermissionRequest { private final String permission; private final String userLogin; - private final Long groupId; - private final String groupName; + private final WsGroup group; private final String projectUuid; private final String projectKey; private final boolean hasProject; @@ -54,8 +51,7 @@ class PermissionRequest { private PermissionRequest(Builder builder) { permission = builder.permission; userLogin = builder.userLogin; - groupId = builder.groupId; - groupName = builder.groupName; + group = builder.group; projectUuid = builder.projectUuid; projectKey = builder.projectKey; hasProject = builder.hasProject; @@ -76,8 +72,7 @@ class PermissionRequest { private String permission; private String userLogin; - private Long groupId; - private String groupName; + private WsGroup group; private String projectUuid; private String projectKey; private boolean hasProject; @@ -148,11 +143,7 @@ class PermissionRequest { private void setGroup(Request request) { if (withGroup) { - Long groupIdParam = request.paramAsLong(PARAM_GROUP_ID); - String groupNameParam = request.param(PARAM_GROUP_NAME); - checkRequest(groupIdParam != null ^ groupNameParam != null, "Group name or group id must be provided, not both."); - this.groupId = groupIdParam; - this.groupName = groupNameParam; + this.group = WsGroup.fromRequest(request); } } @@ -187,12 +178,8 @@ class PermissionRequest { return userLogin; } - Long groupId() { - return groupId; - } - - String groupName() { - return groupName; + WsGroup group() { + return group; } String projectUuid() { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsGroup.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsGroup.java new file mode 100644 index 00000000000..66fd8a7ac01 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/WsGroup.java @@ -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.sonar.server.permission.ws; + +import javax.annotation.Nullable; +import org.sonar.api.server.ws.Request; + +import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_ID; +import static org.sonar.server.permission.ws.Parameters.PARAM_GROUP_NAME; +import static org.sonar.server.ws.WsUtils.checkRequest; + +/** + * Group from a WS request. Guaranties the group id or the group name is provided, not both. + */ +class WsGroup { + + private final Long id; + private final String name; + + private WsGroup(Long id, String name) { + checkRequest(id != null ^ name != null, "Group name or group id must be provided, not both."); + + this.id = id; + this.name = name; + } + + static WsGroup fromRequest(Request wsRequest) { + Long id = wsRequest.paramAsLong(PARAM_GROUP_ID); + String name = wsRequest.param(PARAM_GROUP_NAME); + + return new WsGroup(id, name); + } + + @Nullable + Long id() { + return this.id; + } + + @Nullable + String name() { + return this.name; + } +} -- 2.39.5