]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-13221 change PK to uuid of PERMISSION_TEMPLATES table
authorJacek <jacek.poreda@sonarsource.com>
Mon, 20 Apr 2020 12:47:21 +0000 (14:47 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 25 May 2020 20:05:20 +0000 (20:05 +0000)
* change template_id to template_uuid for PERM_TEMPLATES_GROUPS, PERM_TEMPLATES_USERS, PERM_TPL_CHARACTERISTICS

117 files changed:
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/CountByTemplateAndPermissionDto.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateCharacteristicDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateCharacteristicDto.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateCharacteristicMapper.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateDto.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateGroupDto.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateMapper.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateUserDto.java
server/sonar-db-dao/src/main/resources/org/sonar/db/permission/template/PermissionTemplateCharacteristicMapper.xml
server/sonar-db-dao/src/main/resources/org/sonar/db/permission/template/PermissionTemplateMapper.xml
server/sonar-db-dao/src/schema/schema-sq.ddl
server/sonar-db-dao/src/test/java/org/sonar/db/permission/template/GroupWithPermissionTemplateDaoTest.java
server/sonar-db-dao/src/test/java/org/sonar/db/permission/template/PermissionTemplateCharacteristicDaoTest.java
server/sonar-db-dao/src/test/java/org/sonar/db/permission/template/PermissionTemplateDaoTest.java
server/sonar-db-dao/src/test/java/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest.java
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/permission/template/PermissionTemplateDbTester.java
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83.java
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplates.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuid.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroups.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumn.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsers.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumn.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristics.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullable.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumn.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplatesTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuidTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroupsTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumnTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsersTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumnTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristicsTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumnTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplatesTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuidTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroupsTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumnTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsersTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumnTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristicsTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumnTest/schema.sql [new file with mode: 0644]
server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/OrganisationSupport.java
server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java
server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/MemberUpdaterTest.java
server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java
server/sonar-webserver-core/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
server/sonar-webserver-core/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/PermissionTemplateService.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/AddGroupToTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/AddProjectCreatorToTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/AddUserToTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/DeleteTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/RemoveGroupFromTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/RemoveProjectCreatorFromTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/RemoveUserFromTemplateAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/SearchTemplatesAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/SearchTemplatesData.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/TemplateGroupsAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/TemplateUsersAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/UpdateTemplateAction.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/PermissionTemplateServiceTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/AddGroupToTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/AddProjectCreatorToTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/AddUserToTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/ApplyTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/DeleteTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/RemoveGroupFromTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/RemoveProjectCreatorFromTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/RemoveUserFromTemplateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/SearchTemplatesActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/SearchTemplatesDataTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/TemplateGroupsActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/TemplateUsersActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java

index f9f0e4ee69491fd800420ce799dd42911ddb7124..8b3901039b69bc98a9d43dc8c8ee53e827ea0c14 100644 (file)
 package org.sonar.db.permission.template;
 
 public class CountByTemplateAndPermissionDto {
-  private long templateId;
+  private String templateUuid;
   private String permission;
   private int count;
 
-  public long getTemplateId() {
-    return templateId;
+  public String getTemplateUuid() {
+    return templateUuid;
   }
 
-  public void setTemplateId(long templateId) {
-    this.templateId = templateId;
+  public void setTemplateUuid(String templateUuid) {
+    this.templateUuid = templateUuid;
   }
 
   public String getPermission() {
index 34466e487482cc6556b6ab7265353a7b4e0e95b5..b117ac1f9ca1f311599cd6e505acc2f3cbf6b521 100644 (file)
@@ -30,12 +30,12 @@ import static org.sonar.db.DatabaseUtils.executeLargeInputs;
 
 public class PermissionTemplateCharacteristicDao implements Dao {
 
-  public List<PermissionTemplateCharacteristicDto> selectByTemplateIds(DbSession dbSession, List<Long> templateIds) {
-    return executeLargeInputs(templateIds, partitionOfTemplateIds -> mapper(dbSession).selectByTemplateIds(partitionOfTemplateIds));
+  public List<PermissionTemplateCharacteristicDto> selectByTemplateUuids(DbSession dbSession, List<String> templateUuids) {
+    return executeLargeInputs(templateUuids, partitionOfTemplateUuids -> mapper(dbSession).selectByTemplateUuids(partitionOfTemplateUuids));
   }
 
-  public Optional<PermissionTemplateCharacteristicDto> selectByPermissionAndTemplateId(DbSession dbSession, String permission, long templateId) {
-    PermissionTemplateCharacteristicDto dto = mapper(dbSession).selectByPermissionAndTemplateId(permission, templateId);
+  public Optional<PermissionTemplateCharacteristicDto> selectByPermissionAndTemplateId(DbSession dbSession, String permission, String templateUuid) {
+    PermissionTemplateCharacteristicDto dto = mapper(dbSession).selectByPermissionAndTemplateUuid(permission, templateUuid);
     return Optional.ofNullable(dto);
   }
 
index d3ac1eb6320cc5413431ce7146baf4a966825fd7..1ab6541b7b60ccfe813c48e8d778ad41f5b5fc78 100644 (file)
@@ -26,7 +26,7 @@ public class PermissionTemplateCharacteristicDto {
   private static final int MAX_PERMISSION_KEY_LENGTH = 64;
 
   private String uuid;
-  private long templateId;
+  private String templateUuid;
   private String permission;
   private boolean withProjectCreator;
   private long createdAt;
@@ -41,12 +41,12 @@ public class PermissionTemplateCharacteristicDto {
     return this;
   }
 
-  public long getTemplateId() {
-    return templateId;
+  public String getTemplateUuid() {
+    return templateUuid;
   }
 
-  public PermissionTemplateCharacteristicDto setTemplateId(long templateId) {
-    this.templateId = templateId;
+  public PermissionTemplateCharacteristicDto setTemplateUuid(String templateUuid) {
+    this.templateUuid = templateUuid;
     return this;
   }
 
index f6dae36b5908264b3ad7bda86f8f06e7b5f497d8..ff7997c7e5ecac4a980ac3e78e08e4258370985d 100644 (file)
@@ -26,15 +26,15 @@ public interface PermissionTemplateCharacteristicMapper {
 
   PermissionTemplateCharacteristicDto selectByUuid(@Param("uuid") String uuid);
 
-  List<PermissionTemplateCharacteristicDto> selectByTemplateIds(@Param("templateIds") List<Long> templateId);
+  List<PermissionTemplateCharacteristicDto> selectByTemplateUuids(@Param("templateUuids") List<String> templateUuids);
 
-  PermissionTemplateCharacteristicDto selectByPermissionAndTemplateId(@Param("permission") String permission, @Param("templateId") long templateId);
+  PermissionTemplateCharacteristicDto selectByPermissionAndTemplateUuid(@Param("permission") String permission, @Param("templateUuid") String templateUuid);
 
   void insert(PermissionTemplateCharacteristicDto templatePermissionDto);
 
   void update(PermissionTemplateCharacteristicDto templatePermissionDto);
 
-  void deleteByTemplateId(long id);
+  void deleteByTemplateUuid(String uuid);
 
-  void deleteByTemplateIds(@Param("templateIds") List<Long> subList);
+  void deleteByTemplateUuids(@Param("templateUuids") List<String> subList);
 }
index 31c810c587419de3e723de623d041875f2b3cb42..e5c621d8493df1c8c3c1a55974c11210cff17be5 100644 (file)
@@ -30,7 +30,7 @@ import javax.annotation.Nullable;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 import org.sonar.api.utils.System2;
-import org.sonar.core.util.Uuids;
+import org.sonar.core.util.UuidFactory;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
 import org.sonar.db.permission.CountPerProjectPermission;
@@ -46,51 +46,53 @@ public class PermissionTemplateDao implements Dao {
   private static final String ANYONE_GROUP_PARAMETER = "anyoneGroup";
 
   private final System2 system;
+  private final UuidFactory uuidFactory;
 
-  public PermissionTemplateDao(System2 system) {
+  public PermissionTemplateDao(UuidFactory uuidFactory, System2 system) {
+    this.uuidFactory = uuidFactory;
     this.system = system;
   }
 
   /**
    * @return a paginated list of user logins.
    */
-  public List<String> selectUserLoginsByQueryAndTemplate(DbSession session, PermissionQuery query, long templateId) {
-    return mapper(session).selectUserLoginsByQueryAndTemplate(query, templateId, new RowBounds(query.getPageOffset(), query.getPageSize()));
+  public List<String> selectUserLoginsByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
+    return mapper(session).selectUserLoginsByQueryAndTemplate(query, templateUuid, new RowBounds(query.getPageOffset(), query.getPageSize()));
   }
 
-  public int countUserLoginsByQueryAndTemplate(DbSession session, PermissionQuery query, long templateId) {
-    return mapper(session).countUserLoginsByQueryAndTemplate(query, templateId);
+  public int countUserLoginsByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
+    return mapper(session).countUserLoginsByQueryAndTemplate(query, templateUuid);
   }
 
-  public List<PermissionTemplateUserDto> selectUserPermissionsByTemplateIdAndUserLogins(DbSession dbSession, long templateId, List<String> logins) {
-    return executeLargeInputs(logins, l -> mapper(dbSession).selectUserPermissionsByTemplateIdAndUserLogins(templateId, l));
+  public List<PermissionTemplateUserDto> selectUserPermissionsByTemplateIdAndUserLogins(DbSession dbSession, String templateUuid, List<String> logins) {
+    return executeLargeInputs(logins, l -> mapper(dbSession).selectUserPermissionsByTemplateUuidAndUserLogins(templateUuid, l));
   }
 
-  public List<PermissionTemplateUserDto> selectUserPermissionsByTemplateId(DbSession dbSession, long templateId) {
-    return mapper(dbSession).selectUserPermissionsByTemplateIdAndUserLogins(templateId, Collections.emptyList());
+  public List<PermissionTemplateUserDto> selectUserPermissionsByTemplateId(DbSession dbSession, String templateUuid) {
+    return mapper(dbSession).selectUserPermissionsByTemplateUuidAndUserLogins(templateUuid, Collections.emptyList());
   }
 
-  public List<String> selectGroupNamesByQueryAndTemplate(DbSession session, PermissionQuery query, long templateId) {
-    return mapper(session).selectGroupNamesByQueryAndTemplate(templateId, query, new RowBounds(query.getPageOffset(), query.getPageSize()));
+  public List<String> selectGroupNamesByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
+    return mapper(session).selectGroupNamesByQueryAndTemplate(templateUuid, query, new RowBounds(query.getPageOffset(), query.getPageSize()));
   }
 
-  public int countGroupNamesByQueryAndTemplate(DbSession session, PermissionQuery query, String organizationUuid, long templateId) {
-    return mapper(session).countGroupNamesByQueryAndTemplate(organizationUuid, query, templateId);
+  public int countGroupNamesByQueryAndTemplate(DbSession session, PermissionQuery query, String organizationUuid, String templateUuid) {
+    return mapper(session).countGroupNamesByQueryAndTemplate(organizationUuid, query, templateUuid);
   }
 
-  public List<PermissionTemplateGroupDto> selectGroupPermissionsByTemplateIdAndGroupNames(DbSession dbSession, long templateId, List<String> groups) {
-    return executeLargeInputs(groups, g -> mapper(dbSession).selectGroupPermissionsByTemplateIdAndGroupNames(templateId, g));
+  public List<PermissionTemplateGroupDto> selectGroupPermissionsByTemplateIdAndGroupNames(DbSession dbSession, String templateUuid, List<String> groups) {
+    return executeLargeInputs(groups, g -> mapper(dbSession).selectGroupPermissionsByTemplateUuidAndGroupNames(templateUuid, g));
   }
 
-  public List<PermissionTemplateGroupDto> selectGroupPermissionsByTemplateId(DbSession dbSession, long templateId) {
-    return mapper(dbSession).selectGroupPermissionsByTemplateIdAndGroupNames(templateId, Collections.emptyList());
+  public List<PermissionTemplateGroupDto> selectGroupPermissionsByTemplateUuid(DbSession dbSession, String templateUuid) {
+    return mapper(dbSession).selectGroupPermissionsByTemplateUuidAndGroupNames(templateUuid, Collections.emptyList());
   }
 
   /**
    * @return {@code true} if template contains groups that are granted with {@code permission}, else {@code false}
    */
-  public boolean hasGroupsWithPermission(DbSession dbSession, long templateId, String permission, @Nullable Integer groupId) {
-    return mapper(dbSession).countGroupsWithPermission(templateId, permission, groupId) > 0;
+  public boolean hasGroupsWithPermission(DbSession dbSession, String templateUuid, String permission, @Nullable Integer groupId) {
+    return mapper(dbSession).countGroupsWithPermission(templateUuid, permission, groupId) > 0;
   }
 
   @CheckForNull
@@ -109,6 +111,9 @@ public class PermissionTemplateDao implements Dao {
   }
 
   public PermissionTemplateDto insert(DbSession session, PermissionTemplateDto dto) {
+    if (dto.getUuid() == null) {
+      dto.setUuid(uuidFactory.create());
+    }
     mapper(session).insert(dto);
     return dto;
   }
@@ -116,29 +121,29 @@ public class PermissionTemplateDao implements Dao {
   /**
    * Each row returns a #{@link CountPerProjectPermission}
    */
-  public void usersCountByTemplateIdAndPermission(DbSession dbSession, List<Long> templateIds, ResultHandler<CountByTemplateAndPermissionDto> resultHandler) {
+  public void usersCountByTemplateUuidAndPermission(DbSession dbSession, List<String> templateUuids, ResultHandler<CountByTemplateAndPermissionDto> resultHandler) {
     Map<String, Object> parameters = new HashMap<>(1);
 
     executeLargeInputsWithoutOutput(
-      templateIds,
-      partitionedTemplateIds -> {
-        parameters.put("templateIds", partitionedTemplateIds);
-        mapper(dbSession).usersCountByTemplateIdAndPermission(parameters, resultHandler);
+      templateUuids,
+      partitionedTemplateUuids -> {
+        parameters.put("templateUuids", partitionedTemplateUuids);
+        mapper(dbSession).usersCountByTemplateUuidAndPermission(parameters, resultHandler);
       });
   }
 
   /**
    * Each row returns a #{@link CountPerProjectPermission}
    */
-  public void groupsCountByTemplateIdAndPermission(DbSession dbSession, List<Long> templateIds, ResultHandler<CountByTemplateAndPermissionDto> resultHandler) {
+  public void groupsCountByTemplateUuidAndPermission(DbSession dbSession, List<String> templateUuids, ResultHandler<CountByTemplateAndPermissionDto> resultHandler) {
     Map<String, Object> parameters = new HashMap<>(2);
     parameters.put(ANYONE_GROUP_PARAMETER, ANYONE);
 
     executeLargeInputsWithoutOutput(
-      templateIds,
-      partitionedTemplateIds -> {
-        parameters.put("templateIds", partitionedTemplateIds);
-        mapper(dbSession).groupsCountByTemplateIdAndPermission(parameters, resultHandler);
+      templateUuids,
+      partitionedTemplateUuids -> {
+        parameters.put("templateUuids", partitionedTemplateUuids);
+        mapper(dbSession).groupsCountByTemplateUuidAndPermission(parameters, resultHandler);
       });
   }
 
@@ -146,12 +151,12 @@ public class PermissionTemplateDao implements Dao {
     return mapper(dbSession).selectAllGroupPermissionTemplatesByGroupId(groupId);
   }
 
-  public void deleteById(DbSession session, long templateId) {
+  public void deleteByUuid(DbSession session, String templateUuid) {
     PermissionTemplateMapper mapper = mapper(session);
-    mapper.deleteUserPermissionsByTemplateId(templateId);
-    mapper.deleteGroupPermissionsByTemplateId(templateId);
-    session.getMapper(PermissionTemplateCharacteristicMapper.class).deleteByTemplateId(templateId);
-    mapper.deleteById(templateId);
+    mapper.deleteUserPermissionsByTemplateUuid(templateUuid);
+    mapper.deleteGroupPermissionsByTemplateUuid(templateUuid);
+    session.getMapper(PermissionTemplateCharacteristicMapper.class).deleteByTemplateUuid(templateUuid);
+    mapper.deleteByUuid(templateUuid);
   }
 
   public PermissionTemplateDto update(DbSession session, PermissionTemplateDto permissionTemplate) {
@@ -159,10 +164,10 @@ public class PermissionTemplateDao implements Dao {
     return permissionTemplate;
   }
 
-  public void insertUserPermission(DbSession session, Long templateId, Integer userId, String permission) {
+  public void insertUserPermission(DbSession session, String templateUuid, Integer userId, String permission) {
     PermissionTemplateUserDto permissionTemplateUser = new PermissionTemplateUserDto()
-      .setUuid(Uuids.create())
-      .setTemplateId(templateId)
+      .setUuid(uuidFactory.create())
+      .setTemplateUuid(templateUuid)
       .setUserId(userId)
       .setPermission(permission)
       .setCreatedAt(now())
@@ -172,9 +177,9 @@ public class PermissionTemplateDao implements Dao {
     session.commit();
   }
 
-  public void deleteUserPermission(DbSession session, Long templateId, Integer userId, String permission) {
+  public void deleteUserPermission(DbSession session, String templateUuid, Integer userId, String permission) {
     PermissionTemplateUserDto permissionTemplateUser = new PermissionTemplateUserDto()
-      .setTemplateId(templateId)
+      .setTemplateUuid(templateUuid)
       .setPermission(permission)
       .setUserId(userId);
     mapper(session).deleteUserPermission(permissionTemplateUser);
@@ -189,10 +194,10 @@ public class PermissionTemplateDao implements Dao {
     mapper(dbSession).deleteUserPermissionsByUserId(userId);
   }
 
-  public void insertGroupPermission(DbSession session, long templateId, @Nullable Integer groupId, String permission) {
+  public void insertGroupPermission(DbSession session, String templateUuid, @Nullable Integer groupId, String permission) {
     PermissionTemplateGroupDto permissionTemplateGroup = new PermissionTemplateGroupDto()
-      .setUuid(Uuids.create())
-      .setTemplateId(templateId)
+      .setUuid(uuidFactory.create())
+      .setTemplateUuid(templateUuid)
       .setPermission(permission)
       .setGroupId(groupId)
       .setCreatedAt(now())
@@ -204,9 +209,9 @@ public class PermissionTemplateDao implements Dao {
     mapper(session).insertGroupPermission(permissionTemplateGroup);
   }
 
-  public void deleteGroupPermission(DbSession session, Long templateId, @Nullable Integer groupId, String permission) {
+  public void deleteGroupPermission(DbSession session, String templateUuid, @Nullable Integer groupId, String permission) {
     PermissionTemplateGroupDto permissionTemplateGroup = new PermissionTemplateGroupDto()
-      .setTemplateId(templateId)
+      .setTemplateUuid(templateUuid)
       .setPermission(permission)
       .setGroupId(groupId);
     mapper(session).deleteGroupPermission(permissionTemplateGroup);
@@ -217,8 +222,8 @@ public class PermissionTemplateDao implements Dao {
     return mapper(dbSession).selectByName(organizationUuid, name.toUpperCase(Locale.ENGLISH));
   }
 
-  public List<String> selectPotentialPermissionsByUserIdAndTemplateId(DbSession dbSession, @Nullable Integer currentUserId, long templateId) {
-    return mapper(dbSession).selectPotentialPermissionsByUserIdAndTemplateId(currentUserId, templateId);
+  public List<String> selectPotentialPermissionsByUserIdAndTemplateUuid(DbSession dbSession, @Nullable Integer currentUserId, String templateUuid) {
+    return mapper(dbSession).selectPotentialPermissionsByUserIdAndTemplateUuid(currentUserId, templateUuid);
   }
 
   /**
@@ -239,12 +244,12 @@ public class PermissionTemplateDao implements Dao {
   public void deleteByOrganization(DbSession dbSession, String organizationUuid) {
     PermissionTemplateMapper templateMapper = mapper(dbSession);
     PermissionTemplateCharacteristicMapper templateCharacteristicMapper = dbSession.getMapper(PermissionTemplateCharacteristicMapper.class);
-    List<Long> templateIds = templateMapper.selectTemplateIdsByOrganization(organizationUuid);
-    executeLargeInputsWithoutOutput(templateIds, subList -> {
-      templateCharacteristicMapper.deleteByTemplateIds(subList);
-      templateMapper.deleteGroupPermissionsByTemplateIds(subList);
-      templateMapper.deleteUserPermissionsByTemplateIds(subList);
-      templateMapper.deleteByIds(subList);
+    List<String> templateUuids = templateMapper.selectTemplateUuidsByOrganization(organizationUuid);
+    executeLargeInputsWithoutOutput(templateUuids, subList -> {
+      templateCharacteristicMapper.deleteByTemplateUuids(subList);
+      templateMapper.deleteGroupPermissionsByTemplateUuids(subList);
+      templateMapper.deleteUserPermissionsByTemplateUuids(subList);
+      templateMapper.deleteByUuids(subList);
     });
   }
 }
index be22f57031d9bd8da82d11814893797b9a591021..53f1f0542445e2c63fc8f798b1d521451ef8043d 100644 (file)
@@ -25,7 +25,6 @@ import javax.annotation.Nullable;
 
 public class PermissionTemplateDto {
 
-  private Long id;
   private String name;
   private String organizationUuid;
   private String uuid;
@@ -34,15 +33,6 @@ public class PermissionTemplateDto {
   private Date createdAt;
   private Date updatedAt;
 
-  public Long getId() {
-    return id;
-  }
-
-  public PermissionTemplateDto setId(Long id) {
-    this.id = id;
-    return this;
-  }
-
   public String getOrganizationUuid() {
     return organizationUuid;
   }
@@ -61,23 +51,6 @@ public class PermissionTemplateDto {
     return this;
   }
 
-  /**
-   * @deprecated since 5.2 use {@link #getUuid()}
-   */
-  @Deprecated
-  public String getKee() {
-    return uuid;
-  }
-
-  /**
-   * @deprecated since 5.2 use {@link #setUuid(String)}
-   */
-  @Deprecated
-  public PermissionTemplateDto setKee(String kee) {
-    this.uuid = kee;
-    return this;
-  }
-
   /**
    * @since 5.2 the kee column is a proper uuid. Before that it was build on the name + timestamp
    */
index 50a623f7d78a1a57cadd95162940ba3ed47fde72..4c3e5acf6d0dab33e1c58e6d69952b2a05e927a8 100644 (file)
@@ -24,7 +24,7 @@ import javax.annotation.Nullable;
 
 public class PermissionTemplateGroupDto {
   private String uuid;
-  private Long templateId;
+  private String templateUuid;
   private Integer groupId;
   private String permission;
   private String groupName;
@@ -40,12 +40,12 @@ public class PermissionTemplateGroupDto {
     return this;
   }
 
-  public Long getTemplateId() {
-    return templateId;
+  public String getTemplateUuid() {
+    return templateUuid;
   }
 
-  public PermissionTemplateGroupDto setTemplateId(Long templateId) {
-    this.templateId = templateId;
+  public PermissionTemplateGroupDto setTemplateUuid(String templateUuid) {
+    this.templateUuid = templateUuid;
     return this;
   }
 
index 6ade9607e3237f2c1f256b3dea96eb6d7ef76c22..d5c6383890ddd9a03ea7ea98c1016f9eda2f7345 100644 (file)
@@ -36,13 +36,13 @@ public interface PermissionTemplateMapper {
 
   void update(PermissionTemplateDto permissionTemplate);
 
-  void deleteById(long templateId);
+  void deleteByUuid(String templateUuid);
 
-  void deleteByIds(@Param("templateIds") List<Long> templateIds);
+  void deleteByUuids(@Param("templateUuids") List<String> templateUuids);
 
-  void deleteUserPermissionsByTemplateId(long templateId);
+  void deleteUserPermissionsByTemplateUuid(String templateUuid);
 
-  void deleteUserPermissionsByTemplateIds(@Param("templateIds") List<Long> templateIds);
+  void deleteUserPermissionsByTemplateUuids(@Param("templateUuids") List<String> templateUuids);
 
   void deleteUserPermissionsByOrganization(@Param("organizationUuid") String organizationUuid, @Param("userId") int userId);
 
@@ -50,17 +50,17 @@ public interface PermissionTemplateMapper {
 
   void deleteUserPermission(PermissionTemplateUserDto permissionTemplateUser);
 
-  void deleteGroupPermissionsByTemplateId(long templateId);
+  void deleteGroupPermissionsByTemplateUuid(String templateUuid);
 
-  void deleteGroupPermissionsByTemplateIds(@Param("templateIds") List<Long> templateIds);
+  void deleteGroupPermissionsByTemplateUuids(@Param("templateUuids") List<String> templateUuids);
 
   void deleteGroupPermission(PermissionTemplateGroupDto permissionTemplateGroup);
 
   PermissionTemplateDto selectByUuid(String templateUuid);
 
-  List<PermissionTemplateUserDto> selectUserPermissionsByTemplateIdAndUserLogins(@Param("templateId") long templateId, @Param("logins") List<String> logins);
+  List<PermissionTemplateUserDto> selectUserPermissionsByTemplateUuidAndUserLogins(@Param("templateUuid") String templateUuid, @Param("logins") List<String> logins);
 
-  List<PermissionTemplateGroupDto> selectGroupPermissionsByTemplateIdAndGroupNames(@Param("templateId") long templateId, @Param("groups") List<String> groups);
+  List<PermissionTemplateGroupDto> selectGroupPermissionsByTemplateUuidAndGroupNames(@Param("templateUuid") String templateUuid, @Param("groups") List<String> groups);
 
   void insertUserPermission(PermissionTemplateUserDto permissionTemplateUser);
 
@@ -70,25 +70,25 @@ public interface PermissionTemplateMapper {
 
   PermissionTemplateDto selectByName(@Param("organizationUuid") String organizationUuid, @Param("name") String name);
 
-  List<String> selectUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateId") long templateId, RowBounds rowBounds);
+  List<String> selectUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid, RowBounds rowBounds);
 
-  int countUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateId") long templateId);
+  int countUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid);
 
-  List<String> selectGroupNamesByQueryAndTemplate(@Param("templateId") long templateId, @Param("query") PermissionQuery query, RowBounds rowBounds);
+  List<String> selectGroupNamesByQueryAndTemplate(@Param("templateUuid") String templateUuid, @Param("query") PermissionQuery query, RowBounds rowBounds);
 
-  int countGroupNamesByQueryAndTemplate(@Param("organizationUuid") String organizationUuid, @Param("query") PermissionQuery query, @Param("templateId") long templateId);
+  int countGroupNamesByQueryAndTemplate(@Param("organizationUuid") String organizationUuid, @Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid);
 
   List<PermissionTemplateDto> selectAll(@Param("organizationUuid") String organizationUuid, @Nullable @Param("upperCaseNameLikeSql") String upperCaseNameLikeSql);
 
-  void usersCountByTemplateIdAndPermission(Map<String, Object> parameters, ResultHandler<CountByTemplateAndPermissionDto> resultHandler);
+  void usersCountByTemplateUuidAndPermission(Map<String, Object> parameters, ResultHandler<CountByTemplateAndPermissionDto> resultHandler);
 
-  void groupsCountByTemplateIdAndPermission(Map<String, Object> parameters, ResultHandler<CountByTemplateAndPermissionDto> resultHandler);
+  void groupsCountByTemplateUuidAndPermission(Map<String, Object> parameters, ResultHandler<CountByTemplateAndPermissionDto> resultHandler);
 
-  List<String> selectPotentialPermissionsByUserIdAndTemplateId(@Param("userId") @Nullable Integer currentUserId, @Param("templateId") long templateId);
+  List<String> selectPotentialPermissionsByUserIdAndTemplateUuid(@Param("userId") @Nullable Integer currentUserId, @Param("templateUuid") String templateUuid);
 
-  int countGroupsWithPermission(@Param("templateId") long templateId, @Param("permission") String permission, @Nullable @Param("groupId") Integer groupId);
+  int countGroupsWithPermission(@Param("templateUuid") String templateUuid, @Param("permission") String permission, @Nullable @Param("groupId") Integer groupId);
 
-  List<Long> selectTemplateIdsByOrganization(@Param("organizationUuid") String organizationUuid);
+  List<String> selectTemplateUuidsByOrganization(@Param("organizationUuid") String organizationUuid);
 
   List<PermissionTemplateGroupDto> selectAllGroupPermissionTemplatesByGroupId(@Param("groupId") Long groupId);
 
index 1980c0d6ea220160229a54ca385d408355168e4f..1dc469d693a2d815919063071b5b6e69fbb6a4e2 100644 (file)
@@ -23,7 +23,7 @@ import java.util.Date;
 
 public class PermissionTemplateUserDto {
   private String uuid;
-  private Long templateId;
+  private String templateUuid;
   private Integer userId;
   private String permission;
   private String userName;
@@ -40,12 +40,12 @@ public class PermissionTemplateUserDto {
     return this;
   }
 
-  public Long getTemplateId() {
-    return templateId;
+  public String getTemplateUuid() {
+    return templateUuid;
   }
 
-  public PermissionTemplateUserDto setTemplateId(Long templateId) {
-    this.templateId = templateId;
+  public PermissionTemplateUserDto setTemplateUuid(String templateUuid) {
+    this.templateUuid = templateUuid;
     return this;
   }
 
index 74a4f86561b4879a3747360fcda30947c581bcc0..0e9a0f6ce45233aa0f0c8b07eb4506a59385a05d 100644 (file)
@@ -3,7 +3,7 @@
 <mapper namespace="org.sonar.db.permission.template.PermissionTemplateCharacteristicMapper">
   <sql id="columns">
     ptc.uuid,
-    ptc.template_id as templateId,
+    ptc.template_uuid as templateUuid,
     ptc.permission_key as permission,
     ptc.with_project_creator as withProjectCreator,
     ptc.created_at as createdAt,
     where ptc.uuid=#{uuid,jdbcType=VARCHAR}
   </select>
 
-  <select id="selectByTemplateIds" parameterType="long" resultType="PermissionTemplateCharacteristic">
+  <select id="selectByTemplateUuids" parameterType="String" resultType="PermissionTemplateCharacteristic">
     select
     <include refid="columns" />
     from perm_tpl_characteristics ptc
     where
-    ptc.template_id in
-    <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
-      #{templateId}
+    ptc.template_uuid in
+    <foreach collection="templateUuids" open="(" close=")" item="templateUuid" separator=",">
+      #{templateUuid}
     </foreach>
     order by ptc.created_at
   </select>
 
-  <select id="selectByPermissionAndTemplateId" parameterType="map" resultType="PermissionTemplateCharacteristic">
+  <select id="selectByPermissionAndTemplateUuid" parameterType="map" resultType="PermissionTemplateCharacteristic">
     select
     <include refid="columns" />
     from perm_tpl_characteristics ptc
-    where ptc.template_id=#{templateId}
+    where ptc.template_uuid=#{templateUuid}
     and ptc.permission_key=#{permission}
     order by ptc.created_at
   </select>
 
   <insert id="insert" parameterType="PermissionTemplateCharacteristic">
-    insert into perm_tpl_characteristics(uuid, template_id, permission_key, with_project_creator, created_at, updated_at)
-    values(#{uuid, jdbcType=VARCHAR}, #{templateId, jdbcType=BIGINT}, #{permission, jdbcType=VARCHAR},
+    insert into perm_tpl_characteristics(uuid, template_uuid, permission_key, with_project_creator, created_at, updated_at)
+    values(#{uuid, jdbcType=VARCHAR}, #{templateUuid, jdbcType=VARCHAR}, #{permission, jdbcType=VARCHAR},
     #{withProjectCreator, jdbcType=BOOLEAN}, #{createdAt, jdbcType=BIGINT}, #{updatedAt, jdbcType=BIGINT})
   </insert>
 
     where uuid=#{uuid}
   </update>
 
-  <delete id="deleteByTemplateId" parameterType="long">
+  <delete id="deleteByTemplateUuid" parameterType="String">
     DELETE FROM perm_tpl_characteristics
-    WHERE template_id = #{permissionTemplateId}
+    WHERE template_uuid = #{permissionTemplateId}
   </delete>
 
-  <delete id="deleteByTemplateIds" parameterType="long">
+  <delete id="deleteByTemplateUuids" parameterType="String">
     delete from
       perm_tpl_characteristics
     where
-      template_id in
-      <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
-        #{templateId}
+      template_uuid in
+      <foreach collection="templateUuids" open="(" close=")" item="templateUuid" separator=",">
+        #{templateUuid}
       </foreach>
   </delete>
 </mapper>
index a2d84f79c212087e134b4b2b4e7382cdb604bb09..6c3707b102ad73e21b5e6ba4924614bca3bdd492 100644 (file)
@@ -3,12 +3,12 @@
 
 <mapper namespace="org.sonar.db.permission.template.PermissionTemplateMapper">
 
-  <insert id="insert" parameterType="PermissionTemplate" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
-    INSERT INTO permission_templates (organization_uuid, name, kee, description, key_pattern, created_at, updated_at)
+  <insert id="insert" parameterType="PermissionTemplate" useGeneratedKeys="false">
+    INSERT INTO permission_templates (organization_uuid, name, uuid, description, key_pattern, created_at, updated_at)
     VALUES (
     #{organizationUuid,jdbcType=VARCHAR},
     #{name,jdbcType=VARCHAR},
-    #{kee,jdbcType=VARCHAR},
+    #{uuid,jdbcType=VARCHAR},
     #{description,jdbcType=VARCHAR},
     #{keyPattern,jdbcType=VARCHAR},
     #{createdAt},
   <update id="update" parameterType="PermissionTemplate">
     UPDATE permission_templates
     SET name = #{name}, description = #{description}, key_pattern = #{keyPattern}, updated_at = #{updatedAt}
-    WHERE id = #{id}
+    WHERE uuid = #{uuid}
   </update>
 
-  <delete id="deleteById" parameterType="long">
+  <delete id="deleteByUuid" parameterType="String">
     DELETE FROM permission_templates
-    WHERE id = #{templateId}
+    WHERE uuid = #{uuid}
   </delete>
 
-  <delete id="deleteByIds" parameterType="long">
+  <delete id="deleteByUuids" parameterType="String">
     delete from
       permission_templates
     where
-      id in <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
-        #{templateId,jdbcType=BIGINT}
+      uuid in <foreach collection="templateUuids" open="(" close=")" item="uuid" separator=",">
+        #{uuid,jdbcType=BIGINT}
       </foreach>
   </delete>
 
-  <delete id="deleteUserPermissionsByTemplateId" parameterType="long">
+  <delete id="deleteUserPermissionsByTemplateUuid" parameterType="string">
     delete from
       perm_templates_users
     where
-      template_id = #{templateId,jdbcType=BIGINT}
+      template_uuid = #{templateUuid,jdbcType=VARCHAR}
   </delete>
 
-  <delete id="deleteUserPermissionsByTemplateIds">
+  <delete id="deleteUserPermissionsByTemplateUuids">
     delete from
       perm_templates_users
     where
-      template_id in <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
-        #{templateId,jdbcType=BIGINT}
+      template_uuid in <foreach collection="templateUuids" open="(" close=")" item="templateUuid" separator=",">
+        #{templateUuid,jdbcType=BIGINT}
       </foreach>
   </delete>
 
   <delete id="deleteUserPermission" parameterType="PermissionTemplateUser">
     DELETE FROM perm_templates_users
-    WHERE template_id = #{templateId}
+    WHERE template_uuid = #{templateUuid}
     AND user_id = #{userId}
     AND permission_reference = #{permission}
   </delete>
@@ -62,7 +62,7 @@
     delete from perm_templates_users
     where
     user_id = #{userId,jdbcType=INTEGER}
-    and template_id in (select id from permission_templates where organization_uuid=#{organizationUuid,jdbcType=VARCHAR})
+    and template_uuid in (select uuid from permission_templates where organization_uuid=#{organizationUuid,jdbcType=VARCHAR})
   </delete>
 
   <delete id="deleteUserPermissionsByUserId" parameterType="integer">
     user_id = #{userId,jdbcType=INTEGER}
   </delete>
 
-  <delete id="deleteGroupPermissionsByTemplateId" parameterType="long">
+  <delete id="deleteGroupPermissionsByTemplateUuid" parameterType="String">
     delete from
       perm_templates_groups
     where
-      template_id = #{templateId,jdbcType=BIGINT}
+      template_uuid = #{templateUuid,jdbcType=VARCHAR}
   </delete>
 
-  <delete id="deleteGroupPermissionsByTemplateIds">
+  <delete id="deleteGroupPermissionsByTemplateUuids">
     delete from
       perm_templates_groups
     where
-      template_id in <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
-        #{templateId,jdbcType=BIGINT}
+      template_uuid in <foreach collection="templateUuids" open="(" close=")" item="templateUuid" separator=",">
+        #{templateUuid,jdbcType=VARCHAR}
       </foreach>
   </delete>
 
   <delete id="deleteGroupPermission" parameterType="PermissionTemplateGroup">
     DELETE FROM perm_templates_groups
-    WHERE template_id = #{templateId}
+    WHERE template_uuid = #{templateUuid}
     AND permission_reference = #{permission}
     AND
     <choose>
   </delete>
 
   <insert id="insertUserPermission" parameterType="PermissionTemplateUser">
-    INSERT INTO perm_templates_users (uuid, template_id, user_id, permission_reference, created_at, updated_at)
-    VALUES (#{uuid}, #{templateId}, #{userId}, #{permission}, #{createdAt}, #{updatedAt})
+    INSERT INTO perm_templates_users (uuid, template_uuid, user_id, permission_reference, created_at, updated_at)
+    VALUES (#{uuid}, #{templateUuid}, #{userId}, #{permission}, #{createdAt}, #{updatedAt})
   </insert>
 
   <insert id="insertGroupPermission" parameterType="PermissionTemplateGroup">
-    INSERT INTO perm_templates_groups (uuid, template_id, group_id, permission_reference, created_at, updated_at)
+    INSERT INTO perm_templates_groups (uuid, template_uuid, group_id, permission_reference, created_at, updated_at)
     VALUES (
     #{uuid,jdbcType=VARCHAR},
-    #{templateId,jdbcType=BIGINT},
+    #{templateUuid,jdbcType=VARCHAR},
     #{groupId,jdbcType=INTEGER},
     #{permission,jdbcType=VARCHAR},
     #{createdAt,jdbcType=TIMESTAMP},
   <sql id="userLoginsByQueryAndTemplate">
     FROM users u
     LEFT JOIN perm_templates_users ptu ON ptu.user_id=u.id
-      AND ptu.template_id=#{templateId}
+      AND ptu.template_uuid=#{templateUuid}
     INNER JOIN organization_members om ON u.id=om.user_id
       AND om.organization_uuid=#{query.organizationUuid}
     <where>
       g.id AS group_id,
       g.name AS name,
       ptg.permission_reference AS permission,
-      ptg.template_id AS templateId
+      ptg.template_uuid AS templateUuid
     FROM groups g
     LEFT JOIN perm_templates_groups ptg ON
       ptg.group_id=g.id
-      AND ptg.template_id=#{templateId}
+      AND ptg.template_uuid=#{templateUuid}
     where
       g.organization_uuid=#{query.organizationUuid,jdbcType=VARCHAR}
     UNION ALL
       0 AS group_id,
       'Anyone' AS name,
       ptg.permission_reference AS permission,
-      ptg.template_id AS templateId
+      ptg.template_uuid AS templateUuid
     FROM groups g
     LEFT JOIN perm_templates_groups ptg ON
-      ptg.template_id=#{templateId}
+      ptg.template_uuid=#{templateUuid}
     <where>
       g.organization_uuid=#{query.organizationUuid,jdbcType=VARCHAR}
       <if test="query.withAtLeastOnePermission()">
       </if>
       <if test="query.withAtLeastOnePermission()">
         AND groups.permission IS NOT NULL
-        AND groups.templateId=#{templateId}
+        AND groups.templateUuid=#{templateUuid}
         <if test="query.permission != null">
           AND groups.permission=#{query.permission}
         </if>
   </sql>
 
   <sql id="templateColumns">
-    id, organization_uuid as organizationUuid, name, kee, description, key_pattern AS keyPattern, created_at AS createdAt, updated_at AS updatedAt
+    organization_uuid as organizationUuid, name, uuid, description, key_pattern AS keyPattern, created_at AS createdAt, updated_at AS updatedAt
   </sql>
 
   <select id="selectByUuid" parameterType="String" resultType="PermissionTemplate">
     SELECT
     <include refid="templateColumns"/>
     FROM permission_templates
-    WHERE kee=#{uuid}
+    WHERE uuid=#{uuid}
   </select>
 
   <select id="selectAll" parameterType="map" resultType="PermissionTemplate">
 
   <sql id="permissionTemplateUserColumns">
     ptu.uuid,
-    ptu.template_id as templateId,
+    ptu.template_uuid as templateUuid,
     ptu.permission_reference AS permission,
     ptu.user_id AS userId,
     u.name AS userName,
     ptu.updated_at AS updatedAt
   </sql>
 
-  <select id="selectUserPermissionsByTemplateIdAndUserLogins" parameterType="Long" resultType="PermissionTemplateUser">
+  <select id="selectUserPermissionsByTemplateUuidAndUserLogins" parameterType="String" resultType="PermissionTemplateUser">
     SELECT
     <include refid="permissionTemplateUserColumns"/>
     FROM perm_templates_users ptu
     INNER JOIN users u ON u.id = ptu.user_id AND u.active = ${_true}
     <where>
-      AND ptu.template_id = #{templateId}
+      AND ptu.template_uuid = #{templateUuid}
       <if test="!logins.isEmpty()">
         AND u.login IN <foreach collection="logins" open="(" close=")" item="login" separator=",">
           #{login}
     </where>
   </select>
 
-  <select id="selectGroupPermissionsByTemplateIdAndGroupNames" parameterType="Long" resultType="PermissionTemplateGroup">
+  <select id="selectGroupPermissionsByTemplateUuidAndGroupNames" parameterType="String" resultType="PermissionTemplateGroup">
     SELECT
       sub.uuid,
-      sub.templateId,
+      sub.templateUuid,
       sub.permission,
       sub.groupId,
       sub.groupName,
     FROM  (
       SELECT
         ptg.uuid,
-        ptg.template_id as templateId,
+        ptg.template_uuid as templateUuid,
         ptg.permission_reference AS permission,
         ptg.group_id AS groupId,
         g.name AS groupName,
       UNION ALL
         SELECT
           ptg.uuid,
-          ptg.template_id as templateId,
+          ptg.template_uuid as templateUuid,
           ptg.permission_reference AS permission,
           0 AS groupId,
           'Anyone' AS groupName,
         WHERE ptg.group_id IS NULL
     ) sub
     <where>
-      sub.templateId=#{templateId}
+      sub.templateUuid=#{templateUuid}
       <if test="!groups.isEmpty()">
         AND sub.groupName IN <foreach collection="groups" open="(" close=")" item="group" separator=",">
         #{group}
     </where>
   </select>
 
-  <select id="selectPotentialPermissionsByUserIdAndTemplateId" parameterType="map" resultType="String">
+  <select id="selectPotentialPermissionsByUserIdAndTemplateUuid" parameterType="map" resultType="String">
     <if test="userId!=null">
       -- from template users
       select ptu.permission_reference as permission_key
       from perm_templates_users ptu
       <where>
         and ptu.user_id=#{userId}
-        and ptu.template_id=#{templateId}
+        and ptu.template_uuid=#{templateUuid}
       </where>
       UNION
       -- from template groups except anyone group
       inner join groups_users gu on ptg.group_id = gu.group_id
       <where>
         and gu.user_id=#{userId}
-        and ptg.template_id=#{templateId}
+        and ptg.template_uuid=#{templateUuid}
       </where>
       UNION
       -- from template characteristics
       from perm_tpl_characteristics ptc
       <where>
         and with_project_creator = ${_true}
-        and ptc.template_id = #{templateId}
+        and ptc.template_uuid = #{templateUuid}
       </where>
       UNION
     </if>
     -- from anyone group
     select ptg.permission_reference as permission_key
     from perm_templates_groups ptg
-    where ptg.template_id=#{templateId}
+    where ptg.template_uuid=#{templateUuid}
     and ptg.group_id IS NULL
   </select>
 
-  <select id="usersCountByTemplateIdAndPermission" parameterType="map"
+  <select id="usersCountByTemplateUuidAndPermission" parameterType="map"
           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
-    SELECT ptu.template_id as templateId, ptu.permission_reference as permission, count(u.login) as count
+    SELECT ptu.template_uuid as templateUuid, ptu.permission_reference as permission, count(u.login) as count
     FROM users u
     INNER JOIN perm_templates_users ptu ON ptu.user_id=u.id
-    AND ptu.template_id in
-    <foreach collection="templateIds" open="(" close=")" item="id" separator=",">
+    AND ptu.template_uuid in
+    <foreach collection="templateUuids" open="(" close=")" item="id" separator=",">
       #{id}
     </foreach>
     <where>
       AND u.active = ${_true}
     </where>
-    GROUP BY ptu.template_id, ptu.permission_reference
+    GROUP BY ptu.template_uuid, ptu.permission_reference
   </select>
 
-  <select id="groupsCountByTemplateIdAndPermission" parameterType="map"
+  <select id="groupsCountByTemplateUuidAndPermission" parameterType="map"
           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
-    SELECT count(1) as count, permission, templateId
+    SELECT count(1) as count, permission, templateUuid
     FROM
-    (SELECT g.name as name, ptg.permission_reference as permission, ptg.template_id as templateId
+    (SELECT g.name as name, ptg.permission_reference as permission, ptg.template_uuid as templateUuid
     FROM groups g
     INNER JOIN perm_templates_groups ptg ON ptg.group_id=g.id
     UNION
     -- Add Anyone group permission
-    SELECT #{anyoneGroup} as name, ptg.permission_reference as permission, ptg.template_id as templateId
+    SELECT #{anyoneGroup} as name, ptg.permission_reference as permission, ptg.template_uuid as templateUuid
     FROM perm_templates_groups ptg
     <where>
       AND ptg.group_id IS NULL
     </where>
     ) groups
     <where>
-      AND groups.templateId in
-      <foreach collection="templateIds" open="(" close=")" item="id" separator=",">
+      AND groups.templateUuid in
+      <foreach collection="templateUuids" open="(" close=")" item="id" separator=",">
         #{id}
       </foreach>
     </where>
-    GROUP BY groups.permission, groups.templateId
+    GROUP BY groups.permission, groups.templateUuid
   </select>
 
   <select id="countGroupsWithPermission" resultType="int" parameterType="map">
     select count(1)
     from perm_templates_groups ptg
-    where ptg.template_id = #{templateId}
+    where ptg.template_uuid = #{templateUuid}
     and ptg.permission_reference = #{permission}
     and
     <if test="groupId == null">
     </if>
   </select>
 
-  <select id="selectTemplateIdsByOrganization" resultType="Long">
+  <select id="selectTemplateUuidsByOrganization" resultType="String">
     select
-      id
+      uuid
     from
       permission_templates
     where
   <select id="selectAllGroupPermissionTemplatesByGroupId" parameterType="Long" resultType="PermissionTemplateGroup">
     SELECT
       ptg.uuid,
-      ptg.template_id as templateId,
+      ptg.template_uuid as templateUuid,
       ptg.permission_reference AS permission,
       ptg.group_id AS groupId,
       g.name AS groupName,
index 22a331ae4ab840004673f861da5113b0b7a83d92..e30a39e2ce3a0c23d48dfd730ad67a93d9e13045 100644 (file)
@@ -552,46 +552,45 @@ CREATE UNIQUE INDEX "ORGANIZATION_KEY" ON "ORGANIZATIONS"("KEE");
 
 CREATE TABLE "PERM_TEMPLATES_GROUPS"(
     "GROUP_ID" INTEGER,
-    "TEMPLATE_ID" INTEGER NOT NULL,
     "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
     "CREATED_AT" TIMESTAMP,
     "UPDATED_AT" TIMESTAMP,
-    "UUID" VARCHAR(40) NOT NULL
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL
 );
 ALTER TABLE "PERM_TEMPLATES_GROUPS" ADD CONSTRAINT "PK_PERM_TEMPLATES_GROUPS" PRIMARY KEY("UUID");
 
 CREATE TABLE "PERM_TEMPLATES_USERS"(
     "USER_ID" INTEGER NOT NULL,
-    "TEMPLATE_ID" INTEGER NOT NULL,
     "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
     "CREATED_AT" TIMESTAMP,
     "UPDATED_AT" TIMESTAMP,
-    "UUID" VARCHAR(40) NOT NULL
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL
 );
 ALTER TABLE "PERM_TEMPLATES_USERS" ADD CONSTRAINT "PK_PERM_TEMPLATES_USERS" PRIMARY KEY("UUID");
 
 CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
-    "TEMPLATE_ID" INTEGER NOT NULL,
     "PERMISSION_KEY" VARCHAR(64) NOT NULL,
     "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
     "CREATED_AT" BIGINT NOT NULL,
     "UPDATED_AT" BIGINT NOT NULL,
-    "UUID" VARCHAR(40) NOT NULL
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL
 );
 ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
-CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_ID", "PERMISSION_KEY");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_UUID", "PERMISSION_KEY");
 
 CREATE TABLE "PERMISSION_TEMPLATES"(
-    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
     "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
     "NAME" VARCHAR(100) NOT NULL,
-    "KEE" VARCHAR(100) NOT NULL,
     "DESCRIPTION" VARCHAR(4000),
     "CREATED_AT" TIMESTAMP,
     "UPDATED_AT" TIMESTAMP,
-    "KEY_PATTERN" VARCHAR(500)
+    "KEY_PATTERN" VARCHAR(500),
+    "UUID" VARCHAR(40) NOT NULL
 );
-ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("UUID");
 
 CREATE TABLE "PLUGINS"(
     "UUID" VARCHAR(40) NOT NULL,
index 29165c65c62a53f574d525661460800198175348..1266bad5aa37cc9e460cf8a30eeb6119aa94f3ba 100644 (file)
@@ -59,13 +59,13 @@ public class GroupWithPermissionTemplateDaoTest {
     GroupDto group3 = db.users().insertGroup(organization, "Group-3");
 
     PermissionTemplateDto template = permissionTemplateDbTester.insertTemplate(organization);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), USER);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), ADMIN);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group2.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), USER);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), ADMIN);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group2.getId(), PROVISIONING);
 
     PermissionTemplateDto anotherTemplate = permissionTemplateDbTester.insertTemplate(organization);
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), null, USER);
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), group1.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), null, USER);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), group1.getId(), PROVISIONING);
 
     assertThat(selectGroupNamesByQueryAndTemplate(builder(), organization, template))
       .containsOnly("Group-1", "Group-2", "Group-3", "Anyone");
@@ -82,7 +82,7 @@ public class GroupWithPermissionTemplateDaoTest {
     assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("p-2"), organization, template))
       .containsOnly("Group-2");
 
-    assertThat(selectGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(), organization, 123L))
+    assertThat(selectGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(), organization, "123"))
       .isEmpty();
     assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("unknown"), organization, template))
       .isEmpty();
@@ -99,7 +99,7 @@ public class GroupWithPermissionTemplateDaoTest {
     permissionTemplateDbTester.addGroupToTemplate(template, group3, UserRole.USER);
 
     PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).build();
-    assertThat(underTest.selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getId()))
+    assertThat(underTest.selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getUuid()))
       .containsExactly("Anyone", group3.getName(), group1.getName(), group2.getName());
   }
 
@@ -115,7 +115,7 @@ public class GroupWithPermissionTemplateDaoTest {
     permissionTemplateDbTester.addGroupToTemplate(template, db.users().selectGroup(organization, lastGroupName).get(), UserRole.USER);
 
     PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).build();
-    assertThat(underTest.selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getId()))
+    assertThat(underTest.selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getUuid()))
       .hasSize(DEFAULT_PAGE_SIZE)
       .startsWith("Anyone", lastGroupName, "Group-1");
   }
@@ -134,7 +134,7 @@ public class GroupWithPermissionTemplateDaoTest {
     permissionTemplateDbTester.addGroupToTemplate(template, db.users().selectGroup(organization, lastGroupName).get(), UserRole.USER);
 
     PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).build();
-    assertThat(underTest.selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getId()))
+    assertThat(underTest.selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getUuid()))
       .hasSize(DEFAULT_PAGE_SIZE)
       .startsWith("Anyone", lastGroupName, "Group-1");
   }
@@ -159,7 +159,7 @@ public class GroupWithPermissionTemplateDaoTest {
 
     GroupDto group = db.users().insertGroup(organization, "Group");
     PermissionTemplateDto otherTemplate = permissionTemplateDbTester.insertTemplate(organization);
-    permissionTemplateDbTester.addGroupToTemplate(otherTemplate.getId(), group.getId(), USER);
+    permissionTemplateDbTester.addGroupToTemplate(otherTemplate.getUuid(), group.getId(), USER);
 
     assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("nyo"), organization, template))
       .containsExactly("Anyone");
@@ -173,13 +173,13 @@ public class GroupWithPermissionTemplateDaoTest {
     GroupDto group3 = db.users().insertGroup(organization, "Group-3");
 
     PermissionTemplateDto template = permissionTemplateDbTester.insertTemplate(organization);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), USER);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), ADMIN);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group2.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), USER);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), ADMIN);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group2.getId(), PROVISIONING);
 
     PermissionTemplateDto anotherTemplate = permissionTemplateDbTester.insertTemplate(organization);
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), null, USER);
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), group1.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), null, USER);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), group1.getId(), PROVISIONING);
 
     assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()), organization, template))
       .isEqualTo(4);
@@ -195,7 +195,7 @@ public class GroupWithPermissionTemplateDaoTest {
     assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("p-2"), organization, template))
       .isEqualTo(1);
 
-    assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(), organization, 123L))
+    assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(), organization, "123"))
       .isZero();
     assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("unknown"), organization, template))
       .isZero();
