From 82564709cf06447b8a7e5fcadc609d892fc85509 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Wed, 19 Aug 2015 15:10:38 +0200 Subject: [PATCH] SONAR-6485 WS permissions/search_project_permissions add paging field in response --- .../ws/SearchProjectPermissionsAction.java | 10 ++++++++++ .../ws/SearchProjectPermissionsData.java | 15 ++++++++------- .../ws/SearchProjectPermissionsDataLoader.java | 4 ++-- .../ws/search_project_permissions-example.json | 7 ++++++- .../SearchProjectPermissionsActionTest/empty.json | 7 ++++++- .../org/sonar/db/permission/PermissionDao.java | 7 ++++--- .../src/main/java/org/sonar/api/utils/Paging.java | 2 +- 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java index 3ae75eb7e1e..d55be8594f3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsAction.java @@ -24,6 +24,7 @@ import org.sonar.api.i18n.I18n; 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.utils.Paging; import org.sonar.api.web.UserRole; import org.sonar.core.permission.ComponentPermissions; import org.sonar.core.permission.GlobalPermissions; @@ -31,6 +32,7 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.component.ComponentDto; import org.sonar.server.user.UserSession; +import org.sonarqube.ws.Common; import org.sonarqube.ws.Permissions.Permission; import org.sonarqube.ws.Permissions.SearchProjectPermissionsResponse; import org.sonarqube.ws.Permissions.SearchProjectPermissionsResponse.Project; @@ -147,6 +149,14 @@ public class SearchProjectPermissionsAction implements PermissionsWsAction { ); } + Paging paging = data.paging(); + response.setPaging( + Common.Paging.newBuilder() + .setPageIndex(paging.pageIndex()) + .setPageSize(paging.pageSize()) + .setTotal(paging.total()) + ); + return response.build(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsData.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsData.java index 951428cf2a7..fd3308b3db7 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsData.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsData.java @@ -26,6 +26,7 @@ import com.google.common.collect.Ordering; import com.google.common.collect.Table; import java.util.List; import java.util.Set; +import org.sonar.api.utils.Paging; import org.sonar.db.component.ComponentDto; import static com.google.common.base.Objects.firstNonNull; @@ -35,13 +36,13 @@ import static com.google.common.collect.ImmutableTable.copyOf; public class SearchProjectPermissionsData { private final List rootComponents; - private final int total; + private final Paging paging; private final Table userCountByProjectIdAndPermission; private final Table groupCountByProjectIdAndPermission; private SearchProjectPermissionsData(Builder builder) { this.rootComponents = copyOf(builder.projects); - this.total = builder.total; + this.paging = builder.paging; this.userCountByProjectIdAndPermission = copyOf(builder.userCountByProjectIdAndPermission); this.groupCountByProjectIdAndPermission = copyOf(builder.groupCountByProjectIdAndPermission); } @@ -54,8 +55,8 @@ public class SearchProjectPermissionsData { return rootComponents; } - public int total() { - return total; + public Paging paging() { + return paging; } public int userCount(long rootComponentId, String permission) { @@ -77,7 +78,7 @@ public class SearchProjectPermissionsData { public static class Builder { private List projects; - private int total; + private Paging paging; private Table userCountByProjectIdAndPermission; private Table groupCountByProjectIdAndPermission; @@ -98,8 +99,8 @@ public class SearchProjectPermissionsData { return this; } - public Builder total(int total) { - this.total = total; + public Builder paging(Paging paging) { + this.paging = paging; return this; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java index 1337c93fe86..8a787adf15b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java @@ -69,7 +69,7 @@ public class SearchProjectPermissionsDataLoader { List rootComponentIds = Lists.transform(rootComponents, ComponentToIdFunction.INSTANCE); data.rootComponents(rootComponents) - .total(countRootComponents) + .paging(paging(wsRequest, countRootComponents)) .userCountByProjectIdAndPermission(userCountByRootComponentIdAndPermission(dbSession, rootComponentIds)) .groupCountByProjectIdAndPermission(groupCountByRootComponentIdAndPermission(dbSession, rootComponentIds)); @@ -79,7 +79,7 @@ public class SearchProjectPermissionsDataLoader { } } - private Paging paging(Request wsRequest, int total) { + private static Paging paging(Request wsRequest, int total) { return forPageIndex(wsRequest.mandatoryParamAsInt(PAGE)) .withPageSize(wsRequest.mandatoryParamAsInt(PAGE_SIZE)) .andTotal(total); diff --git a/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_project_permissions-example.json b/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_project_permissions-example.json index 935f1521901..c51b2594521 100644 --- a/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_project_permissions-example.json +++ b/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_project_permissions-example.json @@ -85,5 +85,10 @@ "name": "See Source Code", "description": "Ability to view the project\u0027s source code. (Users will also need \"Browse\" permission)" } - ] + ], + "paging": { + "pageIndex": 1, + "pageSize": 25, + "total": 4 + } } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest/empty.json b/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest/empty.json index 1b677af4e96..5789d2975ed 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest/empty.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest/empty.json @@ -21,5 +21,10 @@ "name": "See Source Code", "description": "Ability to view the project's source code. (Users will also need \"Browse\" permission)" } - ] + ], + "paging": { + "pageIndex": 1, + "pageSize": 25, + "total": 0 + } } diff --git a/sonar-db/src/main/java/org/sonar/db/permission/PermissionDao.java b/sonar-db/src/main/java/org/sonar/db/permission/PermissionDao.java index 48d4c327736..773c28a44e0 100644 --- a/sonar-db/src/main/java/org/sonar/db/permission/PermissionDao.java +++ b/sonar-db/src/main/java/org/sonar/db/permission/PermissionDao.java @@ -41,6 +41,7 @@ public class PermissionDao implements Dao { private static final String QUERY_PARAMETER = "query"; private static final String COMPONENT_ID_PARAMETER = "componentId"; + private static final String ANYONE_GROUP_PARAMETER = "anyoneGroup"; private final MyBatis myBatis; @@ -93,7 +94,7 @@ public class PermissionDao implements Dao { public int countGroups(DbSession session, String permission, @Nullable Long componentId) { Map parameters = new HashMap<>(); parameters.put("permission", permission); - parameters.put("anyoneGroup", DefaultGroups.ANYONE); + parameters.put(ANYONE_GROUP_PARAMETER, DefaultGroups.ANYONE); parameters.put(COMPONENT_ID_PARAMETER, componentId); return mapper(session).countGroups(parameters); @@ -120,7 +121,7 @@ public class PermissionDao implements Dao { */ public void groupsCountByComponentIdAndPermission(final DbSession dbSession, final List componentIds, final ResultHandler resultHandler) { final Map parameters = new HashMap<>(); - parameters.put("anyoneGroup", DefaultGroups.ANYONE); + parameters.put(ANYONE_GROUP_PARAMETER, DefaultGroups.ANYONE); DatabaseUtils.executeLargeInputsWithoutOutput(componentIds, new Function, Void>() { @Override @@ -136,7 +137,7 @@ public class PermissionDao implements Dao { Map params = newHashMap(); params.put(QUERY_PARAMETER, query); params.put(COMPONENT_ID_PARAMETER, componentId); - params.put("anyoneGroup", DefaultGroups.ANYONE); + params.put(ANYONE_GROUP_PARAMETER, DefaultGroups.ANYONE); return params; } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/Paging.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/Paging.java index 1945e1cc402..d9439514a3c 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/Paging.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/Paging.java @@ -45,10 +45,10 @@ public class Paging { this.total = total; } - @Deprecated /** * @deprecated since 5.2 please use the forPageIndex(...) builder method */ + @Deprecated public static Paging create(int pageSize, int pageIndex, int totalItems) { return new Paging(pageSize, pageIndex, totalItems); } -- 2.39.5