Browse Source

SONAR-7244 fix component's selectByQuery when no component id is provided

tags/6.0-RC1
Teryk Bellahsene 8 years ago
parent
commit
7fac2c1f74

+ 7
- 26
server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java View File

@@ -19,17 +19,13 @@
*/
package org.sonar.server.permission.ws;

import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Table;
import com.google.common.collect.TreeBasedTable;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import org.sonar.api.resources.ResourceTypes;
import org.sonar.api.utils.Paging;
import org.sonar.db.DbClient;
@@ -62,7 +58,7 @@ public class SearchProjectPermissionsDataLoader {
SearchProjectPermissionsData.Builder data = newBuilder();
int countRootComponents = countRootComponents(dbSession, request);
List<ComponentDto> rootComponents = searchRootComponents(dbSession, request, paging(request, countRootComponents));
List<Long> rootComponentIds = Lists.transform(rootComponents, ComponentToIdFunction.INSTANCE);
List<Long> rootComponentIds = Lists.transform(rootComponents, ComponentDto::getId);

data.rootComponents(rootComponents)
.paging(paging(request, countRootComponents))
@@ -111,12 +107,9 @@ public class SearchProjectPermissionsDataLoader {
private Table<Long, String, Integer> userCountByRootComponentIdAndPermission(DbSession dbSession, List<Long> rootComponentIds) {
final Table<Long, String, Integer> userCountByRootComponentIdAndPermission = TreeBasedTable.create();

dbClient.permissionDao().usersCountByComponentIdAndPermission(dbSession, rootComponentIds, new ResultHandler() {
@Override
public void handleResult(ResultContext context) {
CountByProjectAndPermissionDto row = (CountByProjectAndPermissionDto) context.getResultObject();
userCountByRootComponentIdAndPermission.put(row.getComponentId(), row.getPermission(), row.getCount());
}
dbClient.permissionDao().usersCountByComponentIdAndPermission(dbSession, rootComponentIds, context -> {
CountByProjectAndPermissionDto row = (CountByProjectAndPermissionDto) context.getResultObject();
userCountByRootComponentIdAndPermission.put(row.getComponentId(), row.getPermission(), row.getCount());
});

return userCountByRootComponentIdAndPermission;
@@ -125,23 +118,11 @@ public class SearchProjectPermissionsDataLoader {
private Table<Long, String, Integer> groupCountByRootComponentIdAndPermission(DbSession dbSession, List<Long> rootComponentIds) {
final Table<Long, String, Integer> userCountByRootComponentIdAndPermission = TreeBasedTable.create();

dbClient.permissionDao().groupsCountByComponentIdAndPermission(dbSession, rootComponentIds, new ResultHandler() {
@Override
public void handleResult(ResultContext context) {
CountByProjectAndPermissionDto row = (CountByProjectAndPermissionDto) context.getResultObject();
userCountByRootComponentIdAndPermission.put(row.getComponentId(), row.getPermission(), row.getCount());
}
dbClient.permissionDao().groupsCountByComponentIdAndPermission(dbSession, rootComponentIds, context -> {
CountByProjectAndPermissionDto row = (CountByProjectAndPermissionDto) context.getResultObject();
userCountByRootComponentIdAndPermission.put(row.getComponentId(), row.getPermission(), row.getCount());
});

return userCountByRootComponentIdAndPermission;
}

private enum ComponentToIdFunction implements Function<ComponentDto, Long> {
INSTANCE;

@Override
public Long apply(@Nonnull ComponentDto component) {
return component.getId();
}
}
}

+ 4
- 2
server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchGlobalPermissionsActionTest.java View File

@@ -39,6 +39,7 @@ import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.MediaTypes;
import org.sonarqube.ws.WsPermissions;

import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.core.permission.GlobalPermissions.DASHBOARD_SHARING;
import static org.sonar.core.permission.GlobalPermissions.PROVISIONING;
import static org.sonar.core.permission.GlobalPermissions.QUALITY_GATE_ADMIN;
@@ -94,11 +95,12 @@ public class SearchGlobalPermissionsActionTest {

@Test
public void protobuf_response() throws IOException {
WsPermissions.WsSearchGlobalPermissionsResponse wsSearchGlobalPermissionsResponse = WsPermissions.WsSearchGlobalPermissionsResponse.parseFrom(
WsPermissions.WsSearchGlobalPermissionsResponse result = WsPermissions.WsSearchGlobalPermissionsResponse.parseFrom(
ws.newRequest()
.setMediaType(MediaTypes.PROTOBUF)
.execute().getInputStream());
System.out.println(wsSearchGlobalPermissionsResponse.getPermissionsList());

assertThat(result).isNotNull();
}

@Test

+ 3
- 0
sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java View File

@@ -75,6 +75,9 @@ public class ComponentDao implements Dao {
}

public int countByQuery(DbSession session, ComponentQuery query) {
if (query.getComponentIds() != null && query.getComponentIds().isEmpty()) {
return 0;
}
return mapper(session).countByQuery(query);
}


+ 6
- 3
sonar-db/src/test/java/org/sonar/db/component/ComponentDaoTest.java View File

@@ -700,9 +700,10 @@ public class ComponentDaoTest {

ComponentQuery query = ComponentQuery.builder().setNameOrKeyQuery("oJect").setQualifiers(Qualifiers.PROJECT).build();
List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 1, 3);
int count = underTest.countByQuery(dbSession, query);

assertThat(result).hasSize(3);
assertThat(underTest.countByQuery(dbSession, query)).isEqualTo(9);
assertThat(count).isEqualTo(9);
assertThat(result).extracting("name").containsExactly("project-2", "project-3", "project-4");
}

@@ -744,10 +745,12 @@ public class ComponentDaoTest {

@Test
public void select_by_query_on_empty_list_of_component_id() {
ComponentQuery query = ComponentQuery.builder().setQualifiers(Qualifiers.PROJECT).setComponentIds(emptySet()).build();
List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10);
ComponentQuery dbQuery = ComponentQuery.builder().setQualifiers(Qualifiers.PROJECT).setComponentIds(emptySet()).build();
List<ComponentDto> result = underTest.selectByQuery(dbSession, dbQuery, 0, 10);
int count = underTest.countByQuery(dbSession, dbQuery);

assertThat(result).isEmpty();
assertThat(count).isEqualTo(0);
}

@Test

Loading…
Cancel
Save