@@ -208,33 +208,33 @@ public class GroupWithPermissionTemplateDaoTest {
     GroupDto group3 = db.users().insertGroup(newGroupDto().setName("Group-3"));
 
     PermissionTemplateDto template = permissionTemplateDbTester.insertTemplate();
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), USER);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), ADMIN);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group2.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), USER);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), ADMIN);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group2.getId(), PROVISIONING);
 
     PermissionTemplateDto anotherTemplate = permissionTemplateDbTester.insertTemplate();
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), null, USER);
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), group1.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), null, USER);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), group1.getId(), PROVISIONING);
 
-    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getId(), asList("Group-1")))
+    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getUuid(), asList("Group-1")))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(group1.getId(), "Group-1", USER),
         tuple(group1.getId(), "Group-1", ADMIN));
 
-    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, anotherTemplate.getId(), asList("Group-1")))
+    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, anotherTemplate.getUuid(), asList("Group-1")))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(group1.getId(), "Group-1", PROVISIONING));
 
-    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, anotherTemplate.getId(), asList("Anyone")))
+    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, anotherTemplate.getUuid(), asList("Anyone")))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(0, "Anyone", USER));
 
-    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getId(), asList("Group-1", "Group-2", "Anyone"))).hasSize(3);
-    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getId(), asList("Unknown"))).isEmpty();
-    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getId(), Collections.emptyList())).isEmpty();
+    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getUuid(), asList("Group-1", "Group-2", "Anyone"))).hasSize(3);
+    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getUuid(), asList("Unknown"))).isEmpty();
+    assertThat(underTest.selectGroupPermissionsByTemplateIdAndGroupNames(session, template.getUuid(), Collections.emptyList())).isEmpty();
   }
 
   @Test
@@ -244,43 +244,43 @@ public class GroupWithPermissionTemplateDaoTest {
     GroupDto group3 = db.users().insertGroup(newGroupDto().setName("Group-3"));
 
     PermissionTemplateDto template = permissionTemplateDbTester.insertTemplate();
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), USER);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group1.getId(), ADMIN);
-    permissionTemplateDbTester.addGroupToTemplate(template.getId(), group2.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), USER);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group1.getId(), ADMIN);
+    permissionTemplateDbTester.addGroupToTemplate(template.getUuid(), group2.getId(), PROVISIONING);
 
     PermissionTemplateDto anotherTemplate = permissionTemplateDbTester.insertTemplate();
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), null, USER);
-    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), group1.getId(), PROVISIONING);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), null, USER);
+    permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getUuid(), group1.getId(), PROVISIONING);
 
-    assertThat(underTest.selectGroupPermissionsByTemplateId(session, template.getId()))
+    assertThat(underTest.selectGroupPermissionsByTemplateUuid(session, template.getUuid()))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(group1.getId(), "Group-1", USER),
         tuple(group1.getId(), "Group-1", ADMIN),
         tuple(group2.getId(), "Group-2", PROVISIONING));
-    assertThat(underTest.selectGroupPermissionsByTemplateId(session, anotherTemplate.getId()))
+    assertThat(underTest.selectGroupPermissionsByTemplateUuid(session, anotherTemplate.getUuid()))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(group1.getId(), "Group-1", PROVISIONING),
         tuple(0, "Anyone", USER));
 
-    assertThat(underTest.selectGroupPermissionsByTemplateId(session, 321L)).isEmpty();
+    assertThat(underTest.selectGroupPermissionsByTemplateUuid(session, "321")).isEmpty();
   }
 
   private List<String> selectGroupNamesByQueryAndTemplate(PermissionQuery.Builder queryBuilder, OrganizationDto organization, PermissionTemplateDto permissionTemplateDto) {
-    return selectGroupNamesByQueryAndTemplate(queryBuilder.setOrganizationUuid(organization.getUuid()).build(), organization, permissionTemplateDto.getId());
+    return selectGroupNamesByQueryAndTemplate(queryBuilder.setOrganizationUuid(organization.getUuid()).build(), organization, permissionTemplateDto.getUuid());
   }
 
