summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-09-04 15:42:52 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-09-04 16:16:54 +0200
commita973701504df1d3c04ebdc43903a0fd496d6e4da (patch)
tree04652d72400d3157bd705e4de15db7b771830eea /server
parent2a44995355d5adce63fa52cebe2c04caf3a169fc (diff)
downloadsonarqube-a973701504df1d3c04ebdc43903a0fd496d6e4da.tar.gz
sonarqube-a973701504df1d3c04ebdc43903a0fd496d6e4da.zip
SONAR-6495 WS permissions/search_templates add default templates
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java49
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesAction.java27
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesData.java20
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesDataLoader.java7
-rw-r--r--server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_templates-example.json14
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchTemplatesActionTest.java28
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchTemplatesActionTest/empty.json14
8 files changed, 149 insertions, 12 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java
index 1f6c8536408..d3a08cfd1eb 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DefaultPermissionTemplateFinder.java
@@ -21,14 +21,15 @@
package org.sonar.server.permission.ws;
import com.google.common.base.Function;
-import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableSet;
+import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.ResourceTypes;
import static com.google.common.base.Objects.firstNonNull;
+import static com.google.common.collect.FluentIterable.from;
import static org.sonar.server.permission.DefaultPermissionTemplates.DEFAULT_TEMPLATE_PROPERTY;
import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
import static org.sonar.server.permission.ws.ResourceTypeToQualifier.RESOURCE_TYPE_TO_QUALIFIER;
@@ -42,10 +43,10 @@ public class DefaultPermissionTemplateFinder {
this.resourceTypes = resourceTypes;
}
- public Set<String> getDefaultTemplateUuids() {
+ Set<String> getDefaultTemplateUuids() {
return ImmutableSet.<String>builder()
.addAll(
- FluentIterable.from(resourceTypes.getRoots())
+ from(resourceTypes.getRoots())
.transform(RESOURCE_TYPE_TO_QUALIFIER)
.transform(new QualifierToDefaultTemplate(settings))
.toSet())
@@ -53,6 +54,31 @@ public class DefaultPermissionTemplateFinder {
.build();
}
+ List<TemplateUuidQualifier> getDefaultTemplatesByQualifier() {
+ return from(resourceTypes.getRoots())
+ .transform(RESOURCE_TYPE_TO_QUALIFIER)
+ .transform(new QualifierToTemplateUuidQualifier(settings))
+ .toList();
+ }
+
+ static class TemplateUuidQualifier {
+ private final String templateUuid;
+ private final String qualifier;
+
+ TemplateUuidQualifier(String templateUuid, String qualifier) {
+ this.templateUuid = templateUuid;
+ this.qualifier = qualifier;
+ }
+
+ public String getTemplateUuid() {
+ return templateUuid;
+ }
+
+ public String getQualifier() {
+ return qualifier;
+ }
+ }
+
private static class QualifierToDefaultTemplate implements Function<String, String> {
private final Settings settings;
@@ -67,4 +93,21 @@ public class DefaultPermissionTemplateFinder {
}
}
+ private static class QualifierToTemplateUuidQualifier implements Function<String, TemplateUuidQualifier> {
+ private final Settings settings;
+
+ QualifierToTemplateUuidQualifier(Settings settings) {
+ this.settings = settings;
+ }
+
+ @Override
+ public TemplateUuidQualifier apply(@Nonnull String qualifier) {
+ String qualifierTemplateUuid = firstNonNull(
+ settings.getString(defaultRootQualifierTemplateProperty(qualifier)),
+ settings.getString(DEFAULT_TEMPLATE_PROPERTY));
+
+ return new TemplateUuidQualifier(qualifierTemplateUuid, qualifier);
+ }
+ }
+
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesAction.java
index 3fd79917648..e84e5058423 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesAction.java
@@ -32,6 +32,7 @@ import org.sonar.server.user.UserSession;
import org.sonarqube.ws.Permissions.Permission;
import org.sonarqube.ws.Permissions.PermissionTemplate;
import org.sonarqube.ws.Permissions.WsSearchTemplatesResponse;
+import org.sonarqube.ws.Permissions.WsSearchTemplatesResponse.TemplateIdQualifier;
import static org.sonar.api.utils.DateUtils.formatDateTime;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser;
@@ -80,9 +81,28 @@ public class SearchTemplatesAction implements PermissionsWsAction {
private WsSearchTemplatesResponse buildResponse(SearchTemplatesData data) {
WsSearchTemplatesResponse.Builder response = WsSearchTemplatesResponse.newBuilder();
- Permission.Builder permissionResponse = Permission.newBuilder();
+ buildTemplatesResponse(response, data);
+ buildDefaultTemplatesResponse(response, data);
+ buildPermissionsResponse(response);
+
+ return response.build();
+ }
+
+ private void buildDefaultTemplatesResponse(WsSearchTemplatesResponse.Builder response, SearchTemplatesData data) {
+ TemplateIdQualifier.Builder templateUuidQualifierBuilder = TemplateIdQualifier.newBuilder();
+ for (DefaultPermissionTemplateFinder.TemplateUuidQualifier templateUuidQualifier : data.defaultTempltes()) {
+ response.addDefaultTemplates(templateUuidQualifierBuilder
+ .clear()
+ .setQualifier(templateUuidQualifier.getQualifier())
+ .setTemplateId(templateUuidQualifier.getTemplateUuid()));
+ }
+ }
+
+ private void buildTemplatesResponse(WsSearchTemplatesResponse.Builder response, SearchTemplatesData data) {
+ Permission.Builder permissionResponse = Permission.newBuilder();
PermissionTemplate.Builder templateBuilder = PermissionTemplate.newBuilder();
+
for (PermissionTemplateDto templateDto : data.templates()) {
templateBuilder
.clear()
@@ -106,7 +126,10 @@ public class SearchTemplatesAction implements PermissionsWsAction {
}
response.addPermissionTemplates(templateBuilder);
}
+ }
+ private void buildPermissionsResponse(WsSearchTemplatesResponse.Builder response) {
+ Permission.Builder permissionResponse = Permission.newBuilder();
for (String permissionKey : ProjectPermissions.ALL) {
response.addPermissions(
permissionResponse
@@ -116,8 +139,6 @@ public class SearchTemplatesAction implements PermissionsWsAction {
.setDescription(i18nDescriptionMessage(permissionKey))
);
}
-
- return response.build();
}
private String i18nDescriptionMessage(String permissionKey) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesData.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesData.java
index 5ef26407b63..dac2868fca4 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesData.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesData.java
@@ -26,6 +26,7 @@ import com.google.common.collect.Table;
import java.util.List;
import java.util.Set;
import org.sonar.db.permission.PermissionTemplateDto;
+import org.sonar.server.permission.ws.DefaultPermissionTemplateFinder.TemplateUuidQualifier;
import static com.google.common.base.Objects.firstNonNull;
import static com.google.common.base.Preconditions.checkState;
@@ -34,12 +35,14 @@ import static com.google.common.collect.ImmutableTable.copyOf;
import static com.google.common.collect.Ordering.natural;
class SearchTemplatesData {
- private final List<PermissionTemplateDto> paginatedTemplates;
+ private final List<PermissionTemplateDto> templates;
+ private final List<TemplateUuidQualifier> defaultTemplates;
private final Table<Long, String, Integer> userCountByTemplateIdAndPermission;
private final Table<Long, String, Integer> groupCountByTemplateIdAndPermission;
private SearchTemplatesData(Builder builder) {
- this.paginatedTemplates = copyOf(builder.templates);
+ this.templates = copyOf(builder.templates);
+ this.defaultTemplates = copyOf(builder.defaultTemplates);
this.userCountByTemplateIdAndPermission = copyOf(builder.userCountByTemplateIdAndPermission);
this.groupCountByTemplateIdAndPermission = copyOf(builder.groupCountByTemplateIdAndPermission);
}
@@ -49,7 +52,11 @@ class SearchTemplatesData {
}
public List<PermissionTemplateDto> templates() {
- return paginatedTemplates;
+ return templates;
+ }
+
+ public List<TemplateUuidQualifier> defaultTempltes() {
+ return defaultTemplates;
}
public int userCount(long templateId, String permission) {
@@ -71,6 +78,7 @@ class SearchTemplatesData {
public static class Builder {
private List<PermissionTemplateDto> templates;
+ private List<TemplateUuidQualifier> defaultTemplates;
private Table<Long, String, Integer> userCountByTemplateIdAndPermission;
private Table<Long, String, Integer> groupCountByTemplateIdAndPermission;
@@ -80,6 +88,7 @@ class SearchTemplatesData {
public SearchTemplatesData build() {
checkState(templates != null);
+ checkState(defaultTemplates != null);
checkState(userCountByTemplateIdAndPermission != null);
checkState(groupCountByTemplateIdAndPermission != null);
@@ -91,6 +100,11 @@ class SearchTemplatesData {
return this;
}
+ public Builder defaultTemplates(List<TemplateUuidQualifier> defaultTemplates) {
+ this.defaultTemplates = defaultTemplates;
+ return this;
+ }
+
public Builder userCountByTemplateIdAndPermission(Table<Long, String, Integer> userCountByTemplateIdAndPermission) {
this.userCountByTemplateIdAndPermission = userCountByTemplateIdAndPermission;
return this;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesDataLoader.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesDataLoader.java
index f6cce2bff16..79a2984efdc 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesDataLoader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchTemplatesDataLoader.java
@@ -33,15 +33,18 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.permission.CountByTemplateAndPermissionDto;
import org.sonar.db.permission.PermissionTemplateDto;
+import org.sonar.server.permission.ws.DefaultPermissionTemplateFinder.TemplateUuidQualifier;
import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY;
import static org.sonar.server.permission.ws.SearchTemplatesData.newBuilder;
public class SearchTemplatesDataLoader {
private final DbClient dbClient;
+ private final DefaultPermissionTemplateFinder defaultPermissionTemplateFinder;
- public SearchTemplatesDataLoader(DbClient dbClient) {
+ public SearchTemplatesDataLoader(DbClient dbClient, DefaultPermissionTemplateFinder defaultPermissionTemplateFinder) {
this.dbClient = dbClient;
+ this.defaultPermissionTemplateFinder = defaultPermissionTemplateFinder;
}
public SearchTemplatesData load(Request wsRequest) {
@@ -50,8 +53,10 @@ public class SearchTemplatesDataLoader {
SearchTemplatesData.Builder data = newBuilder();
List<PermissionTemplateDto> templates = searchTemplates(dbSession, wsRequest);
List<Long> templateIds = Lists.transform(templates, TemplateToIdFunction.INSTANCE);
+ List<TemplateUuidQualifier> defaultTemplates = defaultPermissionTemplateFinder.getDefaultTemplatesByQualifier();
data.templates(templates)
+ .defaultTemplates(defaultTemplates)
.userCountByTemplateIdAndPermission(userCountByTemplateIdAndPermission(dbSession, templateIds))
.groupCountByTemplateIdAndPermission(groupCountByTemplateIdAndPermission(dbSession, templateIds));
diff --git a/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_templates-example.json b/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_templates-example.json
index bfdcf0828fc..523c5ebf1d3 100644
--- a/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_templates-example.json
+++ b/server/sonar-server/src/main/resources/org/sonar/server/permission/ws/search_templates-example.json
@@ -59,6 +59,20 @@
]
}
],
+ "defaultTemplates": [
+ {
+ "templateId": "AU-Tpxb--iU5OvuD2FLy",
+ "qualifier": "TRK"
+ },
+ {
+ "templateId": "AU-TpxcA-iU5OvuD2FLz",
+ "qualifier": "VW"
+ },
+ {
+ "templateId": "AU-TpxcA-iU5OvuD2FL0",
+ "qualifier": "DEV"
+ }
+ ],
"permissions": [
{
"key": "user",
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java
index 95f36fd1ce3..aead1d2453e 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchProjectPermissionsActionTest.java
@@ -75,7 +75,7 @@ public class SearchProjectPermissionsActionTest {
I18nRule i18n = new I18nRule();
DbClient dbClient = db.getDbClient();
DbSession dbSession = db.getSession();
- ResourceTypes resourceTypes;
+ ResourceTypes resourceTypes = mock(ResourceTypes.class);
SearchProjectPermissionsDataLoader dataLoader;
SearchProjectPermissionsAction underTest;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchTemplatesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchTemplatesActionTest.java
index 2db0f1a2c95..dcda8000a5e 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchTemplatesActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/SearchTemplatesActionTest.java
@@ -21,6 +21,7 @@
package org.sonar.server.permission.ws;
import java.util.Date;
+import java.util.List;
import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.ClassRule;
@@ -28,6 +29,10 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.ExpectedException;
+import org.sonar.api.config.Settings;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.ResourceType;
+import org.sonar.api.resources.ResourceTypes;
import org.sonar.api.utils.System2;
import org.sonar.api.web.UserRole;
import org.sonar.core.permission.GlobalPermissions;
@@ -44,7 +49,10 @@ import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.DbTests;
+import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY;
import static org.sonar.core.permission.GlobalPermissions.QUALITY_PROFILE_ADMIN;
import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01;
@@ -53,6 +61,7 @@ import static org.sonar.core.util.Uuids.UUID_EXAMPLE_03;
import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto;
import static org.sonar.db.user.GroupTesting.newGroupDto;
import static org.sonar.db.user.UserTesting.newUserDto;
+import static org.sonar.server.permission.DefaultPermissionTemplates.defaultRootQualifierTemplateProperty;
import static org.sonar.test.JsonAssert.assertJson;
@Category(DbTests.class)
@@ -68,6 +77,7 @@ public class SearchTemplatesActionTest {
I18nRule i18n = new I18nRule();
DbClient dbClient = db.getDbClient();
DbSession dbSession = db.getSession();
+ ResourceTypes resourceTypes = mock(ResourceTypes.class);
SearchTemplatesDataLoader dataLoader;
SearchTemplatesAction underTest;
@@ -76,8 +86,16 @@ public class SearchTemplatesActionTest {
public void setUp() {
db.truncateTables();
i18n.setProjectPermissions();
+ when(resourceTypes.getRoots()).thenReturn(rootResourceTypes());
- dataLoader = new SearchTemplatesDataLoader(dbClient);
+ Settings settings = new Settings();
+ settings.setProperty(defaultRootQualifierTemplateProperty(Qualifiers.PROJECT), UUID_EXAMPLE_01);
+ settings.setProperty(defaultRootQualifierTemplateProperty(Qualifiers.VIEW), UUID_EXAMPLE_02);
+ settings.setProperty(defaultRootQualifierTemplateProperty("DEV"), UUID_EXAMPLE_03);
+
+ DefaultPermissionTemplateFinder defaultPermissionTemplateFinder = new DefaultPermissionTemplateFinder(settings, resourceTypes);
+
+ dataLoader = new SearchTemplatesDataLoader(dbClient, defaultPermissionTemplateFinder);
underTest = new SearchTemplatesAction(dbClient, userSession, i18n, dataLoader);
ws = new WsActionTester(underTest);
@@ -220,4 +238,12 @@ public class SearchTemplatesActionTest {
private void commit() {
dbSession.commit();
}
+
+ private static List<ResourceType> rootResourceTypes() {
+ ResourceType project = ResourceType.builder(Qualifiers.PROJECT).build();
+ ResourceType view = ResourceType.builder(Qualifiers.VIEW).build();
+ ResourceType dev = ResourceType.builder("DEV").build();
+
+ return asList(project, view, dev);
+ }
}
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchTemplatesActionTest/empty.json b/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchTemplatesActionTest/empty.json
index ea5874c276f..985f39eaa92 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchTemplatesActionTest/empty.json
+++ b/server/sonar-server/src/test/resources/org/sonar/server/permission/ws/SearchTemplatesActionTest/empty.json
@@ -1,5 +1,19 @@
{
"permissionTemplates": [],
+ "defaultTemplates": [
+ {
+ "templateId": "AU-Tpxb--iU5OvuD2FLy",
+ "qualifier": "TRK"
+ },
+ {
+ "templateId": "AU-TpxcA-iU5OvuD2FLz",
+ "qualifier": "VW"
+ },
+ {
+ "templateId": "AU-TpxcA-iU5OvuD2FL0",
+ "qualifier": "DEV"
+ }
+ ],
"permissions": [
{
"key": "user",