-  private List<String> selectGroupNamesByQueryAndTemplate(PermissionQuery query, OrganizationDto organization, long templateId) {
-    return underTest.selectGroupNamesByQueryAndTemplate(session, query, templateId);
+  private List<String> selectGroupNamesByQueryAndTemplate(PermissionQuery query, OrganizationDto organization, String templateUuid) {
+    return underTest.selectGroupNamesByQueryAndTemplate(session, query, templateUuid);
   }
 
   private int countGroupNamesByQueryAndTemplate(PermissionQuery.Builder queryBuilder, OrganizationDto organization, PermissionTemplateDto permissionTemplateDto) {
-    return countGroupNamesByQueryAndTemplate(queryBuilder.build(), organization, permissionTemplateDto.getId());
+    return countGroupNamesByQueryAndTemplate(queryBuilder.build(), organization, permissionTemplateDto.getUuid());
   }
 
-  private int countGroupNamesByQueryAndTemplate(PermissionQuery query, OrganizationDto organization, long templateId) {
-    return underTest.countGroupNamesByQueryAndTemplate(session, query, organization.getUuid(), templateId);
+  private int countGroupNamesByQueryAndTemplate(PermissionQuery query, OrganizationDto organization, String templateUuid) {
+    return underTest.countGroupNamesByQueryAndTemplate(session, query, organization.getUuid(), templateUuid);
   }
 
 }
index 89a501267cc9d41347c2c01770a60e2f8ce981f3..891d84d56865e1ffdde8782861f33680d9dadfec 100644 (file)
@@ -30,7 +30,7 @@ import org.sonar.db.DbSession;
 import org.sonar.db.DbTester;
 
 import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.primitives.Longs.asList;
+import static java.util.Arrays.asList;
 import static java.util.Collections.emptyList;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -43,37 +43,37 @@ public class PermissionTemplateCharacteristicDaoTest {
   private PermissionTemplateCharacteristicDao underTest = new PermissionTemplateCharacteristicDao();
 
   @Test
-  public void selectByTemplateId_filter_by_template_id() {
+  public void selectByTemplateId_filter_by_template_uuid() {
     PermissionTemplateCharacteristicDto templatePermission1 = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid1")
       .setPermission(UserRole.ADMIN)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
     PermissionTemplateCharacteristicDto templatePermission2 = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid2")
       .setPermission(UserRole.USER)
-      .setTemplateId(2L)
+      .setTemplateUuid("2")
       .setWithProjectCreator(false)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
     PermissionTemplateCharacteristicDto templatePermission3 = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid3")
       .setPermission(UserRole.USER)
-      .setTemplateId(3L)
+      .setTemplateUuid("3")
       .setWithProjectCreator(false)
       .setCreatedAt(1_000_000_001L)
       .setUpdatedAt(2_000_000_000L));
     PermissionTemplateCharacteristicDto templatePermissionForAnotherTemplate = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid4")
       .setPermission(UserRole.ADMIN)
-      .setTemplateId(42L)
+      .setTemplateUuid("42")
       .setWithProjectCreator(true)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
 
-    List<PermissionTemplateCharacteristicDto> result = underTest.selectByTemplateIds(dbSession, newArrayList(1L, 2L, 3L));
+    List<PermissionTemplateCharacteristicDto> result = underTest.selectByTemplateUuids(dbSession, newArrayList("1", "2", "3"));
     assertThat(result)
       .hasSize(3)
       .extracting("uuid")
@@ -84,8 +84,8 @@ public class PermissionTemplateCharacteristicDaoTest {
   }
 
   @Test
-  public void selectByTemplateId_for_empty_list_of_template_id() {
-    List<PermissionTemplateCharacteristicDto> result = underTest.selectByTemplateIds(dbSession, emptyList());
+  public void selectByTemplateId_for_empty_list_of_template_uuid() {
+    List<PermissionTemplateCharacteristicDto> result = underTest.selectByTemplateUuids(dbSession, emptyList());
 
     assertThat(result).isEmpty();
   }
@@ -95,26 +95,26 @@ public class PermissionTemplateCharacteristicDaoTest {
     PermissionTemplateCharacteristicDto templatePermission1 = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid1")
       .setPermission(UserRole.ADMIN)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
     underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid2")
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(false)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
     underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid3")
       .setPermission(UserRole.ADMIN)
-      .setTemplateId(42L)
+      .setTemplateUuid("42")
       .setWithProjectCreator(true)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
 
-    Optional<PermissionTemplateCharacteristicDto> result = underTest.selectByPermissionAndTemplateId(dbSession, UserRole.ADMIN, 1L);
+    Optional<PermissionTemplateCharacteristicDto> result = underTest.selectByPermissionAndTemplateId(dbSession, UserRole.ADMIN, "1");
 
     assertThat(result).isPresent();
     assertThat(result.get()).isEqualToComparingFieldByField(templatePermission1);
@@ -125,7 +125,7 @@ public class PermissionTemplateCharacteristicDaoTest {
     PermissionTemplateCharacteristicDto expectedResult = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid")
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(123_456_789L)
       .setUpdatedAt(2_000_000_000L));
@@ -140,7 +140,7 @@ public class PermissionTemplateCharacteristicDaoTest {
     PermissionTemplateCharacteristicDto insertedDto = underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid")
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(123_456_789L)
       .setUpdatedAt(2_000_000_000L));
@@ -148,14 +148,14 @@ public class PermissionTemplateCharacteristicDaoTest {
     underTest.update(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid")
       .setPermission("PERMISSION_ARE_NOT_UPDATABLE")
-      .setTemplateId(42L)
+      .setTemplateUuid("42")
       .setCreatedAt(42L)
       .setWithProjectCreator(false)
       .setUpdatedAt(3_000_000_000L));
 
-    PermissionTemplateCharacteristicDto result = underTest.selectByPermissionAndTemplateId(dbSession, insertedDto.getPermission(), insertedDto.getTemplateId()).get();
-    assertThat(result).extracting("uuid", "permission", "templateId", "createdAt")
-      .containsExactly(insertedDto.getUuid(), insertedDto.getPermission(), insertedDto.getTemplateId(), insertedDto.getCreatedAt());
+    PermissionTemplateCharacteristicDto result = underTest.selectByPermissionAndTemplateId(dbSession, insertedDto.getPermission(), insertedDto.getTemplateUuid()).get();
+    assertThat(result).extracting("uuid", "permission", "templateUuid", "createdAt")
+      .containsExactly(insertedDto.getUuid(), insertedDto.getPermission(), insertedDto.getTemplateUuid(), insertedDto.getCreatedAt());
     assertThat(result).extracting("withProjectCreator", "updatedAt")
       .containsExactly(false, 3_000_000_000L);
   }
@@ -167,7 +167,7 @@ public class PermissionTemplateCharacteristicDaoTest {
     underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid")
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setUpdatedAt(2_000_000_000L));
   }
@@ -179,7 +179,7 @@ public class PermissionTemplateCharacteristicDaoTest {
     underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid")
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(2_000_000_000L));
   }
@@ -190,35 +190,35 @@ public class PermissionTemplateCharacteristicDaoTest {
 
     underTest.update(dbSession, new PermissionTemplateCharacteristicDto()
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(123_456_789L)
       .setUpdatedAt(2_000_000_000L));
   }
 
   @Test
-  public void delete_by_permission_template_id() {
+  public void delete_by_permission_template_uuid() {
     underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid1")
       .setPermission(UserRole.USER)
-      .setTemplateId(1L)
+      .setTemplateUuid("1")
       .setWithProjectCreator(true)
       .setCreatedAt(123_456_789L)
       .setUpdatedAt(2_000_000_000L));
     underTest.insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid("uuid2")
       .setPermission(UserRole.USER)
-      .setTemplateId(2L)
+      .setTemplateUuid("2")
       .setWithProjectCreator(true)
       .setCreatedAt(123_456_789L)
       .setUpdatedAt(2_000_000_000L));
 
-    assertThat(underTest.selectByTemplateIds(dbSession, asList(1L))).hasSize(1);
-    assertThat(underTest.selectByTemplateIds(dbSession, asList(1L, 2L))).hasSize(2);
+    assertThat(underTest.selectByTemplateUuids(dbSession, asList("1"))).hasSize(1);
+    assertThat(underTest.selectByTemplateUuids(dbSession, asList("1", "2"))).hasSize(2);
 
-    dbSession.getMapper(PermissionTemplateCharacteristicMapper.class).deleteByTemplateId(1L);
+    dbSession.getMapper(PermissionTemplateCharacteristicMapper.class).deleteByTemplateUuid("1");
 
-    assertThat(underTest.selectByTemplateIds(dbSession, asList(1L))).hasSize(0);
-    assertThat(underTest.selectByTemplateIds(dbSession, asList(1L, 2L))).hasSize(1);
+    assertThat(underTest.selectByTemplateUuids(dbSession, asList("1"))).hasSize(0);
+    assertThat(underTest.selectByTemplateUuids(dbSession, asList("1", "2"))).hasSize(1);
   }
 }
index 6839386155cf72fb5d18ff98bab75103b950834b..70677469e136a782d54cdd3da8c86beeb8068209 100644 (file)
@@ -28,13 +28,15 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.sonar.api.utils.System2;
 import org.sonar.api.web.UserRole;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
 import org.sonar.db.DbSession;
 import org.sonar.db.DbTester;
 import org.sonar.db.organization.OrganizationDto;
 import org.sonar.db.user.GroupDto;
 import org.sonar.db.user.UserDto;
 
-import static com.google.common.primitives.Longs.asList;
+import static java.util.Arrays.asList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.tuple;
 import static org.mockito.Mockito.mock;
@@ -60,8 +62,9 @@ public class PermissionTemplateDaoTest {
   private System2 system2 = mock(System2.class);
   private DbSession dbSession = db.getSession();
   private PermissionTemplateDbTester templateDb = db.permissionTemplates();
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
 
-  private PermissionTemplateDao underTest = new PermissionTemplateDao(system2);
+  private PermissionTemplateDao underTest = new PermissionTemplateDao(uuidFactory, system2);
 
   @Before
   public void setUp() {
@@ -135,7 +138,7 @@ public class PermissionTemplateDaoTest {
     PermissionTemplateDto t3InOrg1 = templateDb.insertTemplate(newPermissionTemplateDto().setName("hijkl").setOrganizationUuid("org2"));
     PermissionTemplateDto t4InOrg2 = templateDb.insertTemplate(newPermissionTemplateDto().setName("cdefgh").setOrganizationUuid("org2"));
 
-    assertThat(underTest.selectAll(dbSession, "org1", "def")).extracting(PermissionTemplateDto::getId).containsExactly(t1InOrg1.getId(), t2InOrg1.getId());
+    assertThat(underTest.selectAll(dbSession, "org1", "def")).extracting(PermissionTemplateDto::getUuid).containsExactly(t1InOrg1.getUuid(), t2InOrg1.getUuid());
     assertThat(underTest.selectAll(dbSession, "org1", "missing")).isEmpty();
   }
 
@@ -156,7 +159,7 @@ public class PermissionTemplateDaoTest {
       .setKeyPattern("new_regexp")
       .setUpdatedAt(NOW)
       // Invariant fields, should not be updated
-      .setUuid("new UUID")
+      .setUuid("ABCD")
       .setOrganizationUuid("new org")
       .setCreatedAt(NOW));
     db.commit();
@@ -183,22 +186,22 @@ public class PermissionTemplateDaoTest {
     templateDb.addGroupToTemplate(permissionTemplate1, group2, "user");
     templateDb.addAnyoneToTemplate(permissionTemplate1, "admin");
     templateDb.addAnyoneToTemplate(permissionTemplate2, "admin");
-    templateDb.addProjectCreatorToTemplate(permissionTemplate1.getId(), "user");
-    templateDb.addProjectCreatorToTemplate(permissionTemplate2.getId(), "user");
+    templateDb.addProjectCreatorToTemplate(permissionTemplate1.getUuid(), "user");
+    templateDb.addProjectCreatorToTemplate(permissionTemplate2.getUuid(), "user");
 
-    underTest.deleteById(dbSession, permissionTemplate1.getId());
+    underTest.deleteByUuid(dbSession, permissionTemplate1.getUuid());
     dbSession.commit();
 
     assertThat(underTest.selectAll(db.getSession(), db.getDefaultOrganization().getUuid(), null))
       .extracting(PermissionTemplateDto::getUuid)
       .containsOnly(permissionTemplate2.getUuid());
-    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate1.getId())).isEmpty();
-    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate2.getId())).hasSize(1);
-    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateId(db.getSession(), permissionTemplate1.getId())).isEmpty();
-    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateId(db.getSession(), permissionTemplate2.getId())).hasSize(1);
-    assertThat(db.getDbClient().permissionTemplateCharacteristicDao().selectByTemplateIds(db.getSession(), asList(permissionTemplate1.getId(), permissionTemplate2.getId())))
-      .extracting(PermissionTemplateCharacteristicDto::getTemplateId)
-      .containsOnly(permissionTemplate2.getId());
+    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate1.getUuid())).isEmpty();
+    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate2.getUuid())).hasSize(1);
+    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateUuid(db.getSession(), permissionTemplate1.getUuid())).isEmpty();
+    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateUuid(db.getSession(), permissionTemplate2.getUuid())).hasSize(1);
+    assertThat(db.getDbClient().permissionTemplateCharacteristicDao().selectByTemplateUuids(db.getSession(), asList(permissionTemplate1.getUuid(), permissionTemplate2.getUuid())))
+      .extracting(PermissionTemplateCharacteristicDto::getTemplateUuid)
+      .containsOnly(permissionTemplate2.getUuid());
   }
 
   @Test
@@ -206,12 +209,13 @@ public class PermissionTemplateDaoTest {
     PermissionTemplateDto permissionTemplate = templateDb.insertTemplate(db.getDefaultOrganization());
     UserDto user = db.users().insertUser();
 
-    underTest.insertUserPermission(dbSession, permissionTemplate.getId(), user.getId(), "user");
+    underTest.insertUserPermission(dbSession, permissionTemplate.getUuid(), user.getId(), "user");
 
-    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate.getId()))
-      .extracting(PermissionTemplateUserDto::getTemplateId, PermissionTemplateUserDto::getUserId, PermissionTemplateUserDto::getPermission, PermissionTemplateUserDto::getCreatedAt,
+    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate.getUuid()))
+      .extracting(PermissionTemplateUserDto::getTemplateUuid, PermissionTemplateUserDto::getUserId, PermissionTemplateUserDto::getPermission,
+        PermissionTemplateUserDto::getCreatedAt,
         PermissionTemplateUserDto::getUpdatedAt)
-      .containsOnly(tuple(permissionTemplate.getId(), user.getId(), "user", NOW, NOW));
+      .containsOnly(tuple(permissionTemplate.getUuid(), user.getId(), "user", NOW, NOW));
   }
 
   @Test
@@ -223,9 +227,9 @@ public class PermissionTemplateDaoTest {
     templateDb.addUserToTemplate(permissionTemplate, user1, "admin");
     templateDb.addUserToTemplate(permissionTemplate, user2, "user");
 
-    underTest.deleteUserPermission(dbSession, permissionTemplate.getId(), user1.getId(), "user");
+    underTest.deleteUserPermission(dbSession, permissionTemplate.getUuid(), user1.getId(), "user");
 
-    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate.getId()))
+    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), permissionTemplate.getUuid()))
       .extracting(PermissionTemplateUserDto::getUserId, PermissionTemplateUserDto::getPermission)
       .containsOnly(tuple(user1.getId(), "admin"), tuple(user2.getId(), "user"));
   }
@@ -235,14 +239,14 @@ public class PermissionTemplateDaoTest {
     PermissionTemplateDto permissionTemplate = templateDb.insertTemplate(db.getDefaultOrganization());
     GroupDto group = db.users().insertGroup();
 
-    underTest.insertGroupPermission(dbSession, permissionTemplate.getId(), group.getId(), "user");
+    underTest.insertGroupPermission(dbSession, permissionTemplate.getUuid(), group.getId(), "user");
     dbSession.commit();
 
-    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateId(db.getSession(), permissionTemplate.getId()))
-      .extracting(PermissionTemplateGroupDto::getTemplateId, PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission,
+    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateUuid(db.getSession(), permissionTemplate.getUuid()))
+      .extracting(PermissionTemplateGroupDto::getTemplateUuid, PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission,
         PermissionTemplateGroupDto::getCreatedAt,
         PermissionTemplateGroupDto::getUpdatedAt)
-      .containsOnly(tuple(permissionTemplate.getId(), group.getId(), "user", NOW, NOW));
+      .containsOnly(tuple(permissionTemplate.getUuid(), group.getId(), "user", NOW, NOW));
   }
 
   @Test
@@ -257,7 +261,7 @@ public class PermissionTemplateDaoTest {
     underTest.deleteByGroup(db.getSession(), group1.getId());
     db.getSession().commit();
 
-    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateId(db.getSession(), permissionTemplate.getId()))
+    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateUuid(db.getSession(), permissionTemplate.getUuid()))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission)
       .containsOnly(tuple(group2.getId(), "user"));
   }
@@ -266,13 +270,13 @@ public class PermissionTemplateDaoTest {
   public void add_group_permission_to_anyone() {
     PermissionTemplateDto permissionTemplate = templateDb.insertTemplate(db.getDefaultOrganization());
 
-    underTest.insertGroupPermission(dbSession, permissionTemplate.getId(), null, "user");
+    underTest.insertGroupPermission(dbSession, permissionTemplate.getUuid(), null, "user");
     dbSession.commit();
 
-    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateId(db.getSession(), permissionTemplate.getId()))
-      .extracting(PermissionTemplateGroupDto::getTemplateId, PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName,
+    assertThat(db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateUuid(db.getSession(), permissionTemplate.getUuid()))
+      .extracting(PermissionTemplateGroupDto::getTemplateUuid, PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getGroupName,
         PermissionTemplateGroupDto::getPermission)
-      .containsOnly(tuple(permissionTemplate.getId(), 0, "Anyone", "user"));
+      .containsOnly(tuple(permissionTemplate.getUuid(), 0, "Anyone", "user"));
   }
 
   @Test
@@ -284,20 +288,20 @@ public class PermissionTemplateDaoTest {
     GroupDto group1 = db.users().insertGroup(newGroupDto());
     GroupDto group2 = db.users().insertGroup(newGroupDto());
     GroupDto group3 = db.users().insertGroup(newGroupDto());
-    templateDb.addGroupToTemplate(template1.getId(), group1.getId(), CODEVIEWER);
-    templateDb.addGroupToTemplate(template1.getId(), group2.getId(), CODEVIEWER);
-    templateDb.addGroupToTemplate(template1.getId(), group3.getId(), CODEVIEWER);
-    templateDb.addGroupToTemplate(template1.getId(), null, CODEVIEWER);
-    templateDb.addGroupToTemplate(template1.getId(), group1.getId(), ADMIN);
-    templateDb.addGroupToTemplate(template2.getId(), group1.getId(), ADMIN);
-    templateDb.addGroupToTemplate(template4.getId(), group1.getId(), ISSUE_ADMIN);
+    templateDb.addGroupToTemplate(template1.getUuid(), group1.getId(), CODEVIEWER);
+    templateDb.addGroupToTemplate(template1.getUuid(), group2.getId(), CODEVIEWER);
+    templateDb.addGroupToTemplate(template1.getUuid(), group3.getId(), CODEVIEWER);
+    templateDb.addGroupToTemplate(template1.getUuid(), null, CODEVIEWER);
+    templateDb.addGroupToTemplate(template1.getUuid(), group1.getId(), ADMIN);
+    templateDb.addGroupToTemplate(template2.getUuid(), group1.getId(), ADMIN);
+    templateDb.addGroupToTemplate(template4.getUuid(), group1.getId(), ISSUE_ADMIN);
 
     final List<CountByTemplateAndPermissionDto> result = new ArrayList<>();
-    underTest.groupsCountByTemplateIdAndPermission(dbSession, asList(template1.getId(), template2.getId(), template3.getId()),
+    underTest.groupsCountByTemplateUuidAndPermission(dbSession, asList(template1.getUuid(), template2.getUuid(), template3.getUuid()),
       context -> result.add(context.getResultObject()));
 
-    assertThat(result).extracting(CountByTemplateAndPermissionDto::getPermission, CountByTemplateAndPermissionDto::getTemplateId, CountByTemplateAndPermissionDto::getCount)
-      .containsOnly(tuple(ADMIN, template1.getId(), 1), tuple(CODEVIEWER, template1.getId(), 4), tuple(ADMIN, template2.getId(), 1));
+    assertThat(result).extracting(CountByTemplateAndPermissionDto::getPermission, CountByTemplateAndPermissionDto::getTemplateUuid, CountByTemplateAndPermissionDto::getCount)
+      .containsOnly(tuple(ADMIN, template1.getUuid(), 1), tuple(CODEVIEWER, template1.getUuid(), 4), tuple(ADMIN, template2.getUuid(), 1));
   }
 
   @Test
@@ -311,27 +315,27 @@ public class PermissionTemplateDaoTest {
     UserDto user2 = db.users().insertUser();
     UserDto user3 = db.users().insertUser();
 
-    templateDb.addUserToTemplate(template1.getId(), user1.getId(), ADMIN);
-    templateDb.addUserToTemplate(template1.getId(), user2.getId(), ADMIN);
-    templateDb.addUserToTemplate(template1.getId(), user3.getId(), ADMIN);
-    templateDb.addUserToTemplate(template1.getId(), user1.getId(), USER);
-    templateDb.addUserToTemplate(template2.getId(), user1.getId(), USER);
-    templateDb.addUserToTemplate(anotherTemplate.getId(), user1.getId(), ISSUE_ADMIN);
+    templateDb.addUserToTemplate(template1.getUuid(), user1.getId(), ADMIN);
+    templateDb.addUserToTemplate(template1.getUuid(), user2.getId(), ADMIN);
+    templateDb.addUserToTemplate(template1.getUuid(), user3.getId(), ADMIN);
+    templateDb.addUserToTemplate(template1.getUuid(), user1.getId(), USER);
+    templateDb.addUserToTemplate(template2.getUuid(), user1.getId(), USER);
+    templateDb.addUserToTemplate(anotherTemplate.getUuid(), user1.getId(), ISSUE_ADMIN);
 
     final List<CountByTemplateAndPermissionDto> result = new ArrayList<>();
-    underTest.usersCountByTemplateIdAndPermission(dbSession, asList(template1.getId(), template2.getId(), template3.getId()),
+    underTest.usersCountByTemplateUuidAndPermission(dbSession, asList(template1.getUuid(), template2.getUuid(), template3.getUuid()),
       context -> result.add(context.getResultObject()));
     assertThat(result)
-      .extracting(CountByTemplateAndPermissionDto::getPermission, CountByTemplateAndPermissionDto::getTemplateId, CountByTemplateAndPermissionDto::getCount)
+      .extracting(CountByTemplateAndPermissionDto::getPermission, CountByTemplateAndPermissionDto::getTemplateUuid, CountByTemplateAndPermissionDto::getCount)
       .containsExactlyInAnyOrder(
-        tuple(ADMIN, template1.getId(), 3),
-        tuple(USER, template1.getId(), 1),
-        tuple(USER, template2.getId(), 1));
+        tuple(ADMIN, template1.getUuid(), 3),
+        tuple(USER, template1.getUuid(), 1),
+        tuple(USER, template2.getUuid(), 1));
   }
 
   @Test
   public void selectPotentialPermissions_with_unknown_template_and_no_user() {
-    List<String> result = underTest.selectPotentialPermissionsByUserIdAndTemplateId(dbSession, null, 42L);
+    List<String> result = underTest.selectPotentialPermissionsByUserIdAndTemplateUuid(dbSession, null, "42");
 
     assertThat(result).isEmpty();
   }
@@ -341,7 +345,7 @@ public class PermissionTemplateDaoTest {
     UserDto user = db.users().insertUser();
     PermissionTemplateDto template = templateDb.insertTemplate();
 
-    List<String> result = underTest.selectPotentialPermissionsByUserIdAndTemplateId(dbSession, user.getId(), template.getId());
+    List<String> result = underTest.selectPotentialPermissionsByUserIdAndTemplateUuid(dbSession, user.getId(), template.getUuid());
 
     assertThat(result).isEmpty();
   }
@@ -352,16 +356,16 @@ public class PermissionTemplateDaoTest {
     GroupDto group = db.users().insertGroup(newGroupDto());
     db.users().insertMember(group, user);
     PermissionTemplateDto template = templateDb.insertTemplate();
-    templateDb.addProjectCreatorToTemplate(template.getId(), SCAN_EXECUTION);
-    templateDb.addProjectCreatorToTemplate(template.getId(), UserRole.ADMIN);
-    templateDb.addUserToTemplate(template.getId(), user.getId(), UserRole.USER);
-    templateDb.addUserToTemplate(template.getId(), user.getId(), UserRole.ADMIN);
-    templateDb.addGroupToTemplate(template.getId(), group.getId(), UserRole.CODEVIEWER);
-    templateDb.addGroupToTemplate(template.getId(), group.getId(), UserRole.ADMIN);
-    templateDb.addGroupToTemplate(template.getId(), null, UserRole.ISSUE_ADMIN);
+    templateDb.addProjectCreatorToTemplate(template.getUuid(), SCAN_EXECUTION);
+    templateDb.addProjectCreatorToTemplate(template.getUuid(), UserRole.ADMIN);
+    templateDb.addUserToTemplate(template.getUuid(), user.getId(), UserRole.USER);
+    templateDb.addUserToTemplate(template.getUuid(), user.getId(), UserRole.ADMIN);
+    templateDb.addGroupToTemplate(template.getUuid(), group.getId(), UserRole.CODEVIEWER);
+    templateDb.addGroupToTemplate(template.getUuid(), group.getId(), UserRole.ADMIN);
+    templateDb.addGroupToTemplate(template.getUuid(), null, UserRole.ISSUE_ADMIN);
 
-    List<String> resultWithUser = underTest.selectPotentialPermissionsByUserIdAndTemplateId(dbSession, user.getId(), template.getId());
-    List<String> resultWithoutUser = underTest.selectPotentialPermissionsByUserIdAndTemplateId(dbSession, null, template.getId());
+    List<String> resultWithUser = underTest.selectPotentialPermissionsByUserIdAndTemplateUuid(dbSession, user.getId(), template.getUuid());
+    List<String> resultWithoutUser = underTest.selectPotentialPermissionsByUserIdAndTemplateUuid(dbSession, null, template.getUuid());
 
     assertThat(resultWithUser).containsOnlyOnce(SCAN_EXECUTION, UserRole.ADMIN, UserRole.USER, UserRole.CODEVIEWER, UserRole.ISSUE_ADMIN);
     // only permission from anyone group
@@ -410,19 +414,19 @@ public class PermissionTemplateDaoTest {
       createTemplate(organization2)
     };
 
-    verifyTemplateIdsInDb(templates[0].getId(), templates[1].getId(), templates[2].getId(), templates[3].getId(), templates[4].getId());
+    verifyTemplateUuidsInDb(templates[0].getUuid(), templates[1].getUuid(), templates[2].getUuid(), templates[3].getUuid(), templates[4].getUuid());
 
     underTest.deleteByOrganization(dbSession, organization2.getUuid());
     dbSession.commit();
-    verifyTemplateIdsInDb(templates[0].getId(), templates[2].getId(), templates[3].getId());
+    verifyTemplateUuidsInDb(templates[0].getUuid(), templates[2].getUuid(), templates[3].getUuid());
 
     underTest.deleteByOrganization(dbSession, organization3.getUuid());
     dbSession.commit();
-    verifyTemplateIdsInDb(templates[0].getId(), templates[3].getId());
+    verifyTemplateUuidsInDb(templates[0].getUuid(), templates[3].getUuid());
 
     underTest.deleteByOrganization(dbSession, organization1.getUuid());
     dbSession.commit();
-    verifyTemplateIdsInDb();
+    verifyTemplateUuidsInDb();
   }
 
   @Test
@@ -434,14 +438,14 @@ public class PermissionTemplateDaoTest {
     PermissionTemplateDto template = db.permissionTemplates().insertTemplate(organization);
     PermissionTemplateDto anotherTemplate = db.permissionTemplates().insertTemplate(anotherOrganization);
     String permission = "PERMISSION";
-    db.permissionTemplates().addUserToTemplate(template.getId(), user.getId(), permission);
-    db.permissionTemplates().addUserToTemplate(template.getId(), anotherUser.getId(), permission);
-    db.permissionTemplates().addUserToTemplate(anotherTemplate.getId(), user.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), user.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), anotherUser.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(anotherTemplate.getUuid(), user.getId(), permission);
 
     underTest.deleteUserPermissionsByOrganization(dbSession, organization.getUuid(), user.getId());
 
-    assertThat(underTest.selectUserPermissionsByTemplateId(dbSession, template.getId())).extracting(PermissionTemplateUserDto::getUserId).containsOnly(anotherUser.getId());
-    assertThat(underTest.selectUserPermissionsByTemplateId(dbSession, anotherTemplate.getId())).extracting(PermissionTemplateUserDto::getUserId).containsOnly(user.getId());
+    assertThat(underTest.selectUserPermissionsByTemplateId(dbSession, template.getUuid())).extracting(PermissionTemplateUserDto::getUserId).containsOnly(anotherUser.getId());
+    assertThat(underTest.selectUserPermissionsByTemplateId(dbSession, anotherTemplate.getUuid())).extracting(PermissionTemplateUserDto::getUserId).containsOnly(user.getId());
   }
 
   @Test
@@ -453,16 +457,16 @@ public class PermissionTemplateDaoTest {
     PermissionTemplateDto template = db.permissionTemplates().insertTemplate(organization);
     PermissionTemplateDto anotherTemplate = db.permissionTemplates().insertTemplate(anotherOrganization);
     String permission = "PERMISSION";
-    db.permissionTemplates().addUserToTemplate(template.getId(), user.getId(), permission);
-    db.permissionTemplates().addUserToTemplate(template.getId(), anotherUser.getId(), permission);
-    db.permissionTemplates().addUserToTemplate(anotherTemplate.getId(), user.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), user.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), anotherUser.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(anotherTemplate.getUuid(), user.getId(), permission);
 
     underTest.deleteUserPermissionsByUserId(dbSession, user.getId());
     db.commit();
 
-    assertThat(db.select("select template_id as \"templateId\", user_id as \"userId\", permission_reference as \"permission\" from perm_templates_users"))
-      .extracting((row) -> row.get("templateId"), (row) -> row.get("userId"), (row) -> row.get("permission"))
-      .containsOnly(tuple(template.getId(), anotherUser.getId().longValue(), permission));
+    assertThat(db.select("select template_uuid as \"templateUuid\", user_id as \"userId\", permission_reference as \"permission\" from perm_templates_users"))
+      .extracting((row) -> row.get("templateUuid"), (row) -> row.get("userId"), (row) -> row.get("permission"))
+      .containsOnly(tuple(template.getUuid(), anotherUser.getId().longValue(), permission));
   }
 
   private PermissionTemplateDto createTemplate(OrganizationDto organization) {
@@ -470,29 +474,29 @@ public class PermissionTemplateDaoTest {
     GroupDto group = db.users().insertGroup();
     db.users().insertMember(group, user);
     PermissionTemplateDto template = templateDb.insertTemplate(organization);
-    templateDb.addProjectCreatorToTemplate(template.getId(), SCAN_EXECUTION);
-    templateDb.addProjectCreatorToTemplate(template.getId(), UserRole.ADMIN);
-    templateDb.addUserToTemplate(template.getId(), user.getId(), UserRole.USER);
-    templateDb.addUserToTemplate(template.getId(), user.getId(), UserRole.ADMIN);
-    templateDb.addGroupToTemplate(template.getId(), group.getId(), UserRole.CODEVIEWER);
-    templateDb.addGroupToTemplate(template.getId(), group.getId(), UserRole.ADMIN);
-    templateDb.addGroupToTemplate(template.getId(), null, UserRole.ISSUE_ADMIN);
+    templateDb.addProjectCreatorToTemplate(template.getUuid(), SCAN_EXECUTION);
+    templateDb.addProjectCreatorToTemplate(template.getUuid(), UserRole.ADMIN);
+    templateDb.addUserToTemplate(template.getUuid(), user.getId(), UserRole.USER);
+    templateDb.addUserToTemplate(template.getUuid(), user.getId(), UserRole.ADMIN);
+    templateDb.addGroupToTemplate(template.getUuid(), group.getId(), UserRole.CODEVIEWER);
+    templateDb.addGroupToTemplate(template.getUuid(), group.getId(), UserRole.ADMIN);
+    templateDb.addGroupToTemplate(template.getUuid(), null, UserRole.ISSUE_ADMIN);
     return template;
   }
 
-  private void verifyTemplateIdsInDb(Long... expectedTemplateIds) {
-    assertThat(db.select("select distinct template_id as \"templateId\" from perm_templates_groups"))
-      .extracting((row) -> (Long) row.get("templateId"))
-      .containsOnly(expectedTemplateIds);
-    assertThat(db.select("select distinct template_id as \"templateId\" from perm_templates_users"))
-      .extracting((row) -> (Long) row.get("templateId"))
-      .containsOnly(expectedTemplateIds);
-    assertThat(db.select("select distinct template_id as \"templateId\" from perm_tpl_characteristics"))
-      .extracting((row) -> (Long) row.get("templateId"))
-      .containsOnly(expectedTemplateIds);
-    assertThat(db.select("select distinct id as \"templateId\" from permission_templates"))
-      .extracting((row) -> (Long) row.get("templateId"))
-      .containsOnly(expectedTemplateIds);
+  private void verifyTemplateUuidsInDb(String... expectedTemplateUuids) {
+    assertThat(db.select("select distinct template_uuid as \"templateUuid\" from perm_templates_groups"))
+      .extracting((row) -> (String) row.get("templateUuid"))
+      .containsOnly(expectedTemplateUuids);
+    assertThat(db.select("select distinct template_uuid as \"templateUuid\" from perm_templates_users"))
+      .extracting((row) -> (String) row.get("templateUuid"))
+      .containsOnly(expectedTemplateUuids);
+    assertThat(db.select("select distinct template_uuid as \"templateUuid\" from perm_tpl_characteristics"))
+      .extracting((row) -> (String) row.get("templateUuid"))
+      .containsOnly(expectedTemplateUuids);
+    assertThat(db.select("select distinct uuid as \"templateUuid\" from permission_templates"))
+      .extracting((row) -> (String) row.get("templateUuid"))
+      .containsOnly(expectedTemplateUuids);
   }
 
 }
index 22e6cf453ba2210ed4e109a34ff40a17392871ca..28730c8b05718cbd597e5717f97484a786e75a88 100644 (file)
@@ -67,11 +67,11 @@ public class UserWithPermissionTemplateDaoTest {
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
       builder().setOrganizationUuid(organization.getUuid()).build(),
-      permissionTemplate.getId()))
+      permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin(), user3.getLogin());
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
       builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setPermission(USER).build(),
-      permissionTemplate.getId()))
+      permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin());
   }
 
@@ -84,7 +84,7 @@ public class UserWithPermissionTemplateDaoTest {
     db.permissionTemplates().addUserToTemplate(permissionTemplate, user, USER);
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).setPermission(USER).withAtLeastOnePermission().build(), 999L))
+      builder().setOrganizationUuid(organization.getUuid()).setPermission(USER).withAtLeastOnePermission().build(), "999"))
         .isEmpty();
   }
 
@@ -105,7 +105,7 @@ public class UserWithPermissionTemplateDaoTest {
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
       builder().setOrganizationUuid(organization.getUuid()).setPermission(USER).withAtLeastOnePermission().build(),
-      permissionTemplate.getId()))
+      permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin());
   }
 
@@ -120,7 +120,7 @@ public class UserWithPermissionTemplateDaoTest {
     db.permissionTemplates().addUserToTemplate(permissionTemplate, disabledUser, USER);
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).setPermission(USER).build(), permissionTemplate.getId()))
+      builder().setOrganizationUuid(organization.getUuid()).setPermission(USER).build(), permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user.getLogin());
   }
 
@@ -137,12 +137,12 @@ public class UserWithPermissionTemplateDaoTest {
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(
       dbSession, builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setPermission(USER).setSearchQuery("SEr1").build(),
-      permissionTemplate.getId()))
+      permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user1.getLogin());
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(
       dbSession, builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setPermission(USER).setSearchQuery("user").build(),
-      permissionTemplate.getId()))
+      permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin());
   }
 
@@ -154,10 +154,10 @@ public class UserWithPermissionTemplateDaoTest {
     UserDto user2 = db.users().insertUser(u -> u.setName("B"));
     UserDto user3 = db.users().insertUser(u -> u.setName("C"));
     db.organizations().addMember(organization, user1, user2, user3);
-    db.permissionTemplates().addUserToTemplate(template.getId(), user3.getId(), UserRole.USER);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), user3.getId(), UserRole.USER);
 
     PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).build();
-    assertThat(underTest.selectUserLoginsByQueryAndTemplate(db.getSession(), query, template.getId()))
+    assertThat(underTest.selectUserLoginsByQueryAndTemplate(db.getSession(), query, template.getUuid()))
       .containsExactly(user3.getLogin(), user1.getLogin(), user2.getLogin());
   }
 
@@ -176,7 +176,7 @@ public class UserWithPermissionTemplateDaoTest {
     db.permissionTemplates().addUserToTemplate(template, db.users().selectUserByLogin(lastLogin).get(), UserRole.USER);
 
     PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).build();
-    assertThat(underTest.selectUserLoginsByQueryAndTemplate(db.getSession(), query, template.getId()))
+    assertThat(underTest.selectUserLoginsByQueryAndTemplate(db.getSession(), query, template.getUuid()))
       .hasSize(DEFAULT_PAGE_SIZE)
       .startsWith(lastLogin);
   }
@@ -193,13 +193,13 @@ public class UserWithPermissionTemplateDaoTest {
     db.permissionTemplates().addUserToTemplate(permissionTemplate, user2, USER);
 
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).setPageIndex(1).setPageSize(2).build(), permissionTemplate.getId()))
+      builder().setOrganizationUuid(organization.getUuid()).setPageIndex(1).setPageSize(2).build(), permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin());
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).setPageIndex(2).setPageSize(2).build(), permissionTemplate.getId()))
+      builder().setOrganizationUuid(organization.getUuid()).setPageIndex(2).setPageSize(2).build(), permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user3.getLogin());
     assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).setPageIndex(3).setPageSize(1).build(), permissionTemplate.getId()))
+      builder().setOrganizationUuid(organization.getUuid()).setPageIndex(3).setPageSize(1).build(), permissionTemplate.getUuid()))
         .containsExactlyInAnyOrder(user3.getLogin());
   }
 
@@ -215,10 +215,10 @@ public class UserWithPermissionTemplateDaoTest {
     db.permissionTemplates().addUserToTemplate(permissionTemplate, user2, USER);
 
     assertThat(underTest.countUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).build(), permissionTemplate.getId()))
+      builder().setOrganizationUuid(organization.getUuid()).build(), permissionTemplate.getUuid()))
         .isEqualTo(3);
     assertThat(underTest.countUserLoginsByQueryAndTemplate(dbSession,
-      builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setPermission("user").build(), permissionTemplate.getId()))
+      builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setPermission("user").build(), permissionTemplate.getUuid()))
         .isEqualTo(2);
   }
 
@@ -237,14 +237,14 @@ public class UserWithPermissionTemplateDaoTest {
     PermissionTemplateDto anotherPermissionTemplate = db.permissionTemplates().insertTemplate();
     db.permissionTemplates().addUserToTemplate(anotherPermissionTemplate, user1, USER);
 
-    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getId(), singletonList(user1.getLogin())))
+    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getUuid(), singletonList(user1.getLogin())))
       .extracting(PermissionTemplateUserDto::getUserLogin, PermissionTemplateUserDto::getPermission)
       .containsExactlyInAnyOrder(
         tuple(user1.getLogin(), USER),
         tuple(user1.getLogin(), ADMIN),
         tuple(user1.getLogin(), CODEVIEWER));
 
-    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getId(), asList(user1.getLogin(), user2.getLogin(), user2.getLogin())))
+    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getUuid(), asList(user1.getLogin(), user2.getLogin(), user2.getLogin())))
       .extracting(PermissionTemplateUserDto::getUserLogin, PermissionTemplateUserDto::getPermission)
       .containsExactlyInAnyOrder(
         tuple(user1.getLogin(), USER),
@@ -252,9 +252,9 @@ public class UserWithPermissionTemplateDaoTest {
         tuple(user1.getLogin(), CODEVIEWER),
         tuple(user2.getLogin(), USER));
 
-    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getId(), singletonList("unknown"))).isEmpty();
-    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getId(), Collections.emptyList())).isEmpty();
-    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, 123L, singletonList(user1.getLogin()))).isEmpty();
+    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getUuid(), singletonList("unknown"))).isEmpty();
+    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, permissionTemplate.getUuid(), Collections.emptyList())).isEmpty();
+    assertThat(underTest.selectUserPermissionsByTemplateIdAndUserLogins(dbSession, "123", singletonList(user1.getLogin()))).isEmpty();
   }
 
 }
index 13ec0556be879db4be134faede09495d23aed95c..f7c44f61a6132078a2a2edb075c178fc44f50e84 100644 (file)
@@ -57,35 +57,35 @@ public class PermissionTemplateDbTester {
   }
 
   public void addGroupToTemplate(PermissionTemplateDto permissionTemplate, GroupDto group, String permission) {
-    addGroupToTemplate(permissionTemplate.getId(), group.getId(), permission);
+    addGroupToTemplate(permissionTemplate.getUuid(), group.getId(), permission);
   }
 
-  public void addGroupToTemplate(long templateId, @Nullable Integer groupId, String permission) {
-    dbClient.permissionTemplateDao().insertGroupPermission(dbSession, templateId, groupId, permission);
+  public void addGroupToTemplate(String templateUuid, @Nullable Integer groupId, String permission) {
+    dbClient.permissionTemplateDao().insertGroupPermission(dbSession, templateUuid, groupId, permission);
     db.commit();
   }
 
   public void addAnyoneToTemplate(PermissionTemplateDto permissionTemplate, String permission) {
-    addGroupToTemplate(permissionTemplate.getId(), null, permission);
+    addGroupToTemplate(permissionTemplate.getUuid(), null, permission);
   }
 
   public void addUserToTemplate(PermissionTemplateDto permissionTemplate, UserDto user, String permission) {
-    addUserToTemplate(permissionTemplate.getId(), user.getId(), permission);
+    addUserToTemplate(permissionTemplate.getUuid(), user.getId(), permission);
   }
 
-  public void addUserToTemplate(long templateId, int userId, String permission) {
-    dbClient.permissionTemplateDao().insertUserPermission(dbSession, templateId, userId, permission);
+  public void addUserToTemplate(String templateUuid, int userId, String permission) {
+    dbClient.permissionTemplateDao().insertUserPermission(dbSession, templateUuid, userId, permission);
     db.commit();
   }
 
   public void addProjectCreatorToTemplate(PermissionTemplateDto permissionTemplate, String permission) {
-    addProjectCreatorToTemplate(permissionTemplate.getId(), permission);
+    addProjectCreatorToTemplate(permissionTemplate.getUuid(), permission);
   }
 
-  public void addProjectCreatorToTemplate(long templateId, String permission) {
+  public void addProjectCreatorToTemplate(String templateUuid, String permission) {
     dbClient.permissionTemplateCharacteristicDao().insert(dbSession, newPermissionTemplateCharacteristicDto()
       .setWithProjectCreator(true)
-      .setTemplateId(templateId)
+      .setTemplateUuid(templateUuid)
       .setPermission(permission));
     db.commit();
   }
index 3a958cd94fcad55f6e876c9f0ca35b616aa694f8..fc00529532df2b06d0b79f1d4c0268b25d3528a5 100644 (file)
@@ -135,6 +135,27 @@ import org.sonar.server.platform.db.migration.version.v83.permtplcharacteristics
 import org.sonar.server.platform.db.migration.version.v83.permtplcharacteristics.DropPrimaryKeyOnIdColumnOfPermTplCharacteristicsTable;
 import org.sonar.server.platform.db.migration.version.v83.permtplcharacteristics.MakePermTplCharacteristicsUuidColumnNotNullable;
 import org.sonar.server.platform.db.migration.version.v83.permtplcharacteristics.PopulatePermTplCharacteristicsUuid;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.AddUuidColumnToPermissionTemplates;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.DropIdColumnOfPermissionTemplatesTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.DropKeeColumnOfPermissionTemplatesTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.MakePermissionTemplateUuidColumnNotNullable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.PopulatePermissionTemplatesUuid;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups.AddTemplateUuidColumnToPermTemplatesGroups;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups.DropTemplateIdColumnOfPermTemplatesGroupsTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups.MakePermTemplatesGroupsTemplateUuidColumnNotNullable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups.PopulatePermTemplatesGroupsTemplateUuidColumn;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers.AddTemplateUuidColumnToPermTemplatesUsers;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers.DropTemplateIdColumnOfPermTemplatesUsersTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers.MakePermTemplatesUsersTemplateUuidColumnNotNullable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers.PopulatePermTemplatesUsersTemplateUuidColumn;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics.AddTemplateUuidColumnToPermTplCharacteristics;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics.AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics.DropTemplateIdColumnOfPermTplCharacteristicsTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics.DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics.MakePermTplCharacteristicsTemplateUuidColumnNotNullable;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics.PopulatePermTplCharacteristicsTemplateUuidColumn;
 import org.sonar.server.platform.db.migration.version.v83.projectmeasures.AddPrimaryKeyOnUuidColumnOfProjectMeasuresTable;
 import org.sonar.server.platform.db.migration.version.v83.projectmeasures.AddUuidColumnToProjectMeasures;
 import org.sonar.server.platform.db.migration.version.v83.projectmeasures.DropIdColumnOfProjectMeasuresTable;
@@ -420,6 +441,40 @@ public class DbVersion83 implements DbVersion {
       .add(3552, "Drop column 'METRIC_ID' of 'MANUAL_MEASURES' table", DropMetricIdColumnOfManualMeasuresTable.class)
       .add(3553, "Drop column 'ID' of 'METRICS' table", DropIdColumnOfMetricsTable.class)
 
+      // Migration of PERMISSION_TEMPLATES table
+      .add(3554, "Add 'UUID' column on 'PERMISSION_TEMPLATES' table", AddUuidColumnToPermissionTemplates.class)
+      .add(3555, "Populate 'uuid' for 'PERMISSION_TEMPLATES'", PopulatePermissionTemplatesUuid.class)
+      .add(3556, "Make 'uuid' column not nullable for user_tokens", MakePermissionTemplateUuidColumnNotNullable.class)
+
+      // Migration of PERM_TEMPLATES_GROUPS FK to PERMISSION_TEMPLATES, switch from templateId to templateUuid
+      .add(3557, "Add 'template_uuid' column for 'PERM_TEMPLATES_GROUPS' table", AddTemplateUuidColumnToPermTemplatesGroups.class)
+      .add(3558, "Populate 'template_uuid' column for 'PERM_TEMPLATES_GROUPS' table", PopulatePermTemplatesGroupsTemplateUuidColumn.class)
+      .add(3559, "Make 'template_uuid' column not nullable for 'PERM_TEMPLATES_GROUPS' table", MakePermTemplatesGroupsTemplateUuidColumnNotNullable.class)
+      .add(3560, "Drop column 'template_id' of 'PERM_TEMPLATES_GROUPS' table", DropTemplateIdColumnOfPermTemplatesGroupsTable.class)
+
+      // Migration of PERM_TEMPLATES_USERS FK to PERMISSION_TEMPLATES, switch from templateId to templateUuid
+      .add(3561, "Add 'template_uuid' column for 'PERM_TEMPLATES_USERS' table", AddTemplateUuidColumnToPermTemplatesUsers.class)
+      .add(3562, "Populate 'template_uuid' column for 'PERM_TEMPLATES_USERS' table", PopulatePermTemplatesUsersTemplateUuidColumn.class)
+      .add(3563, "Make 'template_uuid' column not nullable for 'PERM_TEMPLATES_USERS' table", MakePermTemplatesUsersTemplateUuidColumnNotNullable.class)
+      .add(3564, "Drop column 'template_id' of 'PERM_TEMPLATES_USERS' table", DropTemplateIdColumnOfPermTemplatesUsersTable.class)
+
+      // Migration of PERM_TPL_CHARACTERISTICS FK to PERMISSION_TEMPLATES, switch from templateId to templateUuid
+      .add(3565, "Add 'template_uuid' column for 'PERM_TPL_CHARACTERISTICS' table", AddTemplateUuidColumnToPermTplCharacteristics.class)
+      .add(3566, "Populate 'template_uuid' column for 'PERM_TPL_CHARACTERISTICS' table", PopulatePermTplCharacteristicsTemplateUuidColumn.class)
+      .add(3567, "Make 'template_uuid' column not nullable for 'PERM_TPL_CHARACTERISTICS' table", MakePermTplCharacteristicsTemplateUuidColumnNotNullable.class)
+      .add(3568, "Drop unique constraint on 'template_id', 'permission_key' columns 'PERM_TPL_CHARACTERISTICS' table",
+        DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable.class)
+      .add(3569, "Add unique constraint on 'template_uuid', 'permission_key' columns 'PERM_TPL_CHARACTERISTICS' table",
+        AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable.class)
+
+      .add(3570, "Drop column 'template_id' of 'PERM_TPL_CHARACTERISTICS' table", DropTemplateIdColumnOfPermTplCharacteristicsTable.class)
+
+      .add(3571, "Drop primary key on 'ID' column of 'PERMISSION_TEMPLATES' table", DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable.class)
+      .add(3572, "Add primary key on 'UUID' column of 'PERMISSION_TEMPLATES' table", AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable.class)
+
+      .add(3573, "Drop column 'ID' of 'PERMISSION_TEMPLATES' table", DropIdColumnOfPermissionTemplatesTable.class)
+      .add(3574, "Drop column 'KEE' of 'PERMISSION_TEMPLATES' table", DropKeeColumnOfPermissionTemplatesTable.class)
+
     ;
   }
 }
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable.java
new file mode 100644 (file)
index 0000000..27bbbb1
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+import org.sonar.server.platform.db.migration.version.v83.util.AddPrimaryKeyBuilder;
+
+public class AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable extends DdlChange {
+
+  public AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AddPrimaryKeyBuilder("permission_templates", "uuid").build());
+  }
+
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplates.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplates.java
new file mode 100644 (file)
index 0000000..718fb32
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.AddUuidColumnToTable;
+
+public class AddUuidColumnToPermissionTemplates extends AddUuidColumnToTable {
+  private static final String TABLE_NAME = "permission_templates";
+
+  public AddUuidColumnToPermissionTemplates(Database db) {
+    super(db, TABLE_NAME);
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTable.java
new file mode 100644 (file)
index 0000000..7aefd8a
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.DropIdColumn;
+
+public class DropIdColumnOfPermissionTemplatesTable extends DropIdColumn {
+  private static final String TABLE_NAME = "permission_templates";
+
+  public DropIdColumnOfPermissionTemplatesTable(Database db) {
+    super(db, TABLE_NAME);
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTable.java
new file mode 100644 (file)
index 0000000..ae944fb
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+public class DropKeeColumnOfPermissionTemplatesTable extends DdlChange {
+
+  public DropKeeColumnOfPermissionTemplatesTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new DropColumnsBuilder(getDialect(), "permission_templates", "kee").build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable.java
new file mode 100644 (file)
index 0000000..62be919
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.DropPrimaryKeyOnIdColumn;
+import org.sonar.server.platform.db.migration.version.v83.util.DropPrimaryKeySqlGenerator;
+
+public class DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable extends DropPrimaryKeyOnIdColumn {
+  private static final String TABLE_NAME = "permission_templates";
+
+  public DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable(Database db, DropPrimaryKeySqlGenerator dropPrimaryKeySqlGenerator) {
+    super(db, dropPrimaryKeySqlGenerator, TABLE_NAME);
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullable.java
new file mode 100644 (file)
index 0000000..7165abf
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.version.v83.common.MakeUuidColumnNotNullable;
+
+public class MakePermissionTemplateUuidColumnNotNullable extends MakeUuidColumnNotNullable {
+  private static final String TABLE_NAME = "permission_templates";
+
+  public MakePermissionTemplateUuidColumnNotNullable(Database db) {
+    super(db, TABLE_NAME);
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuid.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuid.java
new file mode 100644 (file)
index 0000000..03bcd28
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DataChange;
+import org.sonar.server.platform.db.migration.step.MassUpdate;
+
+public class PopulatePermissionTemplatesUuid extends DataChange {
+
+  private UuidFactory uuidFactory;
+
+  public PopulatePermissionTemplatesUuid(Database db, UuidFactory uuidFactory) {
+    super(db);
+    this.uuidFactory = uuidFactory;
+  }
+
+  @Override
+  protected void execute(Context context) throws SQLException {
+    MassUpdate massUpdate = context.prepareMassUpdate();
+
+    massUpdate.select("select kee from permission_templates where uuid is null");
+    massUpdate.update("update permission_templates set uuid = ? where kee = ?");
+
+    massUpdate.execute((row, update) -> {
+      String kee = row.getString(1);
+      String uuid = kee;
+
+      //kee column was declared with 100 char length, so we regenerate if it happened
+      if (kee.length() > 40) {
+        uuid = uuidFactory.create();
+      }
+
+      update.setString(1, uuid);
+      update.setString(2, kee);
+      return true;
+    });
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroups.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroups.java
new file mode 100644 (file)
index 0000000..b494eeb
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.AddColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class AddTemplateUuidColumnToPermTemplatesGroups extends DdlChange {
+  private static final String TABLE = "perm_templates_groups";
+
+  private static final VarcharColumnDef uuidColumnDefinition = newVarcharColumnDefBuilder()
+    .setColumnName("template_uuid")
+    .setIsNullable(true)
+    .setDefaultValue(null)
+    .setLimit(VarcharColumnDef.UUID_SIZE)
+    .build();
+
+  public AddTemplateUuidColumnToPermTemplatesGroups(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AddColumnsBuilder(getDialect(), TABLE)
+      .addColumn(uuidColumnDefinition)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTable.java
new file mode 100644 (file)
index 0000000..d7ef975
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+public class DropTemplateIdColumnOfPermTemplatesGroupsTable extends DdlChange {
+
+  public DropTemplateIdColumnOfPermTemplatesGroupsTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new DropColumnsBuilder(getDialect(), "perm_templates_groups", "template_id").build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullable.java
new file mode 100644 (file)
index 0000000..5bcd439
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.AlterColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class MakePermTemplatesGroupsTemplateUuidColumnNotNullable extends DdlChange {
+  private static final String TABLE = "perm_templates_groups";
+
+  private static final VarcharColumnDef uuidColumnDefinition = newVarcharColumnDefBuilder()
+    .setColumnName("template_uuid")
+    .setIsNullable(false)
+    .setDefaultValue(null)
+    .setLimit(VarcharColumnDef.UUID_SIZE)
+    .build();
+
+  public MakePermTemplatesGroupsTemplateUuidColumnNotNullable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AlterColumnsBuilder(getDialect(), TABLE)
+      .updateColumn(uuidColumnDefinition)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumn.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumn.java
new file mode 100644 (file)
index 0000000..a8f4758
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DataChange;
+import org.sonar.server.platform.db.migration.step.MassUpdate;
+
+public class PopulatePermTemplatesGroupsTemplateUuidColumn extends DataChange {
+
+  public PopulatePermTemplatesGroupsTemplateUuidColumn(Database db) {
+    super(db);
+  }
+
+  @Override
+  protected void execute(Context context) throws SQLException {
+    MassUpdate massUpdate = context.prepareMassUpdate();
+
+    massUpdate.select("select ptg.uuid, pt.uuid " +
+      "from perm_templates_groups ptg " +
+      "join permission_templates pt on ptg.template_id = pt.id " +
+      "where ptg.template_uuid is null");
+    massUpdate.update("update perm_templates_groups set template_uuid = ? where uuid = ?");
+
+    massUpdate.execute((row, update) -> {
+      update.setString(1, row.getString(2));
+      update.setString(2, row.getString(1));
+      return true;
+    });
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsers.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsers.java
new file mode 100644 (file)
index 0000000..84ca5c7
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.AddColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class AddTemplateUuidColumnToPermTemplatesUsers extends DdlChange {
+  private static final String TABLE = "perm_templates_users";
+
+  private static final VarcharColumnDef uuidColumnDefinition = newVarcharColumnDefBuilder()
+    .setColumnName("template_uuid")
+    .setIsNullable(true)
+    .setDefaultValue(null)
+    .setLimit(VarcharColumnDef.UUID_SIZE)
+    .build();
+
+  public AddTemplateUuidColumnToPermTemplatesUsers(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AddColumnsBuilder(getDialect(), TABLE)
+      .addColumn(uuidColumnDefinition)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTable.java
new file mode 100644 (file)
index 0000000..8b5b9fc
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+public class DropTemplateIdColumnOfPermTemplatesUsersTable extends DdlChange {
+
+  public DropTemplateIdColumnOfPermTemplatesUsersTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new DropColumnsBuilder(getDialect(), "perm_templates_users", "template_id").build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullable.java
new file mode 100644 (file)
index 0000000..7fae47a
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.AlterColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class MakePermTemplatesUsersTemplateUuidColumnNotNullable extends DdlChange {
+  private static final String TABLE = "perm_templates_users";
+
+  private static final VarcharColumnDef uuidColumnDefinition = newVarcharColumnDefBuilder()
+    .setColumnName("template_uuid")
+    .setIsNullable(false)
+    .setDefaultValue(null)
+    .setLimit(VarcharColumnDef.UUID_SIZE)
+    .build();
+
+  public MakePermTemplatesUsersTemplateUuidColumnNotNullable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AlterColumnsBuilder(getDialect(), TABLE)
+      .updateColumn(uuidColumnDefinition)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumn.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumn.java
new file mode 100644 (file)
index 0000000..e23e10e
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DataChange;
+import org.sonar.server.platform.db.migration.step.MassUpdate;
+
+public class PopulatePermTemplatesUsersTemplateUuidColumn extends DataChange {
+
+  public PopulatePermTemplatesUsersTemplateUuidColumn(Database db) {
+    super(db);
+  }
+
+  @Override
+  protected void execute(Context context) throws SQLException {
+    MassUpdate massUpdate = context.prepareMassUpdate();
+
+    massUpdate.select("select ptu.uuid, pt.uuid " +
+      "from perm_templates_users ptu " +
+      "join permission_templates pt on ptu.template_id = pt.id " +
+      "where ptu.template_uuid is null");
+    massUpdate.update("update perm_templates_users set template_uuid = ? where uuid = ?");
+
+    massUpdate.execute((row, update) -> {
+      update.setString(1, row.getString(2));
+      update.setString(2, row.getString(1));
+      return true;
+    });
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristics.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristics.java
new file mode 100644 (file)
index 0000000..74ab31e
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.AddColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class AddTemplateUuidColumnToPermTplCharacteristics extends DdlChange {
+  private static final String TABLE = "perm_tpl_characteristics";
+
+  private static final VarcharColumnDef uuidColumnDefinition = newVarcharColumnDefBuilder()
+    .setColumnName("template_uuid")
+    .setIsNullable(true)
+    .setDefaultValue(null)
+    .setLimit(VarcharColumnDef.UUID_SIZE)
+    .build();
+
+  public AddTemplateUuidColumnToPermTplCharacteristics(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AddColumnsBuilder(getDialect(), TABLE)
+      .addColumn(uuidColumnDefinition)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable.java
new file mode 100644 (file)
index 0000000..523a4d7
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.db.DatabaseUtils;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable extends DdlChange {
+  private static final String TABLE_NAME = "perm_tpl_characteristics";
+  private static final String INDEX_NAME = "uniq_perm_tpl_charac";
+
+  public AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    if (!indexExists()) {
+      context.execute(new CreateIndexBuilder()
+        .setUnique(true)
+        .setTable(TABLE_NAME)
+        .setName(INDEX_NAME)
+        .addColumn(newVarcharColumnDefBuilder()
+          .setColumnName("template_uuid")
+          .setIsNullable(false)
+          .setLimit(VarcharColumnDef.UUID_SIZE)
+          .build())
+        .addColumn(newVarcharColumnDefBuilder()
+          .setColumnName("permission_key")
+          .setIsNullable(false)
+          .setLimit(64)
+          .build())
+        .build());
+    }
+
+  }
+
+  private boolean indexExists() throws SQLException {
+    try (Connection connection = getDatabase().getDataSource().getConnection()) {
+      return DatabaseUtils.indexExists(TABLE_NAME, INDEX_NAME, connection);
+    }
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTable.java
new file mode 100644 (file)
index 0000000..12a3671
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+public class DropTemplateIdColumnOfPermTplCharacteristicsTable extends DdlChange {
+
+  public DropTemplateIdColumnOfPermTplCharacteristicsTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new DropColumnsBuilder(getDialect(), "perm_tpl_characteristics", "template_id").build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable.java
new file mode 100644 (file)
index 0000000..133403a
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.db.DatabaseUtils;
+import org.sonar.server.platform.db.migration.sql.DropIndexBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+public class DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable extends DdlChange {
+  private static final String TABLE_NAME = "perm_tpl_characteristics";
+  private static final String INDEX_NAME = "uniq_perm_tpl_charac";
+
+  public DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    if (indexExists()) {
+      context.execute(new DropIndexBuilder(getDialect())
+        .setTable(TABLE_NAME)
+        .setName(INDEX_NAME)
+        .build());
+    }
+  }
+
+  private boolean indexExists() throws SQLException {
+    try (Connection connection = getDatabase().getDataSource().getConnection()) {
+      return DatabaseUtils.indexExists(TABLE_NAME, INDEX_NAME, connection);
+    }
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullable.java
new file mode 100644 (file)
index 0000000..7b3122b
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
+import org.sonar.server.platform.db.migration.sql.AlterColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class MakePermTplCharacteristicsTemplateUuidColumnNotNullable extends DdlChange {
+  private static final String TABLE = "perm_tpl_characteristics";
+
+  private static final VarcharColumnDef uuidColumnDefinition = newVarcharColumnDefBuilder()
+    .setColumnName("template_uuid")
+    .setIsNullable(false)
+    .setDefaultValue(null)
+    .setLimit(VarcharColumnDef.UUID_SIZE)
+    .build();
+
+  public MakePermTplCharacteristicsTemplateUuidColumnNotNullable(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AlterColumnsBuilder(getDialect(), TABLE)
+      .updateColumn(uuidColumnDefinition)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumn.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumn.java
new file mode 100644 (file)
index 0000000..58e20a2
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DataChange;
+import org.sonar.server.platform.db.migration.step.MassUpdate;
+
+public class PopulatePermTplCharacteristicsTemplateUuidColumn extends DataChange {
+
+  public PopulatePermTplCharacteristicsTemplateUuidColumn(Database db) {
+    super(db);
+  }
+
+  @Override
+  protected void execute(Context context) throws SQLException {
+    MassUpdate massUpdate = context.prepareMassUpdate();
+
+    massUpdate.select("select ptc.uuid, pt.uuid " +
+      "from perm_tpl_characteristics ptc " +
+      "join permission_templates pt on ptc.template_id = pt.id " +
+      "where ptc.template_uuid is null");
+    massUpdate.update("update perm_tpl_characteristics set template_uuid = ? where uuid = ?");
+
+    massUpdate.execute((row, update) -> {
+      update.setString(1, row.getString(2));
+      update.setString(2, row.getString(1));
+      return true;
+    });
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest.java
new file mode 100644 (file)
index 0000000..ddf647f
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.projectmeasures.AddPrimaryKeyOnUuidColumnOfProjectMeasuresTable;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertPrimaryKey("permission_templates", "pk_permission_templates", "uuid");
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplatesTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplatesTest.java
new file mode 100644 (file)
index 0000000..74901ab
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+import org.sonar.server.platform.db.migration.version.v83.projectmeasures.AddUuidColumnToProjectMeasures;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AddUuidColumnToPermissionTemplatesTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(AddUuidColumnToPermissionTemplatesTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+
+  private DdlChange underTest = new AddUuidColumnToPermissionTemplates(db.database());
+
+  @Before
+  public void setup() {
+    insertPermissionTemplate(1L);
+    insertPermissionTemplate(2L);
+    insertPermissionTemplate(3L);
+  }
+
+  @Test
+  public void add_uuid_column_to_permission_templates() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("permission_templates", "uuid", Types.VARCHAR, 40, true);
+
+    assertThat(db.countSql("select count(id) from permission_templates"))
+      .isEqualTo(3);
+  }
+
+  private void insertPermissionTemplate(Long id) {
+    db.executeInsert("permission_templates",
+      "id", id,
+      "organization_uuid", id + 100,
+      "name", uuidFactory.create(),
+      "kee", uuidFactory.create());
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTableTest.java
new file mode 100644 (file)
index 0000000..1045b7f
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.projectmeasures.DropIdColumnOfProjectMeasuresTable;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropIdColumnOfPermissionTemplatesTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropIdColumnOfPermissionTemplatesTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new DropIdColumnOfPermissionTemplatesTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDoesNotExist("permission_templates", "id");
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTableTest.java
new file mode 100644 (file)
index 0000000..73a3b74
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.projectmeasures.DropIdColumnOfProjectMeasuresTable;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropKeeColumnOfPermissionTemplatesTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropKeeColumnOfPermissionTemplatesTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new DropKeeColumnOfPermissionTemplatesTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDoesNotExist("permission_templates", "kee");
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest.java
new file mode 100644 (file)
index 0000000..3039247
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.util.DropPrimaryKeySqlGenerator;
+import org.sonar.server.platform.db.migration.version.v83.util.SqlHelper;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest {
+
+  private static final String TABLE_NAME = "permission_templates";
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest.class, "schema.sql");
+
+  private DropPrimaryKeySqlGenerator dropPrimaryKeySqlGenerator = new DropPrimaryKeySqlGenerator(db.database(), new SqlHelper(db.database()));
+
+  private MigrationStep underTest = new DropPrimaryKeyOnIdColumnOfPermissionTemplatesTable(db.database(), dropPrimaryKeySqlGenerator);
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertNoPrimaryKey(TABLE_NAME);
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullableTest.java
new file mode 100644 (file)
index 0000000..00e20bb
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.projectmeasures.MakeProjectMeasuresUuidColumnNotNullable;
+
+import static java.sql.Types.VARCHAR;
+
+public class MakePermissionTemplateUuidColumnNotNullableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(MakePermissionTemplateUuidColumnNotNullableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new MakePermissionTemplateUuidColumnNotNullable(db.database());
+
+  @Test
+  public void uuid_column_is_not_null() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("permission_templates", "uuid", VARCHAR, null, false);
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuidTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuidTest.java
new file mode 100644 (file)
index 0000000..67c7cc2
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates;
+
+import java.sql.SQLException;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DataChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PopulatePermissionTemplatesUuidTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(PopulatePermissionTemplatesUuidTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+  private DataChange underTest = new PopulatePermissionTemplatesUuid(db.database(), uuidFactory);
+
+  @Test
+  public void populate_uuids() throws SQLException {
+    insertPermissionTemplate(1L);
+    insertPermissionTemplate(2L);
+    insertPermissionTemplate(3L);
+    insertPermissionTemplate(4L, "very_very_very_very_very_very_very_very_very_very_very_long_kee");
+
+    underTest.execute();
+
+    verifyUuidsAreNotNull();
+  }
+
+  @Test
+  public void migration_is_reentrant() throws SQLException {
+    insertPermissionTemplate(1L);
+    insertPermissionTemplate(2L);
+    insertPermissionTemplate(3L);
+
+    underTest.execute();
+    // re-entrant
+    underTest.execute();
+
+    verifyUuidsAreNotNull();
+  }
+
+  private void verifyUuidsAreNotNull() {
+    assertThat(db.select("select uuid from permission_templates")
+      .stream()
+      .map(row -> row.get("UUID"))
+      .filter(Objects::isNull)
+      .collect(Collectors.toList())).isEmpty();
+  }
+
+  private void insertPermissionTemplate(Long id) {
+    insertPermissionTemplate(id, uuidFactory.create());
+  }
+
+  private void insertPermissionTemplate(Long id, String kee) {
+    db.executeInsert("permission_templates",
+      "id", id,
+      "organization_uuid", id + 100,
+      "name", uuidFactory.create(),
+      "kee", kee);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroupsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroupsTest.java
new file mode 100644 (file)
index 0000000..77a9015
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AddTemplateUuidColumnToPermTemplatesGroupsTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(AddTemplateUuidColumnToPermTemplatesGroupsTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+
+  private DdlChange underTest = new AddTemplateUuidColumnToPermTemplatesGroups(db.database());
+
+  @Before
+  public void setup() {
+    insertPermissionTemplateGroup("1", 4L);
+    insertPermissionTemplateGroup("2", 5L);
+    insertPermissionTemplateGroup("3", 6L);
+  }
+
+  @Test
+  public void add_uuid_column_to_permission_templates() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("perm_templates_groups", "template_uuid", Types.VARCHAR, 40, true);
+
+    assertThat(db.countRowsOfTable("perm_templates_groups"))
+      .isEqualTo(3);
+  }
+
+  private void insertPermissionTemplateGroup(String uuid, Long templateId) {
+    db.executeInsert("perm_templates_groups",
+      "uuid", uuid,
+      "template_id", templateId,
+      "permission_reference", uuidFactory.create());
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTableTest.java
new file mode 100644 (file)
index 0000000..c60adf8
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.DropIdColumnOfPermissionTemplatesTable;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropTemplateIdColumnOfPermTemplatesGroupsTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropTemplateIdColumnOfPermTemplatesGroupsTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new DropTemplateIdColumnOfPermTemplatesGroupsTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDoesNotExist("perm_templates_groups", "template_id");
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest.java
new file mode 100644 (file)
index 0000000..4152d70
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.MakePermissionTemplateUuidColumnNotNullable;
+
+import static java.sql.Types.VARCHAR;
+
+public class MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new MakePermTemplatesGroupsTemplateUuidColumnNotNullable(db.database());
+
+  @Test
+  public void uuid_column_is_not_null() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("perm_templates_groups", "template_uuid", VARCHAR, null, false);
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumnTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumnTest.java
new file mode 100644 (file)
index 0000000..fb03394
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesgroups;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DataChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PopulatePermTemplatesGroupsTemplateUuidColumnTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(PopulatePermTemplatesGroupsTemplateUuidColumnTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+  private DataChange underTest = new PopulatePermTemplatesGroupsTemplateUuidColumn(db.database());
+
+  @Test
+  public void populate_uuids() throws SQLException {
+    long permissionTemplateId_1 = 1L;
+    String permissionTemplateUuid_1 = "uuid-1";
+    insertPermissionTemplate(permissionTemplateId_1, permissionTemplateUuid_1);
+
+    long permissionTemplateId_2 = 2L;
+    String permissionTemplateUuid_2 = "uuid-2";
+    insertPermissionTemplate(permissionTemplateId_2, permissionTemplateUuid_2);
+
+    long permissionTemplateId_3 = 3L;
+    String permissionTemplateUuid_3 = "uuid-3";
+    insertPermissionTemplate(permissionTemplateId_3, permissionTemplateUuid_3);
+
+    insertPermissionTemplateGroup("4", permissionTemplateId_1);
+    insertPermissionTemplateGroup("5", permissionTemplateId_2);
+    insertPermissionTemplateGroup("6", permissionTemplateId_3);
+
+    underTest.execute();
+
+    assertThatPermissionTemplateGroupTemplateUuidIsEqualTo("4", permissionTemplateUuid_1);
+    assertThatPermissionTemplateGroupTemplateUuidIsEqualTo("5", permissionTemplateUuid_2);
+    assertThatPermissionTemplateGroupTemplateUuidIsEqualTo("6", permissionTemplateUuid_3);
+  }
+
+  @Test
+  public void migration_is_reentrant() throws SQLException {
+    long permissionTemplateId_1 = 1L;
+    String permissionTemplateUuid_1 = "uuid-1";
+    insertPermissionTemplate(permissionTemplateId_1, permissionTemplateUuid_1);
+
+    long permissionTemplateId_2 = 2L;
+    String permissionTemplateUuid_2 = "uuid-2";
+    insertPermissionTemplate(permissionTemplateId_2, permissionTemplateUuid_2);
+
+    long permissionTemplateId_3 = 3L;
+    String permissionTemplateUuid_3 = "uuid-3";
+    insertPermissionTemplate(permissionTemplateId_3, permissionTemplateUuid_3);
+
+    insertPermissionTemplateGroup("4", permissionTemplateId_1);
+    insertPermissionTemplateGroup("5", permissionTemplateId_2);
+    insertPermissionTemplateGroup("6", permissionTemplateId_3);
+
+    underTest.execute();
+    // re-entrant
+    underTest.execute();
+
+    assertThatPermissionTemplateGroupTemplateUuidIsEqualTo("4", permissionTemplateUuid_1);
+    assertThatPermissionTemplateGroupTemplateUuidIsEqualTo("5", permissionTemplateUuid_2);
+    assertThatPermissionTemplateGroupTemplateUuidIsEqualTo("6", permissionTemplateUuid_3);
+  }
+
+  private void assertThatPermissionTemplateGroupTemplateUuidIsEqualTo(String permissionTemplateGroupUuid, String expectedUuid) {
+    assertThat(db.select("select template_uuid from perm_templates_groups where uuid = '" + permissionTemplateGroupUuid + "'")
+      .stream()
+      .map(row -> row.get("TEMPLATE_UUID"))
+      .findFirst())
+        .hasValue(expectedUuid);
+  }
+
+  private void insertPermissionTemplateGroup(String uuid, Long templateId) {
+    db.executeInsert("perm_templates_groups",
+      "uuid", uuid,
+      "template_id", templateId,
+      "permission_reference", uuidFactory.create());
+  }
+
+  private void insertPermissionTemplate(Long id, String uuid) {
+    db.executeInsert("permission_templates",
+      "id", id,
+      "uuid", uuid,
+      "organization_uuid", id + 100,
+      "name", uuidFactory.create(),
+      "kee", uuidFactory.create());
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsersTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsersTest.java
new file mode 100644 (file)
index 0000000..c7cf2ae
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.AddUuidColumnToPermissionTemplates;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AddTemplateUuidColumnToPermTemplatesUsersTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(AddTemplateUuidColumnToPermTemplatesUsersTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+
+  private DdlChange underTest = new AddTemplateUuidColumnToPermTemplatesUsers(db.database());
+
+  @Before
+  public void setup() {
+    insertPermTemplatesUsers("1");
+    insertPermTemplatesUsers("2");
+    insertPermTemplatesUsers("3");
+  }
+
+  @Test
+  public void add_uuid_column_to_permission_templates() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("perm_templates_users", "template_uuid", Types.VARCHAR, 40, true);
+
+    assertThat(db.countRowsOfTable("perm_templates_users"))
+      .isEqualTo(3);
+  }
+
+  private void insertPermTemplatesUsers(String uuid) {
+    db.executeInsert("perm_templates_users",
+      "uuid", uuid,
+      "user_id", 100,
+      "template_id", 200,
+      "permission_reference", uuidFactory.create());
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTableTest.java
new file mode 100644 (file)
index 0000000..88a9f51
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.DropIdColumnOfPermissionTemplatesTable;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropTemplateIdColumnOfPermTemplatesUsersTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropTemplateIdColumnOfPermTemplatesUsersTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new DropTemplateIdColumnOfPermTemplatesUsersTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDoesNotExist("perm_templates_users", "template_id");
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullableTest.java
new file mode 100644 (file)
index 0000000..42e4b60
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.MakePermissionTemplateUuidColumnNotNullable;
+
+import static java.sql.Types.VARCHAR;
+
+public class MakePermTemplatesUsersTemplateUuidColumnNotNullableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(MakePermTemplatesUsersTemplateUuidColumnNotNullableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new MakePermTemplatesUsersTemplateUuidColumnNotNullable(db.database());
+
+  @Test
+  public void uuid_column_is_not_null() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("perm_templates_users", "template_uuid", VARCHAR, null, false);
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumnTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumnTest.java
new file mode 100644 (file)
index 0000000..67db1ce
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtemplatesusers;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DataChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PopulatePermTemplatesUsersTemplateUuidColumnTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(PopulatePermTemplatesUsersTemplateUuidColumnTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+  private DataChange underTest = new PopulatePermTemplatesUsersTemplateUuidColumn(db.database());
+
+  @Test
+  public void populate_uuids() throws SQLException {
+    long permissionTemplateId_1 = 1L;
+    String permissionTemplateUuid_1 = "uuid-1";
+    insertPermissionTemplate(permissionTemplateId_1, permissionTemplateUuid_1);
+
+    long permissionTemplateId_2 = 2L;
+    String permissionTemplateUuid_2 = "uuid-2";
+    insertPermissionTemplate(permissionTemplateId_2, permissionTemplateUuid_2);
+
+    long permissionTemplateId_3 = 3L;
+    String permissionTemplateUuid_3 = "uuid-3";
+    insertPermissionTemplate(permissionTemplateId_3, permissionTemplateUuid_3);
+
+    insertPermTemplatesUsers("4", permissionTemplateId_1);
+    insertPermTemplatesUsers("5", permissionTemplateId_2);
+    insertPermTemplatesUsers("6", permissionTemplateId_3);
+
+    underTest.execute();
+
+    assertThatPermTemplatesUsersTemplateUuidIsEqualTo("4", permissionTemplateUuid_1);
+    assertThatPermTemplatesUsersTemplateUuidIsEqualTo("5", permissionTemplateUuid_2);
+    assertThatPermTemplatesUsersTemplateUuidIsEqualTo("6", permissionTemplateUuid_3);
+  }
+
+  @Test
+  public void migration_is_reentrant() throws SQLException {
+    long permissionTemplateId_1 = 1L;
+    String permissionTemplateUuid_1 = "uuid-1";
+    insertPermissionTemplate(permissionTemplateId_1, permissionTemplateUuid_1);
+
+    long permissionTemplateId_2 = 2L;
+    String permissionTemplateUuid_2 = "uuid-2";
+    insertPermissionTemplate(permissionTemplateId_2, permissionTemplateUuid_2);
+
+    long permissionTemplateId_3 = 3L;
+    String permissionTemplateUuid_3 = "uuid-3";
+    insertPermissionTemplate(permissionTemplateId_3, permissionTemplateUuid_3);
+
+    insertPermTemplatesUsers("4", permissionTemplateId_1);
+    insertPermTemplatesUsers("5", permissionTemplateId_2);
+    insertPermTemplatesUsers("6", permissionTemplateId_3);
+
+    underTest.execute();
+    // re-entrant
+    underTest.execute();
+
+    assertThatPermTemplatesUsersTemplateUuidIsEqualTo("4", permissionTemplateUuid_1);
+    assertThatPermTemplatesUsersTemplateUuidIsEqualTo("5", permissionTemplateUuid_2);
+    assertThatPermTemplatesUsersTemplateUuidIsEqualTo("6", permissionTemplateUuid_3);
+  }
+
+  private void assertThatPermTemplatesUsersTemplateUuidIsEqualTo(String permTemplatesUsersUuid, String expectedUuid) {
+    assertThat(db.select("select template_uuid from perm_templates_users where uuid = '" + permTemplatesUsersUuid + "'")
+      .stream()
+      .map(row -> row.get("TEMPLATE_UUID"))
+      .findFirst())
+        .hasValue(expectedUuid);
+  }
+
+  private void insertPermTemplatesUsers(String uuid, Long templateId) {
+    db.executeInsert("perm_templates_users",
+      "uuid", uuid,
+      "user_id", 100,
+      "template_id", templateId,
+      "permission_reference", uuidFactory.create());
+  }
+
+  private void insertPermissionTemplate(Long id, String uuid) {
+    db.executeInsert("permission_templates",
+      "id", id,
+      "uuid", uuid,
+      "organization_uuid", id + 100,
+      "name", uuidFactory.create(),
+      "kee", uuidFactory.create());
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristicsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristicsTest.java
new file mode 100644 (file)
index 0000000..f389c78
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AddTemplateUuidColumnToPermTplCharacteristicsTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(AddTemplateUuidColumnToPermTplCharacteristicsTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+
+  private DdlChange underTest = new AddTemplateUuidColumnToPermTplCharacteristics(db.database());
+
+  @Before
+  public void setup() {
+    insertPermTplCharacteristics("1");
+    insertPermTplCharacteristics("2");
+    insertPermTplCharacteristics("3");
+  }
+
+  @Test
+  public void add_uuid_column_to_perm_tpl_characteristics() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("perm_tpl_characteristics", "template_uuid", Types.VARCHAR, 40, true);
+
+    assertThat(db.countRowsOfTable("perm_tpl_characteristics"))
+      .isEqualTo(3);
+  }
+
+  private void insertPermTplCharacteristics(String uuid) {
+    db.executeInsert("perm_tpl_characteristics",
+      "uuid", uuid,
+      "template_id", 100,
+      "permission_key", uuidFactory.create(),
+      "with_project_creator", false,
+      "created_at", System.currentTimeMillis(),
+      "updated_at", System.currentTimeMillis());
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest.java
new file mode 100644 (file)
index 0000000..e1155ba
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+
+public class AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropTemplateIdColumnOfPermTplCharacteristicsTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertUniqueIndex("perm_tpl_characteristics", "uniq_perm_tpl_charac", "template_uuid", "permission_key");
+  }
+
+  @Test
+  public void migration_is_re_entrant() throws SQLException {
+    underTest.execute();
+
+    // re-entrant
+    underTest.execute();
+
+    db.assertUniqueIndex("perm_tpl_characteristics", "uniq_perm_tpl_charac", "template_uuid", "permission_key");
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTableTest.java
new file mode 100644 (file)
index 0000000..8b36d51
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.DropIdColumnOfPermissionTemplatesTable;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class DropTemplateIdColumnOfPermTplCharacteristicsTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropTemplateIdColumnOfPermTplCharacteristicsTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new DropTemplateIdColumnOfPermTplCharacteristicsTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDoesNotExist("perm_tpl_characteristics", "template_id");
+  }
+
+  @Test
+  public void migration_is_not_re_entrant() throws SQLException {
+    underTest.execute();
+
+    assertThatThrownBy(() -> underTest.execute()).isInstanceOf(IllegalStateException.class);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest.java
new file mode 100644 (file)
index 0000000..89936dd
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+
+public class DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(DropTemplateIdColumnOfPermTplCharacteristicsTableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTable(db.database());
+
+  @Test
+  public void execute() throws SQLException {
+    underTest.execute();
+
+    db.assertIndexDoesNotExist("perm_tpl_characteristics", "uniq_perm_tpl_charac");
+  }
+
+  @Test
+  public void migration_is_re_entrant() throws SQLException {
+    underTest.execute();
+
+    // re-entrant
+    underTest.execute();
+
+    db.assertIndexDoesNotExist("perm_tpl_characteristics", "uniq_perm_tpl_charac");
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest.java
new file mode 100644 (file)
index 0000000..c8d4d95
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.MigrationStep;
+import org.sonar.server.platform.db.migration.version.v83.permissiontemplates.MakePermissionTemplateUuidColumnNotNullable;
+
+import static java.sql.Types.VARCHAR;
+
+public class MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest.class, "schema.sql");
+
+  private MigrationStep underTest = new MakePermTplCharacteristicsTemplateUuidColumnNotNullable(db.database());
+
+  @Test
+  public void uuid_column_is_not_null() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("perm_tpl_characteristics", "template_uuid", VARCHAR, null, false);
+  }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumnTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumnTest.java
new file mode 100644 (file)
index 0000000..abe474c
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.platform.db.migration.version.v83.permissiontemplates.fk.permtplcharacteristics;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.core.util.UuidFactory;
+import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DataChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PopulatePermTplCharacteristicsTemplateUuidColumnTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(PopulatePermTplCharacteristicsTemplateUuidColumnTest.class, "schema.sql");
+
+  private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
+  private DataChange underTest = new PopulatePermTplCharacteristicsTemplateUuidColumn(db.database());
+
+  @Test
+  public void populate_uuids() throws SQLException {
+    long permissionTemplateId_1 = 1L;
+    String permissionTemplateUuid_1 = "uuid-1";
+    insertPermissionTemplate(permissionTemplateId_1, permissionTemplateUuid_1);
+
+    long permissionTemplateId_2 = 2L;
+    String permissionTemplateUuid_2 = "uuid-2";
+    insertPermissionTemplate(permissionTemplateId_2, permissionTemplateUuid_2);
+
+    long permissionTemplateId_3 = 3L;
+    String permissionTemplateUuid_3 = "uuid-3";
+    insertPermissionTemplate(permissionTemplateId_3, permissionTemplateUuid_3);
+
+    insertPermTplCharacteristics("4", permissionTemplateId_1);
+    insertPermTplCharacteristics("5", permissionTemplateId_2);
+    insertPermTplCharacteristics("6", permissionTemplateId_3);
+
+    underTest.execute();
+
+    assertThatPermTplCharacteristicsTemplateUuidIsEqualTo("4", permissionTemplateUuid_1);
+    assertThatPermTplCharacteristicsTemplateUuidIsEqualTo("5", permissionTemplateUuid_2);
+    assertThatPermTplCharacteristicsTemplateUuidIsEqualTo("6", permissionTemplateUuid_3);
+  }
+
+  @Test
+  public void migration_is_reentrant() throws SQLException {
+    long permissionTemplateId_1 = 1L;
+    String permissionTemplateUuid_1 = "uuid-1";
+    insertPermissionTemplate(permissionTemplateId_1, permissionTemplateUuid_1);
+
+    long permissionTemplateId_2 = 2L;
+    String permissionTemplateUuid_2 = "uuid-2";
+    insertPermissionTemplate(permissionTemplateId_2, permissionTemplateUuid_2);
+
+    long permissionTemplateId_3 = 3L;
+    String permissionTemplateUuid_3 = "uuid-3";
+    insertPermissionTemplate(permissionTemplateId_3, permissionTemplateUuid_3);
+
+    insertPermTplCharacteristics("4", permissionTemplateId_1);
+    insertPermTplCharacteristics("5", permissionTemplateId_2);
+    insertPermTplCharacteristics("6", permissionTemplateId_3);
+
+    underTest.execute();
+    // re-entrant
+    underTest.execute();
+
+    assertThatPermTplCharacteristicsTemplateUuidIsEqualTo("4", permissionTemplateUuid_1);
+    assertThatPermTplCharacteristicsTemplateUuidIsEqualTo("5", permissionTemplateUuid_2);
+    assertThatPermTplCharacteristicsTemplateUuidIsEqualTo("6", permissionTemplateUuid_3);
+  }
+
+  private void assertThatPermTplCharacteristicsTemplateUuidIsEqualTo(String permTplCharacteristicsUuid, String expectedUuid) {
+    assertThat(db.select("select template_uuid from perm_tpl_characteristics where uuid = '" + permTplCharacteristicsUuid + "'")
+      .stream()
+      .map(row -> row.get("TEMPLATE_UUID"))
+      .findFirst())
+        .hasValue(expectedUuid);
+  }
+
+  private void insertPermTplCharacteristics(String uuid, long templateId) {
+    db.executeInsert("perm_tpl_characteristics",
+      "uuid", uuid,
+      "template_id", templateId,
+      "permission_key", uuidFactory.create(),
+      "with_project_creator", false,
+      "created_at", System.currentTimeMillis(),
+      "updated_at", System.currentTimeMillis());
+  }
+
+  private void insertPermissionTemplate(Long id, String uuid) {
+    db.executeInsert("permission_templates",
+      "id", id,
+      "uuid", uuid,
+      "organization_uuid", id + 100,
+      "name", uuidFactory.create(),
+      "kee", uuidFactory.create());
+  }
+}
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddPrimaryKeyOnUuidColumnOfPermissionTemplatesTableTest/schema.sql
new file mode 100644 (file)
index 0000000..52bb4a2
--- /dev/null
@@ -0,0 +1,12 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplatesTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/AddUuidColumnToPermissionTemplatesTest/schema.sql
new file mode 100644 (file)
index 0000000..0a21fe1
--- /dev/null
@@ -0,0 +1,11 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropIdColumnOfPermissionTemplatesTableTest/schema.sql
new file mode 100644 (file)
index 0000000..abff11e
--- /dev/null
@@ -0,0 +1,12 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropKeeColumnOfPermissionTemplatesTableTest/schema.sql
new file mode 100644 (file)
index 0000000..10c7977
--- /dev/null
@@ -0,0 +1,11 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/DropPrimaryKeyOnIdColumnOfPermissionTemplatesTableTest/schema.sql
new file mode 100644 (file)
index 0000000..ed17fd3
--- /dev/null
@@ -0,0 +1,12 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/MakePermissionTemplateUuidColumnNotNullableTest/schema.sql
new file mode 100644 (file)
index 0000000..a966713
--- /dev/null
@@ -0,0 +1,12 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40),
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuidTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/PopulatePermissionTemplatesUuidTest/schema.sql
new file mode 100644 (file)
index 0000000..a966713
--- /dev/null
@@ -0,0 +1,12 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40),
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroupsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/AddTemplateUuidColumnToPermTemplatesGroupsTest/schema.sql
new file mode 100644 (file)
index 0000000..8fc600a
--- /dev/null
@@ -0,0 +1,9 @@
+CREATE TABLE "PERM_TEMPLATES_GROUPS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "GROUP_ID" INTEGER,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_GROUPS" ADD CONSTRAINT "PK_PERM_TEMPLATES_GROUPS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/DropTemplateIdColumnOfPermTemplatesGroupsTableTest/schema.sql
new file mode 100644 (file)
index 0000000..9be99eb
--- /dev/null
@@ -0,0 +1,10 @@
+CREATE TABLE "PERM_TEMPLATES_GROUPS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "GROUP_ID" INTEGER,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_GROUPS" ADD CONSTRAINT "PK_PERM_TEMPLATES_GROUPS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/MakePermTemplatesGroupsTemplateUuidColumnNotNullableTest/schema.sql
new file mode 100644 (file)
index 0000000..a3174f7
--- /dev/null
@@ -0,0 +1,10 @@
+CREATE TABLE "PERM_TEMPLATES_GROUPS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "GROUP_ID" INTEGER,
+    "TEMPLATE_UUID" VARCHAR(40),
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_GROUPS" ADD CONSTRAINT "PK_PERM_TEMPLATES_GROUPS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumnTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesgroups/PopulatePermTemplatesGroupsTemplateUuidColumnTest/schema.sql
new file mode 100644 (file)
index 0000000..5f566ad
--- /dev/null
@@ -0,0 +1,23 @@
+CREATE TABLE "PERM_TEMPLATES_GROUPS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "GROUP_ID" INTEGER,
+    "TEMPLATE_UUID" VARCHAR(40),
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_GROUPS" ADD CONSTRAINT "PK_PERM_TEMPLATES_GROUPS" PRIMARY KEY("UUID");
+
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsersTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/AddTemplateUuidColumnToPermTemplatesUsersTest/schema.sql
new file mode 100644 (file)
index 0000000..e9a334d
--- /dev/null
@@ -0,0 +1,9 @@
+CREATE TABLE "PERM_TEMPLATES_USERS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "USER_ID" INTEGER NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_USERS" ADD CONSTRAINT "PK_PERM_TEMPLATES_USERS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/DropTemplateIdColumnOfPermTemplatesUsersTableTest/schema.sql
new file mode 100644 (file)
index 0000000..af182cb
--- /dev/null
@@ -0,0 +1,10 @@
+CREATE TABLE "PERM_TEMPLATES_USERS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "USER_ID" INTEGER NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_USERS" ADD CONSTRAINT "PK_PERM_TEMPLATES_USERS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/MakePermTemplatesUsersTemplateUuidColumnNotNullableTest/schema.sql
new file mode 100644 (file)
index 0000000..d175d8a
--- /dev/null
@@ -0,0 +1,10 @@
+CREATE TABLE "PERM_TEMPLATES_USERS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "USER_ID" INTEGER NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40),
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_USERS" ADD CONSTRAINT "PK_PERM_TEMPLATES_USERS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumnTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtemplatesusers/PopulatePermTemplatesUsersTemplateUuidColumnTest/schema.sql
new file mode 100644 (file)
index 0000000..055479c
--- /dev/null
@@ -0,0 +1,23 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
+
+CREATE TABLE "PERM_TEMPLATES_USERS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "USER_ID" INTEGER NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40),
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_REFERENCE" VARCHAR(64) NOT NULL,
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP
+);
+ALTER TABLE "PERM_TEMPLATES_USERS" ADD CONSTRAINT "PK_PERM_TEMPLATES_USERS" PRIMARY KEY("UUID");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristicsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddTemplateUuidColumnToPermTplCharacteristicsTest/schema.sql
new file mode 100644 (file)
index 0000000..bd69248
--- /dev/null
@@ -0,0 +1,10 @@
+CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_KEY" VARCHAR(64) NOT NULL,
+    "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_ID", "PERMISSION_KEY");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/AddUniqueIndexOnTemplateUuidAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest/schema.sql
new file mode 100644 (file)
index 0000000..648fb65
--- /dev/null
@@ -0,0 +1,11 @@
+CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL,
+    "PERMISSION_KEY" VARCHAR(64) NOT NULL,
+    "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_ID", "PERMISSION_KEY");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropTemplateIdColumnOfPermTplCharacteristicsTableTest/schema.sql
new file mode 100644 (file)
index 0000000..f61883e
--- /dev/null
@@ -0,0 +1,11 @@
+CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "PERMISSION_KEY" VARCHAR(64) NOT NULL,
+    "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_UUID", "PERMISSION_KEY");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/DropUniqueIndexOnTemplateIdAndPermissionKeyColumnsOfPermTplCharacteristicsTableTest/schema.sql
new file mode 100644 (file)
index 0000000..47559a2
--- /dev/null
@@ -0,0 +1,11 @@
+CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_UUID" INTEGER NOT NULL,
+    "TEMPLATE_ID" VARCHAR(40) NOT NULL,
+    "PERMISSION_KEY" VARCHAR(64) NOT NULL,
+    "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_ID", "PERMISSION_KEY");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/MakePermTplCharacteristicsTemplateUuidColumnNotNullableTest/schema.sql
new file mode 100644 (file)
index 0000000..5e36ef1
--- /dev/null
@@ -0,0 +1,11 @@
+CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40),
+    "PERMISSION_KEY" VARCHAR(64) NOT NULL,
+    "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_ID", "PERMISSION_KEY");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumnTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/permissiontemplates/fk/permtplcharacteristics/PopulatePermTplCharacteristicsTemplateUuidColumnTest/schema.sql
new file mode 100644 (file)
index 0000000..2443d0d
--- /dev/null
@@ -0,0 +1,24 @@
+CREATE TABLE "PERMISSION_TEMPLATES"(
+    "ID" INTEGER NOT NULL AUTO_INCREMENT (1,1),
+    "UUID" VARCHAR(40) NOT NULL,
+    "ORGANIZATION_UUID" VARCHAR(40) NOT NULL,
+    "NAME" VARCHAR(100) NOT NULL,
+    "KEE" VARCHAR(100) NOT NULL,
+    "DESCRIPTION" VARCHAR(4000),
+    "CREATED_AT" TIMESTAMP,
+    "UPDATED_AT" TIMESTAMP,
+    "KEY_PATTERN" VARCHAR(500)
+);
+ALTER TABLE "PERMISSION_TEMPLATES" ADD CONSTRAINT "PK_PERMISSION_TEMPLATES" PRIMARY KEY("ID");
+
+CREATE TABLE "PERM_TPL_CHARACTERISTICS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "TEMPLATE_ID" INTEGER NOT NULL,
+    "TEMPLATE_UUID" VARCHAR(40),
+    "PERMISSION_KEY" VARCHAR(64) NOT NULL,
+    "WITH_PROJECT_CREATOR" BOOLEAN DEFAULT FALSE NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PERM_TPL_CHARACTERISTICS" ADD CONSTRAINT "PK_PERM_TPL_CHARACTERISTICS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PERM_TPL_CHARAC" ON "PERM_TPL_CHARACTERISTICS"("TEMPLATE_ID", "PERMISSION_KEY");
index d225562275a1e511813ace7e4e72d3ac7aa9bc01..720a2ba1be0f46604e23fe069fa1c0877fdbaece 100644 (file)
@@ -106,7 +106,7 @@ public class OrganisationSupport {
     List<PermissionTemplateGroupDto> sonarUsersPermissionTemplates = dbClient.permissionTemplateDao().selectAllGroupPermissionTemplatesByGroupId(dbSession,
       sonarUsersGroup.getId());
     sonarUsersPermissionTemplates.forEach(permissionTemplateGroup -> dbClient.permissionTemplateDao().insertGroupPermission(dbSession,
-      permissionTemplateGroup.getTemplateId(), membersGroup.getId(), permissionTemplateGroup.getPermission()));
+      permissionTemplateGroup.getTemplateUuid(), membersGroup.getId(), permissionTemplateGroup.getPermission()));
   }
 
   private List<Integer> disableTemplateRulesAndCustomRules(DbSession dbSession) {
index e591419feda4c771c8f60ef0439e797429c75466..7f6e27efb8877662986567619658d3723ccc7ad7 100644 (file)
@@ -183,7 +183,7 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater {
   }
 
   private void insertGroupPermission(DbSession dbSession, PermissionTemplateDto template, String permission, @Nullable GroupDto group) {
-    dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), group == null ? null : group.getId(), permission);
+    dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getUuid(), group == null ? null : group.getId(), permission);
   }
 
   private void insertQualityProfiles(DbSession dbSession, DbSession batchDbSession, OrganizationDto organization) {
index 5ff30743de3dc34ec6d34a962f63f0ac1ac50f1a..885d96c0016b5d134b8be8b378e8c74c544f3a86 100644 (file)
@@ -248,15 +248,15 @@ public class MemberUpdaterTest {
     PermissionTemplateDto template = db.permissionTemplates().insertTemplate(organization);
     PermissionTemplateDto anotherTemplate = db.permissionTemplates().insertTemplate(anotherOrganization);
     String permission = "browse";
-    db.permissionTemplates().addUserToTemplate(template.getId(), user.getId(), permission);
-    db.permissionTemplates().addUserToTemplate(template.getId(), anotherUser.getId(), permission);
-    db.permissionTemplates().addUserToTemplate(anotherTemplate.getId(), user.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), user.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), anotherUser.getId(), permission);
+    db.permissionTemplates().addUserToTemplate(anotherTemplate.getUuid(), user.getId(), permission);
 
     underTest.removeMember(db.getSession(), organization, user);
 
-    assertThat(dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), template.getId())).extracting(PermissionTemplateUserDto::getUserId)
+    assertThat(dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), template.getUuid())).extracting(PermissionTemplateUserDto::getUserId)
       .containsOnly(anotherUser.getId());
-    assertThat(dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), anotherTemplate.getId())).extracting(PermissionTemplateUserDto::getUserId)
+    assertThat(dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(db.getSession(), anotherTemplate.getUuid())).extracting(PermissionTemplateUserDto::getUserId)
       .containsOnly(user.getId());
   }
 
index b7f5fc4c368769236410316f1c5f577a2cbb6c84..2395ce8b26719fd1420fd4acc97a41f454647039 100644 (file)
@@ -26,10 +26,10 @@ import org.apache.commons.lang.RandomStringUtils;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.sonar.api.impl.utils.TestSystem2;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.resources.ResourceTypes;
 import org.sonar.api.utils.System2;
-import org.sonar.api.impl.utils.TestSystem2;
 import org.sonar.api.web.UserRole;
 import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.core.util.SequenceUuidFactory;
@@ -190,7 +190,7 @@ public class OrganizationUpdaterImplTest {
     DefaultTemplates defaultTemplates = dbClient.organizationDao().getDefaultTemplates(dbSession, organization.getUuid()).get();
     assertThat(defaultTemplates.getProjectUuid()).isEqualTo(defaultTemplate.getUuid());
     assertThat(defaultTemplates.getApplicationsUuid()).isNull();
-    assertThat(dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateId(dbSession, defaultTemplate.getId()))
+    assertThat(dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateUuid(dbSession, defaultTemplate.getUuid()))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(ownersGroup.getId(), UserRole.ADMIN),
index 898cd22bc914601eb5495a0e93c987227afe8240..9ab85eaddd37699312f545a9c3844b7ef98ca150 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.server.startup;
 
+import java.util.Date;
+import java.util.Optional;
 import org.picocontainer.Startable;
 import org.sonar.api.security.DefaultGroups;
 import org.sonar.api.utils.log.Logger;
@@ -33,9 +35,6 @@ import org.sonar.db.permission.template.PermissionTemplateDto;
 import org.sonar.db.user.GroupDto;
 import org.sonar.server.organization.DefaultOrganizationProvider;
 
-import java.util.Date;
-import java.util.Optional;
-
 import static java.lang.String.format;
 
 public class RegisterPermissionTemplates implements Startable {
@@ -122,7 +121,7 @@ public class RegisterPermissionTemplates implements Startable {
   }
 
   private void insertGroupPermission(DbSession dbSession, PermissionTemplateDto template, String permission, GroupDto group) {
-    dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), group.getId(), permission);
+    dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getUuid(), group.getId(), permission);
   }
 
 }
index 5ddd21fb29a8584a169fafc0415ab6bc3de85fee..8102ecbd99c24febecda9939a69c591b5e7a6ffa 100644 (file)
@@ -182,7 +182,7 @@ public class RegisterPermissionTemplatesTest {
   }
 
   private List<PermissionTemplateGroupDto> selectGroupPermissions(PermissionTemplateDto template) {
-    return db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateId(db.getSession(), template.getId());
+    return db.getDbClient().permissionTemplateDao().selectGroupPermissionsByTemplateUuid(db.getSession(), template.getUuid());
   }
 
   private void expectGroupPermission(List<PermissionTemplateGroupDto> groupPermissions, String expectedPermission,
index 30898ea5f1b1dc6a2a158a4dda1e7481f6adab02..577173115e7b5ed2e8150cd2715e9c816dabd322 100644 (file)
@@ -43,6 +43,7 @@ import org.sonar.db.permission.template.PermissionTemplateGroupDto;
 import org.sonar.db.permission.template.PermissionTemplateUserDto;
 import org.sonar.server.es.ProjectIndexer;
 import org.sonar.server.es.ProjectIndexers;
+import org.sonar.server.permission.DefaultTemplatesResolver.ResolvedDefaultTemplates;
 import org.sonar.server.user.UserSession;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -81,7 +82,7 @@ public class PermissionTemplateService {
       return false;
     }
 
-    List<String> potentialPermissions = dbClient.permissionTemplateDao().selectPotentialPermissionsByUserIdAndTemplateId(dbSession, userId, template.getId());
+    List<String> potentialPermissions = dbClient.permissionTemplateDao().selectPotentialPermissionsByUserIdAndTemplateUuid(dbSession, userId, template.getUuid());
     return potentialPermissions.contains(SCAN.getKey());
   }
 
@@ -118,7 +119,7 @@ public class PermissionTemplateService {
   }
 
   private boolean hasProjectCreatorPermission(DbSession dbSession, @Nullable PermissionTemplateDto template) {
-    return template != null && dbClient.permissionTemplateCharacteristicDao().selectByTemplateIds(dbSession, singletonList(template.getId())).stream()
+    return template != null && dbClient.permissionTemplateCharacteristicDao().selectByTemplateUuids(dbSession, singletonList(template.getUuid())).stream()
       .anyMatch(PermissionTemplateCharacteristicDto::getWithProjectCreator);
   }
 
@@ -126,7 +127,7 @@ public class PermissionTemplateService {
     dbClient.groupPermissionDao().deleteByRootComponentUuid(dbSession, project.uuid());
     dbClient.userPermissionDao().deleteProjectPermissions(dbSession, project.uuid());
 
-    List<PermissionTemplateUserDto> usersPermissions = dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getId());
+    List<PermissionTemplateUserDto> usersPermissions = dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getUuid());
     String organizationUuid = template.getOrganizationUuid();
     usersPermissions
       .stream()
@@ -136,7 +137,7 @@ public class PermissionTemplateService {
         dbClient.userPermissionDao().insert(dbSession, dto);
       });
 
-    List<PermissionTemplateGroupDto> groupsPermissions = dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateId(dbSession, template.getId());
+    List<PermissionTemplateGroupDto> groupsPermissions = dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateUuid(dbSession, template.getUuid());
     groupsPermissions
       .stream()
       .filter(gp -> groupNameValidForProject(project, gp.getGroupName()))
@@ -151,7 +152,7 @@ public class PermissionTemplateService {
         dbClient.groupPermissionDao().insert(dbSession, dto);
       });
 
-    List<PermissionTemplateCharacteristicDto> characteristics = dbClient.permissionTemplateCharacteristicDao().selectByTemplateIds(dbSession, singletonList(template.getId()));
+    List<PermissionTemplateCharacteristicDto> characteristics = dbClient.permissionTemplateCharacteristicDao().selectByTemplateUuids(dbSession, singletonList(template.getUuid()));
     if (projectCreatorUserId != null) {
       Set<String> permissionsForCurrentUserAlreadyInDb = usersPermissions.stream()
         .filter(userPermission -> projectCreatorUserId.equals(userPermission.getUserId()))
@@ -201,7 +202,7 @@ public class PermissionTemplateService {
         format("No Default templates defined for organization with uuid '%s'", organizationUuid)));
 
     String qualifier = component.qualifier();
-    DefaultTemplatesResolverImpl.ResolvedDefaultTemplates resolvedDefaultTemplates = defaultTemplatesResolver.resolve(defaultTemplates);
+    ResolvedDefaultTemplates resolvedDefaultTemplates = defaultTemplatesResolver.resolve(defaultTemplates);
     switch (qualifier) {
       case Qualifiers.PROJECT:
         return dbClient.permissionTemplateDao().selectByUuid(dbSession, resolvedDefaultTemplates.getProject());
index 83e843b3ce869c082ed0ccdbb28e184f5af3cd1d..6680a866d02405e9089752e06ee870ac6b3304b5 100644 (file)
@@ -25,20 +25,20 @@ import org.sonar.api.server.ws.WebService;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.server.permission.GroupIdOrAnyone;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
-import org.sonar.server.permission.GroupIdOrAnyone;
 
 import static java.lang.String.format;
 import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
+import static org.sonar.server.exceptions.BadRequestException.checkRequest;
 import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
 import static org.sonar.server.permission.ws.WsParameters.createGroupIdParameter;
 import static org.sonar.server.permission.ws.WsParameters.createGroupNameParameter;
 import static org.sonar.server.permission.ws.WsParameters.createTemplateParameters;
 import static org.sonar.server.permission.ws.template.WsTemplateRef.fromRequest;
-import static org.sonar.server.exceptions.BadRequestException.checkRequest;
 import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION;
 
 public class AddGroupToTemplateAction implements PermissionsWsAction {
@@ -82,15 +82,15 @@ public class AddGroupToTemplateAction implements PermissionsWsAction {
       PermissionTemplateDto template = support.findTemplate(dbSession, fromRequest(request));
       checkGlobalAdmin(userSession, template.getOrganizationUuid());
 
-      if (!groupAlreadyAdded(dbSession, template.getId(), permission, groupId)) {
-        dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), groupId.getId(), permission);
+      if (!groupAlreadyAdded(dbSession, template.getUuid(), permission, groupId)) {
+        dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getUuid(), groupId.getId(), permission);
         dbSession.commit();
       }
     }
     response.noContent();
   }
 
-  private boolean groupAlreadyAdded(DbSession dbSession, long templateId, String permission, GroupIdOrAnyone group) {
-    return dbClient.permissionTemplateDao().hasGroupsWithPermission(dbSession, templateId, permission, group.getId());
+  private boolean groupAlreadyAdded(DbSession dbSession, String templateUuid, String permission, GroupIdOrAnyone group) {
+    return dbClient.permissionTemplateDao().hasGroupsWithPermission(dbSession, templateUuid, permission, group.getId());
   }
 }
index 33e6fb2abc0b23ed5a551364dfa586107d5109ca..c997a795bfe6b203e4706072bbe077569b044ecf 100644 (file)
@@ -31,9 +31,9 @@ import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.permission.template.PermissionTemplateCharacteristicDto;
 import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
-import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
 
@@ -100,7 +100,7 @@ public class AddProjectCreatorToTemplateAction implements PermissionsWsAction {
       checkGlobalAdmin(userSession, template.getOrganizationUuid());
 
       Optional<PermissionTemplateCharacteristicDto> templatePermission = dbClient.permissionTemplateCharacteristicDao()
-        .selectByPermissionAndTemplateId(dbSession, request.getPermission(), template.getId());
+        .selectByPermissionAndTemplateId(dbSession, request.getPermission(), template.getUuid());
       if (templatePermission.isPresent()) {
         updateTemplatePermission(dbSession, templatePermission.get());
       } else {
@@ -114,7 +114,7 @@ public class AddProjectCreatorToTemplateAction implements PermissionsWsAction {
     dbClient.permissionTemplateCharacteristicDao().insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid(Uuids.create())
       .setPermission(request.getPermission())
-      .setTemplateId(template.getId())
+      .setTemplateUuid(template.getUuid())
       .setWithProjectCreator(true)
       .setCreatedAt(now)
       .setUpdatedAt(now));
index 2457e659117c0ed27a0503c3db09a3c546998bd1..b3b7473a48e2db3b1aeb1ab65b2414c69eb98a44 100644 (file)
@@ -102,16 +102,16 @@ public class AddUserToTemplateAction implements PermissionsWsAction {
       UserId user = wsSupport.findUser(dbSession, userLogin);
       wsSupport.checkMembership(dbSession, organizationDto, user);
 
-      if (!isUserAlreadyAdded(dbSession, organizationDto, template.getId(), userLogin, permission)) {
-        dbClient.permissionTemplateDao().insertUserPermission(dbSession, template.getId(), user.getId(), permission);
+      if (!isUserAlreadyAdded(dbSession, organizationDto, template.getUuid(), userLogin, permission)) {
+        dbClient.permissionTemplateDao().insertUserPermission(dbSession, template.getUuid(), user.getId(), permission);
         dbSession.commit();
       }
     }
   }
 
-  private boolean isUserAlreadyAdded(DbSession dbSession, OrganizationDto organizationDto, long templateId, String userLogin, String permission) {
+  private boolean isUserAlreadyAdded(DbSession dbSession, OrganizationDto organizationDto, String templateUuid, String userLogin, String permission) {
     PermissionQuery permissionQuery = PermissionQuery.builder().setOrganizationUuid(organizationDto.getUuid()).setPermission(permission).build();
-    List<String> usersWithPermission = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, permissionQuery, templateId);
+    List<String> usersWithPermission = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, permissionQuery, templateUuid);
     return usersWithPermission.stream().anyMatch(s -> s.equals(userLogin));
   }
 
index 83f6409e77dbfebf6f26be0bfcdf6a7d9f0615ef..962d0f9433435e9070a7d677a02be7fbef9f19c4 100644 (file)
@@ -29,16 +29,17 @@ import org.sonar.db.DbSession;
 import org.sonar.db.organization.DefaultTemplates;
 import org.sonar.db.permission.template.PermissionTemplateDto;
 import org.sonar.server.permission.DefaultTemplatesResolver;
+import org.sonar.server.permission.DefaultTemplatesResolver.ResolvedDefaultTemplates;
 import org.sonar.server.permission.DefaultTemplatesResolverImpl;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
 
+import static org.sonar.server.exceptions.BadRequestException.checkRequest;
+import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional;
 import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
 import static org.sonar.server.permission.ws.template.WsTemplateRef.newTemplateRef;
-import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional;
-import static org.sonar.server.exceptions.BadRequestException.checkRequest;
 import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ORGANIZATION;
 import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_ID;
 import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_NAME;
@@ -91,7 +92,7 @@ public class DeleteTemplateAction implements PermissionsWsAction {
       DefaultTemplates defaultTemplates = retrieveDefaultTemplates(dbSession, template);
 
       checkTemplateUuidIsNotDefault(template, defaultTemplates);
-      dbClient.permissionTemplateDao().deleteById(dbSession, template.getId());
+      dbClient.permissionTemplateDao().deleteByUuid(dbSession, template.getUuid());
       updateViewDefaultTemplateWhenGovernanceIsNotInstalled(dbSession, template, defaultTemplates);
 
       dbSession.commit();
@@ -118,7 +119,7 @@ public class DeleteTemplateAction implements PermissionsWsAction {
   }
 
   private void checkTemplateUuidIsNotDefault(PermissionTemplateDto template, DefaultTemplates defaultTemplates) {
-    DefaultTemplatesResolverImpl.ResolvedDefaultTemplates resolvedDefaultTemplates = defaultTemplatesResolver.resolve(defaultTemplates);
+    ResolvedDefaultTemplates resolvedDefaultTemplates = defaultTemplatesResolver.resolve(defaultTemplates);
     checkRequest(!resolvedDefaultTemplates.getProject().equals(template.getUuid()),
       "It is not possible to delete the default permission template for projects");
     resolvedDefaultTemplates.getApplication()
index b79a226b282ec9a6f87a59b019ea08a826621521..af80d88a403e0d66d28f23d2c3f61237dc56de93 100644 (file)
@@ -25,11 +25,11 @@ import org.sonar.api.server.ws.WebService;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.server.permission.GroupIdOrAnyone;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
-import org.sonar.server.permission.GroupIdOrAnyone;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
@@ -77,7 +77,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction {
       GroupIdOrAnyone groupId = wsSupport.findGroup(dbSession, request);
       checkArgument(groupId.getOrganizationUuid().equals(template.getOrganizationUuid()), "Group and template are on different organizations");
 
-      dbClient.permissionTemplateDao().deleteGroupPermission(dbSession, template.getId(), groupId.getId(), permission);
+      dbClient.permissionTemplateDao().deleteGroupPermission(dbSession, template.getUuid(), groupId.getId(), permission);
       dbSession.commit();
     }
     response.noContent();
index a4f23808262416e3031afba3145fce58f31775bf..5560b846aba541700a52c621e7ec1fa53782b82b 100644 (file)
@@ -30,9 +30,9 @@ import org.sonar.db.DbSession;
 import org.sonar.db.permission.template.PermissionTemplateCharacteristicDao;
 import org.sonar.db.permission.template.PermissionTemplateCharacteristicDto;
 import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
-import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
 
@@ -99,7 +99,7 @@ public class RemoveProjectCreatorFromTemplateAction implements PermissionsWsActi
       checkGlobalAdmin(userSession, template.getOrganizationUuid());
 
       PermissionTemplateCharacteristicDao dao = dbClient.permissionTemplateCharacteristicDao();
-      dao.selectByPermissionAndTemplateId(dbSession, request.getPermission(), template.getId())
+      dao.selectByPermissionAndTemplateId(dbSession, request.getPermission(), template.getUuid())
         .ifPresent(permissionTemplateCharacteristicDto -> updateTemplateCharacteristic(dbSession, permissionTemplateCharacteristicDto));
     }
   }
index b1167db6c24ea251c381dd1b8c9a90602725a66f..7c7b0b17eb4467409e322c88d7ea572163c9d03c 100644 (file)
@@ -27,10 +27,10 @@ import org.sonar.api.server.ws.WebService;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.UserId;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
-import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
 
@@ -101,7 +101,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction {
 
       UserId user = wsSupport.findUser(dbSession, userLogin);
 
-      dbClient.permissionTemplateDao().deleteUserPermission(dbSession, template.getId(), user.getId(), permission);
+      dbClient.permissionTemplateDao().deleteUserPermission(dbSession, template.getUuid(), user.getId(), permission);
       dbSession.commit();
     }
   }
index 4553bbb61b6ccebfa043f636289d6f7ad24644df..a84372025455b30f1719ea89f36968bac1577ba6 100644 (file)
@@ -40,6 +40,7 @@ import org.sonar.db.permission.template.CountByTemplateAndPermissionDto;
 import org.sonar.db.permission.template.PermissionTemplateCharacteristicDto;
 import org.sonar.db.permission.template.PermissionTemplateDto;
 import org.sonar.server.permission.DefaultTemplatesResolver;
+import org.sonar.server.permission.DefaultTemplatesResolver.ResolvedDefaultTemplates;
 import org.sonar.server.permission.DefaultTemplatesResolverImpl;
 import org.sonar.server.permission.PermissionService;
 import org.sonar.server.permission.ws.PermissionWsSupport;
@@ -54,9 +55,9 @@ import org.sonarqube.ws.Permissions.SearchTemplatesWsResponse.TemplateIdQualifie
 
 import static java.util.Optional.ofNullable;
 import static org.sonar.api.utils.DateUtils.formatDateTime;
+import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional;
 import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
 import static org.sonar.server.permission.ws.template.SearchTemplatesData.builder;
-import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional;
 import static org.sonar.server.ws.WsUtils.writeProtobuf;
 import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ORGANIZATION;
 
@@ -111,7 +112,7 @@ public class SearchTemplatesAction implements PermissionsWsAction {
   private static void buildDefaultTemplatesResponse(SearchTemplatesWsResponse.Builder response, SearchTemplatesData data) {
     TemplateIdQualifier.Builder templateUuidQualifierBuilder = TemplateIdQualifier.newBuilder();
 
-    DefaultTemplatesResolverImpl.ResolvedDefaultTemplates resolvedDefaultTemplates = data.defaultTemplates();
+    ResolvedDefaultTemplates resolvedDefaultTemplates = data.defaultTemplates();
     response.addDefaultTemplates(templateUuidQualifierBuilder
       .setQualifier(Qualifiers.PROJECT)
       .setTemplateId(resolvedDefaultTemplates.getProject()));
@@ -149,9 +150,9 @@ public class SearchTemplatesAction implements PermissionsWsAction {
           permissionResponse
             .clear()
             .setKey(permission)
-            .setUsersCount(data.userCount(templateDto.getId(), permission))
-            .setGroupsCount(data.groupCount(templateDto.getId(), permission))
-            .setWithProjectCreator(data.withProjectCreator(templateDto.getId(), permission)));
+            .setUsersCount(data.userCount(templateDto.getUuid(), permission))
+            .setGroupsCount(data.groupCount(templateDto.getUuid(), permission))
+            .setWithProjectCreator(data.withProjectCreator(templateDto.getUuid(), permission)));
       }
       response.addPermissionTemplates(templateBuilder);
     }
@@ -190,18 +191,18 @@ public class SearchTemplatesAction implements PermissionsWsAction {
   private SearchTemplatesData load(DbSession dbSession, SearchTemplatesRequest request) {
     SearchTemplatesData.Builder data = builder();
     List<PermissionTemplateDto> templates = searchTemplates(dbSession, request);
-    List<Long> templateIds = Lists.transform(templates, PermissionTemplateDto::getId);
+    List<String> templateUuids = Lists.transform(templates, PermissionTemplateDto::getUuid);
 
     DefaultTemplates defaultTemplates = checkFoundWithOptional(
-            dbClient.organizationDao().getDefaultTemplates(dbSession, request.getOrganizationUuid()),
-            "No Default templates for organization with uuid '%s'", request.getOrganizationUuid());
-    DefaultTemplatesResolver.ResolvedDefaultTemplates resolvedDefaultTemplates = defaultTemplatesResolver.resolve(defaultTemplates);
+      dbClient.organizationDao().getDefaultTemplates(dbSession, request.getOrganizationUuid()),
+      "No Default templates for organization with uuid '%s'", request.getOrganizationUuid());
+    ResolvedDefaultTemplates resolvedDefaultTemplates = defaultTemplatesResolver.resolve(defaultTemplates);
 
     data.templates(templates)
-            .defaultTemplates(resolvedDefaultTemplates)
-            .userCountByTemplateIdAndPermission(userCountByTemplateIdAndPermission(dbSession, templateIds))
-            .groupCountByTemplateIdAndPermission(groupCountByTemplateIdAndPermission(dbSession, templateIds))
-            .withProjectCreatorByTemplateIdAndPermission(withProjectCreatorsByTemplateIdAndPermission(dbSession, templateIds));
+      .defaultTemplates(resolvedDefaultTemplates)
+      .userCountByTemplateUuidAndPermission(userCountByTemplateUuidAndPermission(dbSession, templateUuids))
+      .groupCountByTemplateUuidAndPermission(groupCountByTemplateUuidAndPermission(dbSession, templateUuids))
+      .withProjectCreatorByTemplateUuidAndPermission(withProjectCreatorsByTemplateUuidAndPermission(dbSession, templateUuids));
 
     return data.build();
   }
@@ -210,37 +211,37 @@ public class SearchTemplatesAction implements PermissionsWsAction {
     return dbClient.permissionTemplateDao().selectAll(dbSession, request.getOrganizationUuid(), request.getQuery());
   }
 
-  private Table<Long, String, Integer> userCountByTemplateIdAndPermission(DbSession dbSession, List<Long> templateIds) {
-    final Table<Long, String, Integer> userCountByTemplateIdAndPermission = TreeBasedTable.create();
+  private Table<String, String, Integer> userCountByTemplateUuidAndPermission(DbSession dbSession, List<String> templateUuids) {
+    final Table<String, String, Integer> userCountByTemplateUuidAndPermission = TreeBasedTable.create();
 
-    dbClient.permissionTemplateDao().usersCountByTemplateIdAndPermission(dbSession, templateIds, context -> {
+    dbClient.permissionTemplateDao().usersCountByTemplateUuidAndPermission(dbSession, templateUuids, context -> {
       CountByTemplateAndPermissionDto row = context.getResultObject();
-      userCountByTemplateIdAndPermission.put(row.getTemplateId(), row.getPermission(), row.getCount());
+      userCountByTemplateUuidAndPermission.put(row.getTemplateUuid(), row.getPermission(), row.getCount());
     });
 
-    return userCountByTemplateIdAndPermission;
+    return userCountByTemplateUuidAndPermission;
   }
 
-  private Table<Long, String, Integer> groupCountByTemplateIdAndPermission(DbSession dbSession, List<Long> templateIds) {
-    final Table<Long, String, Integer> userCountByTemplateIdAndPermission = TreeBasedTable.create();
+  private Table<String, String, Integer> groupCountByTemplateUuidAndPermission(DbSession dbSession, List<String> templateUuids) {
+    final Table<String, String, Integer> userCountByTemplateUuidAndPermission = TreeBasedTable.create();
 
-    dbClient.permissionTemplateDao().groupsCountByTemplateIdAndPermission(dbSession, templateIds, context -> {
+    dbClient.permissionTemplateDao().groupsCountByTemplateUuidAndPermission(dbSession, templateUuids, context -> {
       CountByTemplateAndPermissionDto row = context.getResultObject();
-      userCountByTemplateIdAndPermission.put(row.getTemplateId(), row.getPermission(), row.getCount());
+      userCountByTemplateUuidAndPermission.put(row.getTemplateUuid(), row.getPermission(), row.getCount());
     });
 
-    return userCountByTemplateIdAndPermission;
+    return userCountByTemplateUuidAndPermission;
   }
 
-  private Table<Long, String, Boolean> withProjectCreatorsByTemplateIdAndPermission(DbSession dbSession, List<Long> templateIds) {
-    final Table<Long, String, Boolean> templatePermissionsByTemplateIdAndPermission = TreeBasedTable.create();
+  private Table<String, String, Boolean> withProjectCreatorsByTemplateUuidAndPermission(DbSession dbSession, List<String> templateUuids) {
+    final Table<String, String, Boolean> templatePermissionsByTemplateUuidAndPermission = TreeBasedTable.create();
 
-    List<PermissionTemplateCharacteristicDto> templatePermissions = dbClient.permissionTemplateCharacteristicDao().selectByTemplateIds(dbSession, templateIds);
+    List<PermissionTemplateCharacteristicDto> templatePermissions = dbClient.permissionTemplateCharacteristicDao().selectByTemplateUuids(dbSession, templateUuids);
     templatePermissions.stream()
-            .forEach(templatePermission -> templatePermissionsByTemplateIdAndPermission.put(templatePermission.getTemplateId(), templatePermission.getPermission(),
-                    templatePermission.getWithProjectCreator()));
+      .forEach(templatePermission -> templatePermissionsByTemplateUuidAndPermission.put(templatePermission.getTemplateUuid(), templatePermission.getPermission(),
+        templatePermission.getWithProjectCreator()));
 
-    return templatePermissionsByTemplateIdAndPermission;
+    return templatePermissionsByTemplateUuidAndPermission;
   }
 
   private static class SearchTemplatesRequest {
index 92cdd041afd415b7e954cf692721eb209ef18298..237e86871595450869690ffd6a47dbd237b26831 100644 (file)
@@ -32,16 +32,16 @@ import static com.google.common.collect.ImmutableTable.copyOf;
 class SearchTemplatesData {
   private final List<PermissionTemplateDto> templates;
   private final ResolvedDefaultTemplates defaultTemplates;
-  private final Table<Long, String, Integer> userCountByTemplateIdAndPermission;
-  private final Table<Long, String, Integer> groupCountByTemplateIdAndPermission;
-  private final Table<Long, String, Boolean> withProjectCreatorByTemplateIdAndPermission;
+  private final Table<String, String, Integer> userCountByTemplateUuidAndPermission;
+  private final Table<String, String, Integer> groupCountByTemplateUuidAndPermission;
+  private final Table<String, String, Boolean> withProjectCreatorByTemplateUuidAndPermission;
 
   private SearchTemplatesData(Builder builder) {
     this.templates = copyOf(builder.templates);
     this.defaultTemplates = builder.defaultTemplates;
-    this.userCountByTemplateIdAndPermission = copyOf(builder.userCountByTemplateIdAndPermission);
-    this.groupCountByTemplateIdAndPermission = copyOf(builder.groupCountByTemplateIdAndPermission);
-    this.withProjectCreatorByTemplateIdAndPermission = copyOf(builder.withProjectCreatorByTemplateIdAndPermission);
+    this.userCountByTemplateUuidAndPermission = copyOf(builder.userCountByTemplateUuidAndPermission);
+    this.groupCountByTemplateUuidAndPermission = copyOf(builder.groupCountByTemplateUuidAndPermission);
+    this.withProjectCreatorByTemplateUuidAndPermission = copyOf(builder.withProjectCreatorByTemplateUuidAndPermission);
   }
 
   public static Builder builder() {
@@ -56,24 +56,24 @@ class SearchTemplatesData {
     return defaultTemplates;
   }
 
-  public int userCount(long templateId, String permission) {
-    return firstNonNull(userCountByTemplateIdAndPermission.get(templateId, permission), 0);
+  public int userCount(String templateUuid, String permission) {
+    return firstNonNull(userCountByTemplateUuidAndPermission.get(templateUuid, permission), 0);
   }
 
-  public int groupCount(long templateId, String permission) {
-    return firstNonNull(groupCountByTemplateIdAndPermission.get(templateId, permission), 0);
+  public int groupCount(String templateUuid, String permission) {
+    return firstNonNull(groupCountByTemplateUuidAndPermission.get(templateUuid, permission), 0);
   }
 
-  public boolean withProjectCreator(long templateId, String permission) {
-    return firstNonNull(withProjectCreatorByTemplateIdAndPermission.get(templateId, permission), false);
+  public boolean withProjectCreator(String templateUuid, String permission) {
+    return firstNonNull(withProjectCreatorByTemplateUuidAndPermission.get(templateUuid, permission), false);
   }
 
   public static class Builder {
     private List<PermissionTemplateDto> templates;
     private ResolvedDefaultTemplates defaultTemplates;
-    private Table<Long, String, Integer> userCountByTemplateIdAndPermission;
-    private Table<Long, String, Integer> groupCountByTemplateIdAndPermission;
-    private Table<Long, String, Boolean> withProjectCreatorByTemplateIdAndPermission;
+    private Table<String, String, Integer> userCountByTemplateUuidAndPermission;
+    private Table<String, String, Integer> groupCountByTemplateUuidAndPermission;
+    private Table<String, String, Boolean> withProjectCreatorByTemplateUuidAndPermission;
 
     private Builder() {
       // prevents instantiation outside main class
@@ -82,9 +82,9 @@ class SearchTemplatesData {
     public SearchTemplatesData build() {
       checkState(templates != null);
       checkState(defaultTemplates != null);
-      checkState(userCountByTemplateIdAndPermission != null);
-      checkState(groupCountByTemplateIdAndPermission != null);
-      checkState(withProjectCreatorByTemplateIdAndPermission != null);
+      checkState(userCountByTemplateUuidAndPermission != null);
+      checkState(groupCountByTemplateUuidAndPermission != null);
+      checkState(withProjectCreatorByTemplateUuidAndPermission != null);
 
       return new SearchTemplatesData(this);
     }
@@ -99,18 +99,18 @@ class SearchTemplatesData {
       return this;
     }
 
-    public Builder userCountByTemplateIdAndPermission(Table<Long, String, Integer> userCountByTemplateIdAndPermission) {
-      this.userCountByTemplateIdAndPermission = userCountByTemplateIdAndPermission;
+    public Builder userCountByTemplateUuidAndPermission(Table<String, String, Integer> userCountByTemplateUuidAndPermission) {
+      this.userCountByTemplateUuidAndPermission = userCountByTemplateUuidAndPermission;
       return this;
     }
 
-    public Builder groupCountByTemplateIdAndPermission(Table<Long, String, Integer> groupCountByTemplateIdAndPermission) {
-      this.groupCountByTemplateIdAndPermission = groupCountByTemplateIdAndPermission;
+    public Builder groupCountByTemplateUuidAndPermission(Table<String, String, Integer> groupCountByTemplateUuidAndPermission) {
+      this.groupCountByTemplateUuidAndPermission = groupCountByTemplateUuidAndPermission;
       return this;
     }
 
-    public Builder withProjectCreatorByTemplateIdAndPermission(Table<Long, String, Boolean> withProjectCreatorByTemplateIdAndPermission) {
-      this.withProjectCreatorByTemplateIdAndPermission = withProjectCreatorByTemplateIdAndPermission;
+    public Builder withProjectCreatorByTemplateUuidAndPermission(Table<String, String, Boolean> withProjectCreatorByTemplateUuidAndPermission) {
+      this.withProjectCreatorByTemplateUuidAndPermission = withProjectCreatorByTemplateUuidAndPermission;
       return this;
     }
   }
index 12fd1cb11a9c84785099b48f3e592bc3b8e375b1..eb6bc4db4c03aefbbcbd4a6e1794733ef696634f 100644 (file)
@@ -35,9 +35,9 @@ import org.sonar.db.permission.PermissionQuery;
 import org.sonar.db.permission.template.PermissionTemplateDto;
 import org.sonar.db.permission.template.PermissionTemplateGroupDto;
 import org.sonar.db.user.GroupDto;
+import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
-import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
 import org.sonarqube.ws.Permissions;
@@ -99,7 +99,7 @@ public class TemplateGroupsAction implements PermissionsWsAction {
       checkGlobalAdmin(userSession, template.getOrganizationUuid());
 
       PermissionQuery query = buildPermissionQuery(wsRequest, template);
-      int total = dbClient.permissionTemplateDao().countGroupNamesByQueryAndTemplate(dbSession, query, template.getOrganizationUuid(), template.getId());
+      int total = dbClient.permissionTemplateDao().countGroupNamesByQueryAndTemplate(dbSession, query, template.getOrganizationUuid(), template.getUuid());
       Paging paging = Paging.forPageIndex(wsRequest.mandatoryParamAsInt(PAGE)).withPageSize(wsRequest.mandatoryParamAsInt(PAGE_SIZE)).andTotal(total);
       List<GroupDto> groups = findGroups(dbSession, query, template);
       List<PermissionTemplateGroupDto> groupPermissions = findGroupPermissions(dbSession, groups, template);
@@ -143,7 +143,7 @@ public class TemplateGroupsAction implements PermissionsWsAction {
   }
 
   private List<GroupDto> findGroups(DbSession dbSession, PermissionQuery dbQuery, PermissionTemplateDto template) {
-    List<String> orderedNames = dbClient.permissionTemplateDao().selectGroupNamesByQueryAndTemplate(dbSession, dbQuery, template.getId());
+    List<String> orderedNames = dbClient.permissionTemplateDao().selectGroupNamesByQueryAndTemplate(dbSession, dbQuery, template.getUuid());
     List<GroupDto> groups = dbClient.groupDao().selectByNames(dbSession, template.getOrganizationUuid(), orderedNames);
     if (orderedNames.contains(DefaultGroups.ANYONE)) {
       groups.add(0, new GroupDto().setId(0).setName(DefaultGroups.ANYONE));
@@ -153,6 +153,6 @@ public class TemplateGroupsAction implements PermissionsWsAction {
 
   private List<PermissionTemplateGroupDto> findGroupPermissions(DbSession dbSession, List<GroupDto> groups, PermissionTemplateDto template) {
     List<String> names = groups.stream().map(GroupDto::getName).collect(Collectors.toList());
-    return dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateIdAndGroupNames(dbSession, template.getId(), names);
+    return dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateIdAndGroupNames(dbSession, template.getUuid(), names);
   }
 }
index 76eba3e2b2f4d73f05489b0d0710f60eccaf401a..8dee14eebc789916156838b9c609e3ffd09e30b9 100644 (file)
@@ -106,10 +106,10 @@ public class TemplateUsersAction implements PermissionsWsAction {
       checkGlobalAdmin(userSession, template.getOrganizationUuid());
 
       PermissionQuery query = buildQuery(wsRequest, template);
-      int total = dbClient.permissionTemplateDao().countUserLoginsByQueryAndTemplate(dbSession, query, template.getId());
+      int total = dbClient.permissionTemplateDao().countUserLoginsByQueryAndTemplate(dbSession, query, template.getUuid());
       Paging paging = Paging.forPageIndex(wsRequest.mandatoryParamAsInt(PAGE)).withPageSize(wsRequest.mandatoryParamAsInt(PAGE_SIZE)).andTotal(total);
       List<UserDto> users = findUsers(dbSession, query, template);
-      List<PermissionTemplateUserDto> permissionTemplateUsers = dbClient.permissionTemplateDao().selectUserPermissionsByTemplateIdAndUserLogins(dbSession, template.getId(),
+      List<PermissionTemplateUserDto> permissionTemplateUsers = dbClient.permissionTemplateDao().selectUserPermissionsByTemplateIdAndUserLogins(dbSession, template.getUuid(),
         users.stream().map(UserDto::getLogin).collect(Collectors.toList()));
       Permissions.UsersWsResponse templateUsersResponse = buildResponse(users, permissionTemplateUsers, paging);
       writeProtobuf(templateUsersResponse, wsRequest, wsResponse);
@@ -150,7 +150,7 @@ public class TemplateUsersAction implements PermissionsWsAction {
   }
 
   private List<UserDto> findUsers(DbSession dbSession, PermissionQuery query, PermissionTemplateDto template) {
-    List<String> orderedLogins = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, query, template.getId());
+    List<String> orderedLogins = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, query, template.getUuid());
     return Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin).immutableSortedCopy(dbClient.userDao().selectByLogins(dbSession, orderedLogins));
   }
 
index b45700038e2a3da471f66402a0041c47979c0ed7..d785e1081f70cee62ce902c441417fddfc0b3dc8 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.server.permission.ws.template;
 
 import java.util.Date;
+import java.util.Objects;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import org.sonar.api.server.ws.Request;
@@ -30,9 +31,9 @@ import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.permission.template.PermissionTemplateDto;
 import org.sonar.server.exceptions.BadRequestException;
+import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.PermissionWsSupport;
 import org.sonar.server.permission.ws.PermissionsWsAction;
-import org.sonar.server.permission.RequestValidator;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.user.UserSession;
 import org.sonarqube.ws.Permissions.PermissionTemplate;
@@ -42,10 +43,10 @@ import static com.google.common.base.MoreObjects.firstNonNull;
 import static java.lang.String.format;
 import static java.util.Objects.requireNonNull;
 import static org.apache.commons.lang.StringUtils.isBlank;
+import static org.sonar.server.exceptions.BadRequestException.checkRequest;
 import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
 import static org.sonar.server.permission.RequestValidator.MSG_TEMPLATE_WITH_SAME_NAME;
 import static org.sonar.server.permission.ws.template.PermissionTemplateDtoToPermissionTemplateResponse.toPermissionTemplateResponse;
-import static org.sonar.server.exceptions.BadRequestException.checkRequest;
 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_ID;
@@ -123,7 +124,7 @@ public class UpdateTemplateAction implements PermissionsWsAction {
   }
 
   private void validateTemplate(DbSession dbSession, PermissionTemplateDto templateToUpdate) {
-    validateTemplateNameForUpdate(dbSession, templateToUpdate.getOrganizationUuid(), templateToUpdate.getName(), templateToUpdate.getId());
+    validateTemplateNameForUpdate(dbSession, templateToUpdate.getOrganizationUuid(), templateToUpdate.getName(), templateToUpdate.getUuid());
     RequestValidator.validateProjectPattern(templateToUpdate.getKeyPattern());
   }
 
@@ -142,11 +143,11 @@ public class UpdateTemplateAction implements PermissionsWsAction {
     return dbClient.permissionTemplateDao().update(dbSession, templateToUpdate);
   }
 
-  private void validateTemplateNameForUpdate(DbSession dbSession, String organizationUuid, String name, long id) {
+  private void validateTemplateNameForUpdate(DbSession dbSession, String organizationUuid, String name, String uuid) {
     BadRequestException.checkRequest(!isBlank(name), "The template name must not be blank");
 
     PermissionTemplateDto permissionTemplateWithSameName = dbClient.permissionTemplateDao().selectByName(dbSession, organizationUuid, name);
-    checkRequest(permissionTemplateWithSameName == null || permissionTemplateWithSameName.getId() == id,
+    checkRequest(permissionTemplateWithSameName == null || Objects.equals(permissionTemplateWithSameName.getUuid(), uuid),
       format(MSG_TEMPLATE_WITH_SAME_NAME, name));
   }
 
index 8516357ed9a5c3d65694c730010958925b56154c..d5a7d4c31ca98b82acf27f894112ef6340323e7d 100644 (file)
@@ -27,11 +27,11 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.utils.TestSystem2;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.resources.ResourceTypes;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.utils.System2;
-import org.sonar.api.impl.utils.TestSystem2;
 import org.sonar.api.web.UserRole;
 import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.core.util.UuidFactoryFast;
@@ -217,7 +217,7 @@ public class CreateActionTest {
     DefaultTemplates defaultTemplates = dbClient.organizationDao().getDefaultTemplates(dbSession, organization.getUuid()).get();
     assertThat(defaultTemplates.getProjectUuid()).isEqualTo(defaultTemplate.getUuid());
     assertThat(defaultTemplates.getApplicationsUuid()).isNull();
-    assertThat(dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateId(dbSession, defaultTemplate.getId()))
+    assertThat(dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateUuid(dbSession, defaultTemplate.getUuid()))
       .extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission)
       .containsOnly(
         tuple(ownersGroup.getId(), UserRole.ADMIN),
index 3e58bdc3420117f57931f77cf14b932b7e837533..7265a3fa09f67ec90c01996469101fd28eaff47c 100644 (file)
@@ -453,10 +453,10 @@ public class PermissionTemplateServiceTest {
     dbTester.users().insertMember(group, user);
     PermissionTemplateDto template = templateDb.insertTemplate(organization);
     dbTester.organizations().setDefaultTemplates(template, null, null);
-    templateDb.addProjectCreatorToTemplate(template.getId(), SCAN.getKey());
-    templateDb.addUserToTemplate(template.getId(), user.getId(), UserRole.USER);
-    templateDb.addGroupToTemplate(template.getId(), group.getId(), UserRole.CODEVIEWER);
-    templateDb.addGroupToTemplate(template.getId(), null, UserRole.ISSUE_ADMIN);
+    templateDb.addProjectCreatorToTemplate(template.getUuid(), SCAN.getKey());
+    templateDb.addUserToTemplate(template.getUuid(), user.getId(), UserRole.USER);
+    templateDb.addGroupToTemplate(template.getUuid(), group.getId(), UserRole.CODEVIEWER);
+    templateDb.addGroupToTemplate(template.getUuid(), null, UserRole.ISSUE_ADMIN);
 
     // authenticated user
     checkWouldUserHaveScanPermission(organization, user.getId(), true);
index e83a96f4cce58095b0fe4ae375be08d0f6befccf..40f5001505459355d5199e9085e4473360557ad8 100644 (file)
@@ -217,6 +217,6 @@ public class AddGroupToTemplateActionTest extends BasePermissionWsTest<AddGroupT
   private List<String> getGroupNamesInTemplateAndPermission(PermissionTemplateDto template, String permission) {
     PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(template.getOrganizationUuid()).setPermission(permission).build();
     return db.getDbClient().permissionTemplateDao()
-      .selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getId());
+      .selectGroupNamesByQueryAndTemplate(db.getSession(), query, template.getUuid());
   }
 }
index 92e714a339736ae840d1981a47c3893f1dd8f69d..bb9554a2b82dc001195aee36c6a995a9dda3097d 100644 (file)
@@ -34,8 +34,8 @@ import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.permission.PermissionService;
 import org.sonar.server.permission.PermissionServiceImpl;
-import org.sonar.server.permission.ws.BasePermissionWsTest;
 import org.sonar.server.permission.RequestValidator;
+import org.sonar.server.permission.ws.BasePermissionWsTest;
 import org.sonar.server.permission.ws.WsParameters;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -76,7 +76,7 @@ public class AddProjectCreatorToTemplateActionTest extends BasePermissionWsTest<
       .setParam(PARAM_TEMPLATE_ID, template.getUuid())
       .execute();
 
-    assertThatProjectCreatorIsPresentFor(UserRole.ADMIN, template.getId());
+    assertThatProjectCreatorIsPresentFor(UserRole.ADMIN, template.getUuid());
   }
 
   @Test
@@ -85,7 +85,7 @@ public class AddProjectCreatorToTemplateActionTest extends BasePermissionWsTest<
     PermissionTemplateCharacteristicDto characteristic = db.getDbClient().permissionTemplateCharacteristicDao().insert(db.getSession(),
       new PermissionTemplateCharacteristicDto()
         .setUuid(Uuids.createFast())
-        .setTemplateId(template.getId())
+        .setTemplateUuid(template.getUuid())
         .setPermission(UserRole.USER)
         .setWithProjectCreator(false)
         .setCreatedAt(1_000_000_000L)
@@ -98,7 +98,7 @@ public class AddProjectCreatorToTemplateActionTest extends BasePermissionWsTest<
       .setParam(PARAM_TEMPLATE_NAME, template.getName())
       .execute();
 
-    assertThatProjectCreatorIsPresentFor(UserRole.USER, template.getId());
+    assertThatProjectCreatorIsPresentFor(UserRole.USER, template.getUuid());
     PermissionTemplateCharacteristicDto reloaded = reload(characteristic);
     assertThat(reloaded.getCreatedAt()).isEqualTo(1_000_000_000L);
     assertThat(reloaded.getUpdatedAt()).isEqualTo(3_000_000_000L);
@@ -140,15 +140,16 @@ public class AddProjectCreatorToTemplateActionTest extends BasePermissionWsTest<
       .execute();
   }
 
-  private void assertThatProjectCreatorIsPresentFor(String permission, long templateId) {
+  private void assertThatProjectCreatorIsPresentFor(String permission, String templateUuid) {
     Optional<PermissionTemplateCharacteristicDto> templatePermission = db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(),
       permission,
-      templateId);
+      templateUuid);
     assertThat(templatePermission).isPresent();
     assertThat(templatePermission.get().getWithProjectCreator()).isTrue();
   }
 
   private PermissionTemplateCharacteristicDto reload(PermissionTemplateCharacteristicDto characteristic) {
-    return db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(), characteristic.getPermission(), characteristic.getTemplateId()).get();
+    return db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(), characteristic.getPermission(), characteristic.getTemplateUuid())
+      .get();
   }
 }
index b31a63b46e34bb818e1a77ffea65c92fe3cf4180..f814ef4ccad026428815fd98b325cc9eceaa4d44 100644 (file)
@@ -236,7 +236,7 @@ public class AddUserToTemplateActionTest extends BasePermissionWsTest<AddUserToT
   private List<String> getLoginsInTemplateAndPermission(PermissionTemplateDto template, String permission) {
     PermissionQuery permissionQuery = PermissionQuery.builder().setOrganizationUuid(template.getOrganizationUuid()).setPermission(permission).build();
     return db.getDbClient().permissionTemplateDao()
-      .selectUserLoginsByQueryAndTemplate(db.getSession(), permissionQuery, template.getId());
+      .selectUserLoginsByQueryAndTemplate(db.getSession(), permissionQuery, template.getUuid());
   }
 
   private void addUserAsMemberOfOrganization(OrganizationDto organization) {
index 959329d04cc4a9ff98cd3718708cd1c1fca42ca0..b5a79611dc245bd48b3fd4ef843f2f85f5b7ef7c 100644 (file)
@@ -207,12 +207,12 @@ public class ApplyTemplateActionTest extends BasePermissionWsTest<ApplyTemplateA
   }
 
   private void addUserToTemplate(UserDto user, PermissionTemplateDto permissionTemplate, String permission) {
-    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), permissionTemplate.getId(), user.getId(), permission);
+    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), permissionTemplate.getUuid(), user.getId(), permission);
     db.commit();
   }
 
   private void addGroupToTemplate(GroupDto group, PermissionTemplateDto permissionTemplate, String permission) {
-    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), permissionTemplate.getId(), group.getId(), permission);
+    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), permissionTemplate.getUuid(), group.getId(), permission);
     db.commit();
   }
 
index 63a00a2d92d5b93945d9ef35c92063c997f31326..2aa2bc0c7b231f31768297395c31f3a72393f0d7 100644 (file)
@@ -345,12 +345,12 @@ public class BulkApplyTemplateActionTest extends BasePermissionWsTest<BulkApplyT
   }
 
   private void addUserToTemplate(UserDto user, PermissionTemplateDto permissionTemplate, String permission) {
-    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), permissionTemplate.getId(), user.getId(), permission);
+    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), permissionTemplate.getUuid(), user.getId(), permission);
     db.commit();
   }
 
   private void addGroupToTemplate(GroupDto group, PermissionTemplateDto permissionTemplate, String permission) {
-    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), permissionTemplate.getId(), group.getId(), permission);
+    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), permissionTemplate.getUuid(), group.getId(), permission);
     db.commit();
   }
 
index fbbc27f1ef890215949be5ffcdae3a6663dbb547..ea198a9630645e54f3892e5c7276fbe46345969c 100644 (file)
@@ -421,8 +421,8 @@ public class DeleteTemplateActionTest {
     PermissionTemplateDto dto = db.permissionTemplates().insertTemplate(organization);
     UserDto user = db.getDbClient().userDao().insert(db.getSession(), UserTesting.newUserDto().setActive(true));
     GroupDto group = db.getDbClient().groupDao().insert(db.getSession(), GroupTesting.newGroupDto());
-    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), dto.getId(), user.getId(), UserRole.ADMIN);
-    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), dto.getId(), group.getId(), UserRole.CODEVIEWER);
+    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), dto.getUuid(), user.getId(), UserRole.ADMIN);
+    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), dto.getUuid(), group.getId(), UserRole.CODEVIEWER);
     db.commit();
     return dto;
   }
index 64fd101cd82ff5d3b0bfba0c2939ac0f7919b551..ebf04fa91aa8a4855ef0c309dac5cd57458b4266 100644 (file)
@@ -197,13 +197,13 @@ public class RemoveGroupFromTemplateActionTest extends BasePermissionWsTest<Remo
   }
 
   private void addGroupToTemplate(PermissionTemplateDto template, @Nullable Integer groupId, String permission) {
-    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), template.getId(), groupId, permission);
+    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), template.getUuid(), groupId, permission);
     db.commit();
   }
 
   private List<String> getGroupNamesInTemplateAndPermission(PermissionTemplateDto template, String permission) {
     PermissionQuery permissionQuery = PermissionQuery.builder().setOrganizationUuid(template.getOrganizationUuid()).setPermission(permission).build();
     return db.getDbClient().permissionTemplateDao()
-      .selectGroupNamesByQueryAndTemplate(db.getSession(), permissionQuery, template.getId());
+      .selectGroupNamesByQueryAndTemplate(db.getSession(), permissionQuery, template.getUuid());
   }
 }
index e031b1038735e4097f88cb518a8a8922161da04d..7f43f5388aa667e916a0e45bafe6479329a5fa9c 100644 (file)
@@ -36,8 +36,8 @@ import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.exceptions.UnauthorizedException;
 import org.sonar.server.permission.PermissionService;
 import org.sonar.server.permission.PermissionServiceImpl;
-import org.sonar.server.permission.ws.BasePermissionWsTest;
 import org.sonar.server.permission.RequestValidator;
+import org.sonar.server.permission.ws.BasePermissionWsTest;
 import org.sonar.server.permission.ws.WsParameters;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -73,7 +73,7 @@ public class RemoveProjectCreatorFromTemplateActionTest extends BasePermissionWs
     PermissionTemplateCharacteristicDto characteristic = db.getDbClient().permissionTemplateCharacteristicDao().insert(db.getSession(),
       new PermissionTemplateCharacteristicDto()
         .setUuid(Uuids.createFast())
-        .setTemplateId(template.getId())
+        .setTemplateUuid(template.getUuid())
         .setPermission(UserRole.USER)
         .setWithProjectCreator(false)
         .setCreatedAt(1_000_000_000L)
@@ -148,19 +148,19 @@ public class RemoveProjectCreatorFromTemplateActionTest extends BasePermissionWs
 
   private void assertWithoutProjectCreatorFor(String permission) {
     Optional<PermissionTemplateCharacteristicDto> templatePermission = db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(),
-      permission, template.getId());
+      permission, template.getUuid());
     assertThat(templatePermission).isPresent();
     assertThat(templatePermission.get().getWithProjectCreator()).isFalse();
   }
 
   private void assertNoTemplatePermissionFor(String permission) {
     Optional<PermissionTemplateCharacteristicDto> templatePermission = db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(),
-      permission, template.getId());
+      permission, template.getUuid());
     assertThat(templatePermission).isNotPresent();
   }
 
   private PermissionTemplateCharacteristicDto reload(PermissionTemplateCharacteristicDto characteristic) {
-    return db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(), characteristic.getPermission(), characteristic.getTemplateId())
+    return db.getDbClient().permissionTemplateCharacteristicDao().selectByPermissionAndTemplateId(db.getSession(), characteristic.getPermission(), characteristic.getTemplateUuid())
       .get();
   }
 }
index 0538dacbdc8dc4710a0f446bbadb5edc8108683d..a786d29b91e634b10711fe5f3bd14b42fd6d7588 100644 (file)
@@ -36,8 +36,8 @@ import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.exceptions.UnauthorizedException;
 import org.sonar.server.permission.PermissionService;
 import org.sonar.server.permission.PermissionServiceImpl;
-import org.sonar.server.permission.ws.BasePermissionWsTest;
 import org.sonar.server.permission.RequestValidator;
+import org.sonar.server.permission.ws.BasePermissionWsTest;
 import org.sonar.server.permission.ws.WsParameters;
 import org.sonar.server.ws.TestRequest;
 
@@ -217,11 +217,11 @@ public class RemoveUserFromTemplateActionTest extends BasePermissionWsTest<Remov
   private List<String> getLoginsInTemplateAndPermission(PermissionTemplateDto template, String permission) {
     PermissionQuery permissionQuery = PermissionQuery.builder().setOrganizationUuid(template.getOrganizationUuid()).setPermission(permission).build();
     return db.getDbClient().permissionTemplateDao()
-      .selectUserLoginsByQueryAndTemplate(db.getSession(), permissionQuery, template.getId());
+      .selectUserLoginsByQueryAndTemplate(db.getSession(), permissionQuery, template.getUuid());
   }
 
   private void addUserToTemplate(UserDto user, PermissionTemplateDto template, String permission) {
-    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), template.getId(), user.getId(), permission);
+    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), template.getUuid(), user.getId(), permission);
     db.commit();
   }
 
index 46c3e40d1c167e900f9da89b8725c571dd8fe7b7..c6d5598b089947c233f70ac3c49ab09ef0016199 100644 (file)
@@ -74,7 +74,8 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
   @Before
   public void setUp() {
     DefaultTemplatesResolver defaultTemplatesResolverWithViews = new DefaultTemplatesResolverImpl(resourceTypesWithoutViews);
-    underTestWithoutViews = new WsActionTester(new SearchTemplatesAction(dbClient, userSession, i18n, newPermissionWsSupport(), defaultTemplatesResolverWithViews, permissionServiceWithoutViews));
+    underTestWithoutViews = new WsActionTester(
+      new SearchTemplatesAction(dbClient, userSession, i18n, newPermissionWsSupport(), defaultTemplatesResolverWithViews, permissionServiceWithoutViews));
     i18n.setProjectPermissions();
     userSession.logIn().addPermission(ADMINISTER, db.getDefaultOrganization());
   }
@@ -92,12 +93,12 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
     GroupDto group2 = db.users().insertGroup(organization);
     GroupDto group3 = db.users().insertGroup(organization);
 
-    addUserToTemplate(projectTemplate.getId(), user1.getId(), UserRole.ISSUE_ADMIN);
-    addUserToTemplate(projectTemplate.getId(), user2.getId(), UserRole.ISSUE_ADMIN);
-    addUserToTemplate(projectTemplate.getId(), user3.getId(), UserRole.ISSUE_ADMIN);
-    addUserToTemplate(projectTemplate.getId(), user1.getId(), UserRole.CODEVIEWER);
-    addGroupToTemplate(projectTemplate.getId(), group1.getId(), UserRole.ADMIN);
-    addPermissionTemplateWithProjectCreator(projectTemplate.getId(), UserRole.ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user1.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user2.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user3.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user1.getId(), UserRole.CODEVIEWER);
+    addGroupToTemplate(projectTemplate.getUuid(), group1.getId(), UserRole.ADMIN);
+    addPermissionTemplateWithProjectCreator(projectTemplate.getUuid(), UserRole.ADMIN);
 
     db.organizations().setDefaultTemplates(projectTemplate, null, null);
 
@@ -123,18 +124,18 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
     GroupDto group2 = db.users().insertGroup(organization);
     GroupDto group3 = db.users().insertGroup(organization);
 
-    addUserToTemplate(projectTemplate.getId(), user1.getId(), UserRole.ISSUE_ADMIN);
-    addUserToTemplate(projectTemplate.getId(), user2.getId(), UserRole.ISSUE_ADMIN);
-    addUserToTemplate(projectTemplate.getId(), user3.getId(), UserRole.ISSUE_ADMIN);
-    addUserToTemplate(projectTemplate.getId(), user1.getId(), UserRole.CODEVIEWER);
-    addGroupToTemplate(projectTemplate.getId(), group1.getId(), UserRole.ADMIN);
-    addPermissionTemplateWithProjectCreator(projectTemplate.getId(), UserRole.ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user1.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user2.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user3.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(projectTemplate.getUuid(), user1.getId(), UserRole.CODEVIEWER);
+    addGroupToTemplate(projectTemplate.getUuid(), group1.getId(), UserRole.ADMIN);
+    addPermissionTemplateWithProjectCreator(projectTemplate.getUuid(), UserRole.ADMIN);
 
-    addUserToTemplate(portfoliosTemplate.getId(), user1.getId(), UserRole.USER);
-    addUserToTemplate(portfoliosTemplate.getId(), user2.getId(), UserRole.USER);
-    addGroupToTemplate(portfoliosTemplate.getId(), group1.getId(), UserRole.ISSUE_ADMIN);
-    addGroupToTemplate(portfoliosTemplate.getId(), group2.getId(), UserRole.ISSUE_ADMIN);
-    addGroupToTemplate(portfoliosTemplate.getId(), group3.getId(), UserRole.ISSUE_ADMIN);
+    addUserToTemplate(portfoliosTemplate.getUuid(), user1.getId(), UserRole.USER);
+    addUserToTemplate(portfoliosTemplate.getUuid(), user2.getId(), UserRole.USER);
+    addGroupToTemplate(portfoliosTemplate.getUuid(), group1.getId(), UserRole.ISSUE_ADMIN);
+    addGroupToTemplate(portfoliosTemplate.getUuid(), group2.getId(), UserRole.ISSUE_ADMIN);
+    addGroupToTemplate(portfoliosTemplate.getUuid(), group3.getId(), UserRole.ISSUE_ADMIN);
 
     db.organizations().setDefaultTemplates(projectTemplate, applicationsTemplate, portfoliosTemplate);
 
@@ -213,7 +214,7 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
     PermissionTemplateDto projectDefaultTemplate = db.permissionTemplates().insertTemplate(org);
     db.organizations().setDefaultTemplates(projectDefaultTemplate, null, null);
     PermissionTemplateDto templateInOrg = insertProjectTemplate(org);
-    insertProjectTemplate(db.getDefaultOrganization());
+    insertProjectTemplate("uuid-1", db.getDefaultOrganization());
     db.commit();
     userSession.addPermission(ADMINISTER, org);
 
@@ -266,7 +267,8 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
           "    {" +
           "      \"key\": \"securityhotspotadmin\"," +
           "      \"name\": \"Administer Security Hotspots\"," +
-          "      \"description\": \"Detect a Vulnerability from a \\\"Security Hotspot\\\". Reject, clear, accept, reopen a \\\"Security Hotspot\\\" (users also need \\\"Browse\\\" permissions).\"" +
+          "      \"description\": \"Detect a Vulnerability from a \\\"Security Hotspot\\\". Reject, clear, accept, reopen a \\\"Security Hotspot\\\" (users also need \\\"Browse\\\" permissions).\""
+          +
           "    }," +
           "    {" +
           "      \"key\": \"scan\"," +
@@ -281,7 +283,7 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
           "    }" +
           "  ]" +
           "}");
-   }
+  }
 
   @Test
   public void display_all_project_permissions_with_views() {
@@ -314,7 +316,8 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
           "    {" +
           "      \"key\": \"securityhotspotadmin\"," +
           "      \"name\": \"Administer Security Hotspots\"," +
-          "      \"description\": \"Detect a Vulnerability from a \\\"Security Hotspot\\\". Reject, clear, accept, reopen a \\\"Security Hotspot\\\" (users also need \\\"Browse\\\" permissions).\"" +
+          "      \"description\": \"Detect a Vulnerability from a \\\"Security Hotspot\\\". Reject, clear, accept, reopen a \\\"Security Hotspot\\\" (users also need \\\"Browse\\\" permissions).\""
+          +
           "    }," +
           "    {" +
           "      \"key\": \"scan\"," +
@@ -332,9 +335,13 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
   }
 
   private PermissionTemplateDto insertProjectTemplate(OrganizationDto org) {
+    return insertProjectTemplate(UUID_EXAMPLE_01, org);
+  }
+
+  private PermissionTemplateDto insertProjectTemplate(String uuid, OrganizationDto org) {
     return insertTemplate(newPermissionTemplateDto()
       .setOrganizationUuid(org.getUuid())
-      .setUuid(UUID_EXAMPLE_01)
+      .setUuid(uuid)
       .setName("Default template for Projects")
       .setDescription("Template for new projects")
       .setKeyPattern(null)
@@ -370,21 +377,21 @@ public class SearchTemplatesActionTest extends BasePermissionWsTest<SearchTempla
     return insert;
   }
 
-  private void addGroupToTemplate(long templateId, @Nullable Integer groupId, String permission) {
-    dbClient.permissionTemplateDao().insertGroupPermission(db.getSession(), templateId, groupId, permission);
+  private void addGroupToTemplate(String templateUuid, @Nullable Integer groupId, String permission) {
+    dbClient.permissionTemplateDao().insertGroupPermission(db.getSession(), templateUuid, groupId, permission);
     db.getSession().commit();
   }
 
-  private void addUserToTemplate(long templateId, int userId, String permission) {
-    dbClient.permissionTemplateDao().insertUserPermission(db.getSession(), templateId, userId, permission);
+  private void addUserToTemplate(String templateUuid, int userId, String permission) {
+    dbClient.permissionTemplateDao().insertUserPermission(db.getSession(), templateUuid, userId, permission);
     db.getSession().commit();
   }
 
-  private void addPermissionTemplateWithProjectCreator(long templateId, String permission) {
+  private void addPermissionTemplateWithProjectCreator(String templateUuid, String permission) {
     dbClient.permissionTemplateCharacteristicDao().insert(dbSession, new PermissionTemplateCharacteristicDto()
       .setUuid(Uuids.createFast())
       .setWithProjectCreator(true)
-      .setTemplateId(templateId)
+      .setTemplateUuid(templateUuid)
       .setPermission(permission)
       .setCreatedAt(1_000_000_000L)
       .setUpdatedAt(2_000_000_000L));
index 9d8fc32e5a55bf62b68f6323e2987830d3e78854..64b5e0064b2a8e848e0c4992dd3f69e3757533d9 100644 (file)
@@ -35,9 +35,9 @@ public class SearchTemplatesDataTest {
   SearchTemplatesData.Builder underTest = SearchTemplatesData.builder()
     .defaultTemplates(new DefaultTemplatesResolverImpl.ResolvedDefaultTemplates("template_uuid", null, null))
     .templates(singletonList(newPermissionTemplateDto()))
-    .userCountByTemplateIdAndPermission(HashBasedTable.create())
-    .groupCountByTemplateIdAndPermission(HashBasedTable.create())
-    .withProjectCreatorByTemplateIdAndPermission(HashBasedTable.create());
+    .userCountByTemplateUuidAndPermission(HashBasedTable.create())
+    .groupCountByTemplateUuidAndPermission(HashBasedTable.create())
+    .withProjectCreatorByTemplateUuidAndPermission(HashBasedTable.create());
 
   @Test
   public void fail_if_templates_is_null() {
@@ -58,7 +58,7 @@ public class SearchTemplatesDataTest {
   @Test
   public void fail_if_user_count_is_null() {
     expectedException.expect(IllegalStateException.class);
-    underTest.userCountByTemplateIdAndPermission(null);
+    underTest.userCountByTemplateUuidAndPermission(null);
 
     underTest.build();
   }
@@ -66,7 +66,7 @@ public class SearchTemplatesDataTest {
   @Test
   public void fail_if_group_count_is_null() {
     expectedException.expect(IllegalStateException.class);
-    underTest.groupCountByTemplateIdAndPermission(null);
+    underTest.groupCountByTemplateUuidAndPermission(null);
 
     underTest.build();
   }
@@ -74,7 +74,7 @@ public class SearchTemplatesDataTest {
   @Test
   public void fail_if_with_project_creators_is_null() {
     expectedException.expect(IllegalStateException.class);
-    underTest.withProjectCreatorByTemplateIdAndPermission(null);
+    underTest.withProjectCreatorByTemplateUuidAndPermission(null);
 
     underTest.build();
   }
index 4cbf3b0cba2c9fb96ef44da5b70253a80de79920..9f1265c5a40c0935c108964763fcb452d45dadaf 100644 (file)
@@ -89,11 +89,11 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     GroupDto userGroup = insertGroupOnDefaultOrganization("sonar-users", "Any new users created will automatically join this group");
 
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
-    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getId(), adminGroup.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getId(), userGroup.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getUuid(), adminGroup.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getUuid(), userGroup.getId()));
     // Anyone group
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), null));
-    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getId(), null));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), null));
+    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getUuid(), null));
     loginAsAdmin(db.getDefaultOrganization());
 
     String response = newRequest()
@@ -114,8 +114,8 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
 
     String groupName = "group-name";
     GroupDto group1 = db.users().insertGroup(db.getDefaultOrganization(), groupName);
-    addGroupToTemplate(newPermissionTemplateGroup(CODEVIEWER, template.getId(), group1.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getId(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(CODEVIEWER, template.getUuid(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getUuid(), group1.getId()));
 
     OrganizationDto otherOrganization = db.organizations().insert();
     db.users().insertGroup(otherOrganization, groupName);
@@ -134,23 +134,23 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
 
     GroupDto group1 = db.users().insertGroup(db.getDefaultOrganization(), "group-1-name");
-    addGroupToTemplate(newPermissionTemplateGroup(CODEVIEWER, template.getId(), group1.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getId(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(CODEVIEWER, template.getUuid(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getUuid(), group1.getId()));
 
     GroupDto group2 = db.users().insertGroup(db.getDefaultOrganization(), "group-2-name");
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group2.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getId(), group2.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group2.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getUuid(), group2.getId()));
 
     GroupDto group3 = db.users().insertGroup(db.getDefaultOrganization(), "group-3-name");
 
     // Anyone
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), null));
-    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getId(), null));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), null));
+    addGroupToTemplate(newPermissionTemplateGroup(ISSUE_ADMIN, template.getUuid(), null));
 
     PermissionTemplateDto anotherTemplate = addTemplateToDefaultOrganization();
     GroupDto group4 = db.users().insertGroup(db.getDefaultOrganization(), "group-4-name");
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, anotherTemplate.getId(), group3.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, anotherTemplate.getId(), group4.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, anotherTemplate.getUuid(), group3.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, anotherTemplate.getUuid(), group4.getId()));
     loginAsAdmin(db.getDefaultOrganization());
 
     WsGroupsResponse response = newRequest()
@@ -169,19 +169,19 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
 
     GroupDto group1 = db.users().insertGroup(db.getDefaultOrganization(), "group-1-name");
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group1.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(CODEVIEWER, template.getId(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(CODEVIEWER, template.getUuid(), group1.getId()));
 
     GroupDto group2 = db.users().insertGroup(db.getDefaultOrganization(), "group-2-name");
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getId(), group2.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getUuid(), group2.getId()));
 
     GroupDto group3 = db.users().insertGroup(db.getDefaultOrganization(), "group-3-name");
 
     // Anyone
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), null));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), null));
 
     PermissionTemplateDto anotherTemplate = addTemplateToDefaultOrganization();
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, anotherTemplate.getId(), group3.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, anotherTemplate.getUuid(), group3.getId()));
     loginAsAdmin(db.getDefaultOrganization());
 
     WsGroupsResponse response = newRequest()
@@ -202,12 +202,12 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     GroupDto group3 = db.users().insertGroup(defaultOrg, "group-3-name");
 
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group1.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getId(), group2.getId()));
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), null));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(ADMIN, template.getUuid(), group2.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), null));
 
     PermissionTemplateDto anotherTemplate = addTemplateToDefaultOrganization();
-    addGroupToTemplate(newPermissionTemplateGroup(USER, anotherTemplate.getId(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, anotherTemplate.getUuid(), group1.getId()));
     loginAsAdmin(db.getDefaultOrganization());
 
     WsGroupsResponse response = newRequest()
@@ -222,9 +222,9 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     OrganizationDto defaultOrg = db.getDefaultOrganization();
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
     GroupDto group1 = db.users().insertGroup(defaultOrg, "group-1-name");
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group1.getId()));
     GroupDto group2 = db.users().insertGroup(defaultOrg, "group-2-name");
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group2.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group2.getId()));
     loginAsAdmin(db.getDefaultOrganization());
 
     WsGroupsResponse response = newRequest()
@@ -242,7 +242,7 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     OrganizationDto defaultOrg = db.getDefaultOrganization();
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
     GroupDto group1 = db.users().insertGroup(defaultOrg, "group-1-name");
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group1.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group1.getId()));
     GroupDto group2 = db.users().insertGroup(defaultOrg, "group-2-name");
     GroupDto group3 = db.users().insertGroup(defaultOrg, "group-3");
     loginAsAdmin(db.getDefaultOrganization());
@@ -279,7 +279,7 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
   public void search_with_text_query_return_anyone_group_even_when_no_permission_set() {
     PermissionTemplateDto template = addTemplateToDefaultOrganization();
     GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "group");
-    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getId(), group.getId()));
+    addGroupToTemplate(newPermissionTemplateGroup(USER, template.getUuid(), group.getId()));
     loginAsAdmin(db.getDefaultOrganization());
 
     WsGroupsResponse response = newRequest()
@@ -399,10 +399,10 @@ public class TemplateGroupsActionTest extends BasePermissionWsTest<TemplateGroup
     db.commit();
   }
 
-  private static PermissionTemplateGroupDto newPermissionTemplateGroup(String permission, long templateId, @Nullable Integer groupId) {
+  private static PermissionTemplateGroupDto newPermissionTemplateGroup(String permission, String templateUuid, @Nullable Integer groupId) {
     return newPermissionTemplateGroupDto()
       .setPermission(permission)
-      .setTemplateId(templateId)
+      .setTemplateUuid(templateUuid)
       .setGroupId(groupId);
   }
 
index 9fd041db537804d59736f97d2ae41d45aa231f33..7b6e505908dd426e7ca82cb0ce4c8a0f84de97a7 100644 (file)
@@ -313,14 +313,14 @@ public class TemplateUsersActionTest extends BasePermissionWsTest<TemplateUsersA
   }
 
   private void addUserToTemplate(PermissionTemplateUserDto dto) {
-    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), dto.getTemplateId(), dto.getUserId(), dto.getPermission());
+    db.getDbClient().permissionTemplateDao().insertUserPermission(db.getSession(), dto.getTemplateUuid(), dto.getUserId(), dto.getPermission());
     db.commit();
   }
 
   private static PermissionTemplateUserDto newPermissionTemplateUser(String permission, PermissionTemplateDto template, UserDto user) {
     return newPermissionTemplateUserDto()
       .setPermission(permission)
-      .setTemplateId(template.getId())
+      .setTemplateUuid(template.getUuid())
       .setUserId(user.getId());
   }
 
index d86d6bea0b31058954308678dbc594cb374d2855..da7042356d4d759b8968b57c576a07146ebabc65 100644 (file)
@@ -173,13 +173,14 @@ public class DeactivateActionTest {
     UserDto user = db.users().insertUser();
     PermissionTemplateDto template = db.permissionTemplates().insertTemplate();
     PermissionTemplateDto anotherTemplate = db.permissionTemplates().insertTemplate();
-    db.permissionTemplates().addUserToTemplate(template.getId(), user.getId(), USER);
-    db.permissionTemplates().addUserToTemplate(anotherTemplate.getId(), user.getId(), CODEVIEWER);
+    db.permissionTemplates().addUserToTemplate(template.getUuid(), user.getId(), USER);
+    db.permissionTemplates().addUserToTemplate(anotherTemplate.getUuid(), user.getId(), CODEVIEWER);
 
     deactivate(user.getLogin());
 
-    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getId())).extracting(PermissionTemplateUserDto::getUserId).isEmpty();
-    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, anotherTemplate.getId())).extracting(PermissionTemplateUserDto::getUserId)
+    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getUuid())).extracting(PermissionTemplateUserDto::getUserId)
+      .isEmpty();
+    assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, anotherTemplate.getUuid())).extracting(PermissionTemplateUserDto::getUserId)
       .isEmpty();
   }
 
index 868e29e6bdd326c10a73611b3362e4392ab754ff..22f33ff4ade20ba9505c7cc0387c4ce700c3debd 100644 (file)
@@ -173,7 +173,7 @@ public class DeleteActionTest {
     insertDefaultGroupOnDefaultOrganization();
     GroupDto group = db.users().insertGroup();
     PermissionTemplateDto template = db.getDbClient().permissionTemplateDao().insert(db.getSession(), PermissionTemplateTesting.newPermissionTemplateDto());
-    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), template.getId(), group.getId(), "perm");
+    db.getDbClient().permissionTemplateDao().insertGroupPermission(db.getSession(), template.getUuid(), group.getId(), "perm");
     db.commit();
     loginAsAdminOnDefaultOrganization();
     assertThat(db.countRowsOfTable("perm_templates_groups")).isEqualTo(1);