From 8278254af1aa48b99348156ca7cab139ff8b783b Mon Sep 17 00:00:00 2001 From: Belen Pruvost Date: Mon, 16 Aug 2021 16:55:23 +0200 Subject: [PATCH] SONAR-15142 - Add component qualifier to new value in Logs --- .../ProjectConfigurationFactoryTest.java | 5 +- .../ConfigurationRepositoryTest.java | 2 +- .../sonar/ce/db/ReadOnlyPropertiesDao.java | 6 +- .../ComputeEngineContainerImplTest.java | 2 +- .../ce/db/ReadOnlyPropertiesDaoTest.java | 6 +- .../db/audit/model/ComponentKeyNewValue.java | 2 +- .../db/audit/model/ComponentNewValue.java | 44 +++------ .../model/DevOpsPlatformSettingNewValue.java | 2 +- .../sonar/db/audit/model/LicenseNewValue.java | 2 +- .../org/sonar/db/audit/model/NewValue.java | 30 +++++- .../db/audit/model/PermissionNewValue.java | 49 ++++++---- .../model/PermissionTemplateNewValue.java | 2 +- .../model/PersonalAccessTokenNewValue.java | 2 +- .../sonar/db/audit/model/PluginNewValue.java | 2 +- .../sonar/db/audit/model/ProjectNewValue.java | 12 +-- .../db/audit/model/PropertyNewValue.java | 41 +++++--- .../db/audit/model/UserGroupNewValue.java | 2 +- .../sonar/db/audit/model/UserNewValue.java | 2 +- .../db/audit/model/UserTokenNewValue.java | 2 +- .../sonar/db/audit/model/WebhookNewValue.java | 2 +- .../db/permission/GroupPermissionDao.java | 47 ++++++---- .../db/permission/UserPermissionDao.java | 33 ++++--- .../org/sonar/db/property/PropertiesDao.java | 22 +++-- .../db/audit/model/ComponentNewValueTest.java | 46 +++++---- .../db/permission/GroupPermissionDaoTest.java | 37 ++++---- .../GroupPermissionDaoWithPersisterTest.java | 69 ++++++++------ .../db/permission/UserPermissionDaoTest.java | 17 ++-- .../UserPermissionDaoWithPersisterTest.java | 75 +++++++++++---- .../sonar/db/property/PropertiesDaoTest.java | 27 +++--- .../PropertiesDaoWithPersisterTest.java | 94 +++++++++++++------ .../java/org/sonar/db/purge/PurgeDaoTest.java | 4 +- .../sonar/db/purge/PurgeDaoWithAuditTest.java | 5 +- .../sonar/db/favorite/FavoriteDbTester.java | 2 +- .../sonar/db/property/PropertyDbTester.java | 19 ++-- .../java/org/sonar/db/user/UserDbTester.java | 10 +- .../server/favorite/FavoriteUpdater.java | 4 +- .../platform/StartupMetadataProviderTest.java | 2 +- .../server/plugins/PluginConsentVerifier.java | 2 +- .../project/ProjectDefaultVisibility.java | 2 +- .../server/user/UserUpdaterUpdateTest.java | 6 +- .../server/platform/PersistentSettings.java | 2 +- .../platform/serverid/ServerIdManager.java | 3 +- .../serverid/ServerIdManagerTest.java | 2 +- .../index/PermissionIndexerDaoTest.java | 2 +- .../notification/ws/NotificationUpdater.java | 6 +- .../permission/GroupPermissionChanger.java | 2 +- .../permission/PermissionTemplateService.java | 6 +- .../permission/UserPermissionChanger.java | 7 +- .../project/ws/UpdateVisibilityAction.java | 8 +- .../sonar/server/setting/ws/SetAction.java | 8 +- .../server/setting/ws/SettingsUpdater.java | 3 +- .../ws/SearchProjectsActionTest.java | 8 +- .../server/issue/ws/SearchActionTest.java | 2 +- .../GroupPermissionChangerTest.java | 2 +- .../permission/ws/RemoveGroupActionTest.java | 2 +- .../ws/UpdateVisibilityActionTest.java | 4 +- .../server/setting/ws/ResetActionTest.java | 26 ++--- .../server/setting/ws/SetActionTest.java | 18 ++-- .../setting/ws/SettingsUpdaterTest.java | 24 ++--- .../server/setting/ws/ValuesActionTest.java | 90 +++++++++--------- .../server/ui/ws/ComponentActionTest.java | 6 +- .../server/user/ws/DeactivateActionTest.java | 12 +-- 62 files changed, 566 insertions(+), 417 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/ProjectConfigurationFactoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/ProjectConfigurationFactoryTest.java index 91821b0ac8e..ae139fc0b77 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/ProjectConfigurationFactoryTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/ProjectConfigurationFactoryTest.java @@ -52,7 +52,7 @@ public class ProjectConfigurationFactoryTest { @Test public void return_project_settings() { ComponentDto project = db.components().insertPrivateProject(); - db.properties().insertProperties(null, project.name(), + db.properties().insertProperties(null, project.name(), project.qualifier(), newComponentPropertyDto(project).setKey("1").setValue("val1"), newComponentPropertyDto(project).setKey("2").setValue("val2"), newComponentPropertyDto(project).setKey("3").setValue("val3")); @@ -68,7 +68,8 @@ public class ProjectConfigurationFactoryTest { public void project_settings_override_global_settings() { settings.setProperty("key", "value"); ComponentDto project = db.components().insertPrivateProject(); - db.properties().insertProperties(null, project.name(), newComponentPropertyDto(project).setKey("key").setValue("value2")); + db.properties().insertProperties(null, project.name(), project.qualifier(), + newComponentPropertyDto(project).setKey("key").setValue("value2")); Configuration projectConfig = underTest.newProjectConfiguration(project.getDbKey(), new DefaultBranchImpl()); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java index e22196d73bc..488507409e3 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java @@ -139,7 +139,7 @@ public class ConfigurationRepositoryTest { } private void insertProjectProperty(ComponentDto project, String propertyKey, String propertyValue) { - db.properties().insertProperties(null, project.name(), + db.properties().insertProperties(null, project.name(), project.qualifier(), new PropertyDto().setKey(propertyKey).setValue(propertyValue).setComponentUuid(project.uuid())); } } diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/db/ReadOnlyPropertiesDao.java b/server/sonar-ce/src/main/java/org/sonar/ce/db/ReadOnlyPropertiesDao.java index af6175bd1bf..f7eca8e91b9 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/db/ReadOnlyPropertiesDao.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/db/ReadOnlyPropertiesDao.java @@ -44,7 +44,7 @@ public class ReadOnlyPropertiesDao extends PropertiesDao { @Override public void saveProperty(DbSession session, PropertyDto property, @Nullable String userLogin, - @Nullable String projectName) { + @Nullable String projectName, @Nullable String qualifier) { // do nothing } @@ -54,12 +54,12 @@ public class ReadOnlyPropertiesDao extends PropertiesDao { } @Override - public void deleteProjectProperty(String key, String projectUuid, String projectName) { + public void deleteProjectProperty(String key, String projectUuid, String projectName, String qualifier) { // do nothing } @Override - public void deleteProjectProperty(String key, String projectUuid, DbSession session, String projectName) { + public void deleteProjectProperty(DbSession session, String key, String projectUuid, String projectName, String qualifier) { // do nothing } diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java index 5d4170ff6d4..50fe9c75f8f 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java @@ -144,7 +144,7 @@ public class ComputeEngineContainerImplTest { private void insertProperty(String key, String value) { PropertyDto dto = new PropertyDto().setKey(key).setValue(value); - db.getDbClient().propertiesDao().saveProperty(db.getSession(), dto, null, null); + db.getDbClient().propertiesDao().saveProperty(db.getSession(), dto, null, null, null); db.commit(); } diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/db/ReadOnlyPropertiesDaoTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/db/ReadOnlyPropertiesDaoTest.java index ae6cea38f6c..83894a129bc 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/db/ReadOnlyPropertiesDaoTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/db/ReadOnlyPropertiesDaoTest.java @@ -40,7 +40,7 @@ public class ReadOnlyPropertiesDaoTest { @Test public void insertProperty() { - underTest.saveProperty(dbSession, propertyDto, null, null); + underTest.saveProperty(dbSession, propertyDto, null, null, null); assertNoInteraction(); } @@ -54,7 +54,7 @@ public class ReadOnlyPropertiesDaoTest { @Test public void deleteProjectProperty() { - underTest.deleteProjectProperty(null, null, null); + underTest.deleteProjectProperty(null, null, null, null); assertNoInteraction(); @@ -62,7 +62,7 @@ public class ReadOnlyPropertiesDaoTest { @Test public void deleteProjectProperty1() { - underTest.deleteProjectProperty(null, null, dbSession, null); + underTest.deleteProjectProperty(dbSession, null, null, null, null); assertNoInteraction(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentKeyNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentKeyNewValue.java index 84a485ffc47..500771ddef8 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentKeyNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentKeyNewValue.java @@ -19,7 +19,7 @@ */ package org.sonar.db.audit.model; -public class ComponentKeyNewValue implements NewValue{ +public class ComponentKeyNewValue extends NewValue{ private final String componentUuid; private final String oldKey; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentNewValue.java index 4de0e110055..d45bd7f7d7f 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ComponentNewValue.java @@ -23,11 +23,7 @@ import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.apache.commons.lang.ObjectUtils; -import static org.sonar.api.resources.Qualifiers.APP; -import static org.sonar.api.resources.Qualifiers.PROJECT; -import static org.sonar.api.resources.Qualifiers.VIEW; - -public class ComponentNewValue implements NewValue { +public class ComponentNewValue extends NewValue { private String componentUuid; private String componentName; @@ -38,26 +34,26 @@ public class ComponentNewValue implements NewValue { private String key; private Boolean isPrivate; private Boolean isEnabled; - private String prefix; + private String qualifier; public ComponentNewValue(String componentUuid, String name, String key, @Nullable String qualifier) { this.componentUuid = componentUuid; this.componentName = name; this.key = key; - this.generateComponentPrefix(qualifier); + this.qualifier = getQualifier(qualifier); } public ComponentNewValue(String rootComponentUuid, boolean isPrivate, @Nullable String qualifier) { this.rootComponentUuid = rootComponentUuid; this.isPrivate = isPrivate; - this.generateComponentPrefix(qualifier); + this.qualifier = getQualifier(qualifier); } public ComponentNewValue(String componentUuid, String name, boolean isPrivate, String qualifier) { this.componentUuid = componentUuid; this.componentName = name; this.isPrivate = isPrivate; - this.generateComponentPrefix(qualifier); + this.qualifier = this.getQualifier(qualifier); } public ComponentNewValue(String uuid, String name, String key, boolean enabled, String path, @Nullable String qualifier) { @@ -66,7 +62,7 @@ public class ComponentNewValue implements NewValue { this.isEnabled = enabled; this.path = path; this.key = key; - this.generateComponentPrefix(qualifier); + this.qualifier = getQualifier(qualifier); } public ComponentNewValue(String uuid, boolean isPrivate, String name, String key, @Nullable String description, @Nullable String qualifier) { @@ -75,7 +71,7 @@ public class ComponentNewValue implements NewValue { this.componentName = name; this.key = key; this.description = description; - this.generateComponentPrefix(qualifier); + this.qualifier = getQualifier(qualifier); } public String getComponentUuid() { @@ -99,33 +95,17 @@ public class ComponentNewValue implements NewValue { return isPrivate; } - private void generateComponentPrefix(String qualifier) { - if (qualifier == null) { - this.prefix = "component"; - return ; - } - switch (qualifier) { - case VIEW: - this.prefix = "portfolio"; - break; - case APP: - this.prefix = "application"; - break; - case PROJECT: - this.prefix = "project"; - break; - default: - this.prefix = "component"; - break; - } + public String getQualifier() { + return qualifier; } @Override public String toString() { StringBuilder sb = new StringBuilder("{"); - addField(sb, "\"" + this.prefix + "Uuid\": ", this.componentUuid, true); + addField(sb, "\"componentUuid\": ", this.componentUuid, true); addField(sb, "\"rootComponentUuid\": ", this.rootComponentUuid, true); - addField(sb, "\"" + this.prefix + "Name\": ", this.componentName, true); + addField(sb, "\"componentName\": ", this.componentName, true); + addField(sb, "\"qualifier\": ", this.qualifier, true); addField(sb, "\"description\": ", this.description, true); addField(sb, "\"key\": ", this.key, true); addField(sb, "\"path\": ", this.path, true); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/DevOpsPlatformSettingNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/DevOpsPlatformSettingNewValue.java index 71876aa96c0..a9b4dfa1dbc 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/DevOpsPlatformSettingNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/DevOpsPlatformSettingNewValue.java @@ -26,7 +26,7 @@ import org.sonar.db.alm.setting.AlmSettingDto; import org.sonar.db.alm.setting.ProjectAlmSettingDto; import org.sonar.db.project.ProjectDto; -public class DevOpsPlatformSettingNewValue implements NewValue { +public class DevOpsPlatformSettingNewValue extends NewValue { @Nullable private String devOpsPlatformSettingUuid; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/LicenseNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/LicenseNewValue.java index 9445c53ea92..c03b67b8514 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/LicenseNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/LicenseNewValue.java @@ -22,7 +22,7 @@ package org.sonar.db.audit.model; import javax.annotation.CheckForNull; import javax.annotation.Nullable; -public class LicenseNewValue implements NewValue { +public class LicenseNewValue extends NewValue { @Nullable private String edition; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/NewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/NewValue.java index 547acb31f7d..eaf854c5b51 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/NewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/NewValue.java @@ -19,11 +19,16 @@ */ package org.sonar.db.audit.model; +import javax.annotation.Nullable; + import static com.google.common.base.Strings.isNullOrEmpty; +import static org.sonar.api.resources.Qualifiers.APP; +import static org.sonar.api.resources.Qualifiers.PROJECT; +import static org.sonar.api.resources.Qualifiers.VIEW; -public interface NewValue { +public abstract class NewValue { - default void addField(StringBuilder sb, String field, String value, boolean isString) { + protected void addField(StringBuilder sb, String field, String value, boolean isString) { if (!isNullOrEmpty(value)) { sb.append(field); addQuote(sb, isString); @@ -33,7 +38,7 @@ public interface NewValue { } } - default void endString(StringBuilder sb) { + protected void endString(StringBuilder sb) { int length = sb.length(); if(sb.length() > 1) { sb.delete(length - 2, length - 1); @@ -46,4 +51,23 @@ public interface NewValue { sb.append("\""); } } + + protected String getQualifier(@Nullable String qualifier) { + if (qualifier == null) { + return null; + } + switch (qualifier) { + case VIEW: + return "portfolio"; + case APP: + return "application"; + case PROJECT: + return "project"; + default: + return null; + } + } + + @Override + public abstract String toString(); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionNewValue.java index 51af099cbd8..e0f8ed1c834 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionNewValue.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import org.sonar.db.permission.GroupPermissionDto; import org.sonar.db.permission.UserPermissionDto; -public class PermissionNewValue implements NewValue { +public class PermissionNewValue extends NewValue { @Nullable private String permissionUuid; @@ -38,39 +38,46 @@ public class PermissionNewValue implements NewValue { private String userUuid; @Nullable - private String projectUuid; + private String componentUuid; @Nullable - private String projectName; + private String componentName; @Nullable private String role; - public PermissionNewValue(GroupPermissionDto groupPermissionDto) { + @Nullable + private String qualifier; + + public PermissionNewValue(GroupPermissionDto groupPermissionDto, @Nullable String componentName, @Nullable String qualifier) { this.permissionUuid = groupPermissionDto.getUuid(); this.role = groupPermissionDto.getRole(); this.groupUuid = groupPermissionDto.getGroupUuid(); this.groupName = groupPermissionDto.getGroupName(); - this.projectUuid = groupPermissionDto.getComponentUuid(); - this.projectName = groupPermissionDto.getComponentName(); + this.componentUuid = groupPermissionDto.getComponentUuid(); + this.role = groupPermissionDto.getRole(); + this.componentName = componentName; + this.qualifier = getQualifier(qualifier); } - public PermissionNewValue(UserPermissionDto permissionDto, @Nullable String projectName) { + public PermissionNewValue(UserPermissionDto permissionDto, @Nullable String componentName, @Nullable String qualifier) { this.permissionUuid = permissionDto.getUuid(); this.userUuid = permissionDto.getUserUuid(); - this.projectUuid = permissionDto.getComponentUuid(); + this.componentUuid = permissionDto.getComponentUuid(); this.role = permissionDto.getPermission(); - this.projectName = projectName; + this.componentName = componentName; + this.qualifier = getQualifier(qualifier); } public PermissionNewValue(@Nullable String role, @Nullable String groupUuid, @Nullable String groupName, @Nullable String rootComponentUuid, - @Nullable String projectName, @Nullable String userUuid) { + @Nullable String componentName, @Nullable String qualifier, @Nullable String userUuid) { this.role = role; this.groupUuid = groupUuid; this.groupName = groupName; - this.projectUuid = rootComponentUuid; - this.projectName = projectName; + this.componentUuid = rootComponentUuid; + this.componentName = componentName; this.userUuid = userUuid; + this.qualifier = getQualifier(qualifier); } @CheckForNull @@ -89,8 +96,8 @@ public class PermissionNewValue implements NewValue { } @CheckForNull - public String getProjectUuid() { - return this.projectUuid; + public String getComponentUuid() { + return this.componentUuid; } @CheckForNull @@ -99,8 +106,13 @@ public class PermissionNewValue implements NewValue { } @CheckForNull - public String getProjectName() { - return this.projectName; + public String getComponentName() { + return this.componentName; + } + + @CheckForNull + public String getQualifier() { + return this.qualifier; } @CheckForNull @@ -115,8 +127,9 @@ public class PermissionNewValue implements NewValue { addField(sb, "\"role\": ", this.role, true); addField(sb, "\"groupUuid\": ", this.groupUuid, true); addField(sb, "\"groupName\": ", this.groupName, true); - addField(sb, "\"projectUuid\": ", this.projectUuid, true); - addField(sb, "\"projectName\": ", this.projectName, true); + addField(sb, "\"componentUuid\": ", this.componentUuid, true); + addField(sb, "\"componentName\": ", this.componentName, true); + addField(sb, "\"qualifier\": ", this.qualifier, true); addField(sb, "\"userUuid\": ", this.userUuid, true); endString(sb); return sb.toString(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionTemplateNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionTemplateNewValue.java index 1ca5679c358..26ff2491b9e 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionTemplateNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PermissionTemplateNewValue.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang.ObjectUtils; import org.sonar.db.permission.template.PermissionTemplateDto; -public class PermissionTemplateNewValue implements NewValue { +public class PermissionTemplateNewValue extends NewValue { private String templateUuid; private String name; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PersonalAccessTokenNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PersonalAccessTokenNewValue.java index 3f46932d8cd..abc31df491a 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PersonalAccessTokenNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PersonalAccessTokenNewValue.java @@ -25,7 +25,7 @@ import org.sonar.db.alm.pat.AlmPatDto; import org.sonar.db.alm.setting.AlmSettingDto; import org.sonar.db.user.UserDto; -public class PersonalAccessTokenNewValue implements NewValue { +public class PersonalAccessTokenNewValue extends NewValue { @Nullable private String patUuid; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PluginNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PluginNewValue.java index 3dfd947e1d8..faff2a7521a 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PluginNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PluginNewValue.java @@ -21,7 +21,7 @@ package org.sonar.db.audit.model; import org.sonar.db.plugin.PluginDto; -public class PluginNewValue implements NewValue { +public class PluginNewValue extends NewValue { private String pluginUuid; private String kee; private String basePluginKey; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ProjectNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ProjectNewValue.java index e10b52dd27e..ffe6c8ab411 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ProjectNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/ProjectNewValue.java @@ -21,23 +21,13 @@ package org.sonar.db.audit.model; import org.apache.commons.lang.ObjectUtils; -public class ProjectNewValue implements NewValue{ +public class ProjectNewValue extends NewValue{ private final String uuid; private String name; private String description; private Boolean isPrivate; - public ProjectNewValue(String uuid, String name) { - this.uuid = uuid; - this.name = name; - } - - public ProjectNewValue(String uuid, boolean isPrivate) { - this.uuid = uuid; - this.isPrivate = isPrivate; - } - public ProjectNewValue(String uuid, boolean isPrivate, String name, String description) { this.uuid = uuid; this.isPrivate = isPrivate; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PropertyNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PropertyNewValue.java index e3f371b7f5e..3169c6ba55c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PropertyNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/PropertyNewValue.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import org.sonar.db.property.PropertyDto; import org.sonar.db.user.UserPropertyDto; -public class PropertyNewValue implements NewValue { +public class PropertyNewValue extends NewValue { @Nullable private String propertyKey; @@ -38,10 +38,13 @@ public class PropertyNewValue implements NewValue { private String userLogin; @Nullable - private String projectUuid; + private String componentUuid; @Nullable - private String projectName; + private String componentName; + + @Nullable + private String qualifier; public PropertyNewValue(UserPropertyDto userPropertyDto, String login) { this.propertyKey = userPropertyDto.getKey(); @@ -51,12 +54,13 @@ public class PropertyNewValue implements NewValue { setValue(propertyKey, userPropertyDto.getValue()); } - public PropertyNewValue(PropertyDto propertyDto, @Nullable String userLogin, @Nullable String projectName) { + public PropertyNewValue(PropertyDto propertyDto, @Nullable String userLogin, @Nullable String componentName, @Nullable String qualifier) { this.propertyKey = propertyDto.getKey(); this.userUuid = propertyDto.getUserUuid(); this.userLogin = userLogin; - this.projectUuid = propertyDto.getComponentUuid(); - this.projectName = projectName; + this.componentUuid = propertyDto.getComponentUuid(); + this.componentName = componentName; + this.qualifier = getQualifier(qualifier); setValue(propertyKey, propertyDto.getValue()); } @@ -78,11 +82,12 @@ public class PropertyNewValue implements NewValue { } public PropertyNewValue(@Nullable String propertyKey, @Nullable String projectUuid, - @Nullable String projectName, @Nullable String userUuid) { + @Nullable String componentName, @Nullable String qualifier, @Nullable String userUuid) { this.propertyKey = propertyKey; - this.projectUuid = projectUuid; - this.projectName = projectName; + this.componentUuid = projectUuid; + this.componentName = componentName; this.userUuid = userUuid; + this.qualifier = getQualifier(qualifier); } @CheckForNull @@ -106,13 +111,18 @@ public class PropertyNewValue implements NewValue { } @CheckForNull - public String getProjectUuid() { - return this.projectUuid; + public String getComponentUuid() { + return this.componentUuid; + } + + @CheckForNull + public String getComponentName() { + return this.componentName; } @CheckForNull - public String getProjectName() { - return this.projectName; + public String getQualifier() { + return this.qualifier; } @Override @@ -122,8 +132,9 @@ public class PropertyNewValue implements NewValue { addField(sb, "\"propertyValue\": ", this.propertyValue, true); addField(sb, "\"userUuid\": ", this.userUuid, true); addField(sb, "\"userLogin\": ", this.userLogin, true); - addField(sb, "\"projectUuid\": ", this.projectUuid, true); - addField(sb, "\"projectName\": ", this.projectName, true); + addField(sb, "\"componentUuid\": ", this.componentUuid, true); + addField(sb, "\"componentName\": ", this.componentName, true); + addField(sb, "\"qualifier\": ", this.qualifier, true); endString(sb); return sb.toString(); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserGroupNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserGroupNewValue.java index 3e2bc548aa6..f908aac657b 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserGroupNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserGroupNewValue.java @@ -25,7 +25,7 @@ import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.db.user.UserGroupDto; -public class UserGroupNewValue implements NewValue { +public class UserGroupNewValue extends NewValue { @Nullable private String groupUuid; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserNewValue.java index 00b41a82462..9f96535f8c7 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserNewValue.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang.ObjectUtils; import org.sonar.db.user.UserDto; -public class UserNewValue implements NewValue { +public class UserNewValue extends NewValue { private String userUuid; private String login; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserTokenNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserTokenNewValue.java index cb5c69ea438..05f39e63e8d 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserTokenNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/UserTokenNewValue.java @@ -25,7 +25,7 @@ import org.apache.commons.lang.ObjectUtils; import org.sonar.db.user.UserDto; import org.sonar.db.user.UserTokenDto; -public class UserTokenNewValue implements NewValue { +public class UserTokenNewValue extends NewValue { @Nullable private String tokenUuid; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/WebhookNewValue.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/WebhookNewValue.java index c5a0c49043d..30cab0b497f 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/WebhookNewValue.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/model/WebhookNewValue.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import org.sonar.db.project.ProjectDto; import org.sonar.db.webhook.WebhookDto; -public class WebhookNewValue implements NewValue { +public class WebhookNewValue extends NewValue { @Nullable private String webhookUuid; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java index 77260c4c31e..9f6aef56f4c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java @@ -52,6 +52,7 @@ public class GroupPermissionDao implements Dao { /** * Returns the names of the groups that match the given query. * The virtual group "Anyone" may be returned as the value {@link DefaultGroups#ANYONE}. + * * @return group names, sorted in alphabetical order */ public List selectGroupNamesByQuery(DbSession dbSession, PermissionQuery query) { @@ -122,22 +123,25 @@ public class GroupPermissionDao implements Dao { return mapper(session).selectGroupUuidsWithPermissionOnProjectBut(projectUuid, permission); } - public void insert(DbSession dbSession, GroupPermissionDto groupPermissionDto) { + public void insert(DbSession dbSession, GroupPermissionDto groupPermissionDto, @Nullable ComponentDto componentDto) { mapper(dbSession).insert(groupPermissionDto); if (auditPersister != null) { - auditPersister.addGroupPermission(dbSession, new PermissionNewValue(groupPermissionDto)); + String componentName = (componentDto != null) ? componentDto.name() : null; + String qualifier = (componentDto != null) ? componentDto.qualifier() : null; + auditPersister.addGroupPermission(dbSession, new PermissionNewValue(groupPermissionDto, componentName, qualifier)); } } /** * Delete all the permissions associated to a root component (project) */ - public void deleteByRootComponentUuid(DbSession dbSession, String rootComponentUuid, String projectName) { - mapper(dbSession).deleteByRootComponentUuid(rootComponentUuid); + public void deleteByRootComponentUuid(DbSession dbSession, ComponentDto component) { + mapper(dbSession).deleteByRootComponentUuid(component.uuid()); if (auditPersister != null) { - auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(null, null, null, rootComponentUuid, projectName, null)); + auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(null, null, null, component.uuid(), component.name(), + component.qualifier(), null)); } } @@ -145,15 +149,22 @@ public class GroupPermissionDao implements Dao { * Delete all permissions of the specified group (group "AnyOne" if {@code groupUuid} is {@code null}) for the specified * component. */ - public int deleteByRootComponentUuidAndGroupUuid(DbSession dbSession, String rootComponentUuid, @Nullable String groupUuid) { - return mapper(dbSession).deleteByRootComponentUuidAndGroupUuid(rootComponentUuid, groupUuid); + public int deleteByRootComponentUuidAndGroupUuid(DbSession dbSession, @Nullable String groupUuid, ComponentDto component) { + int deletedRecords = mapper(dbSession).deleteByRootComponentUuidAndGroupUuid(component.uuid(), groupUuid); + + if (auditPersister != null) { + auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(null, groupUuid, "", component.uuid(), component.name(), + component.qualifier(), null)); + } + return deletedRecords; } - public int deleteByRootComponentUuidForAnyOne(DbSession dbSession, String rootComponentUuid, String projectName) { - int deletedRecords = mapper(dbSession).deleteByRootComponentUuidAndGroupUuid(rootComponentUuid, null); + public int deleteByRootComponentUuidForAnyOne(DbSession dbSession, ComponentDto component) { + int deletedRecords = mapper(dbSession).deleteByRootComponentUuidAndGroupUuid(component.uuid(), null); if (auditPersister != null) { - auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(null, null, null, rootComponentUuid, projectName, null)); + auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(null, null, null, component.uuid(), + component.name(), component.qualifier(), null)); } return deletedRecords; @@ -162,11 +173,12 @@ public class GroupPermissionDao implements Dao { /** * Delete the specified permission for the specified component for any group (including group AnyOne). */ - public int deleteByRootComponentUuidAndPermission(DbSession dbSession, String rootComponentUuid, String permission, String projectName) { - int deletedRecords = mapper(dbSession).deleteByRootComponentUuidAndPermission(rootComponentUuid, permission); + public int deleteByRootComponentUuidAndPermission(DbSession dbSession, String permission, ComponentDto component) { + int deletedRecords = mapper(dbSession).deleteByRootComponentUuidAndPermission(component.uuid(), permission); if (auditPersister != null) { - auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(permission, null, null, rootComponentUuid, projectName, null)); + auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(permission, null, null, component.uuid(), + component.name(), component.qualifier(), null)); } return deletedRecords; @@ -180,9 +192,10 @@ public class GroupPermissionDao implements Dao { *
  • a permission granted to a group for a project
  • *
  • a permission granted to anyone for a project
  • * + * * @param dbSession - * @param permission the kind of permission - * @param groupUuid if null, then anyone, else uuid of group + * @param permission the kind of permission + * @param groupUuid if null, then anyone, else uuid of group * @param rootComponentUuid if null, then global permission, otherwise the uuid of root component (project) */ public void delete(DbSession dbSession, String permission, @@ -192,7 +205,9 @@ public class GroupPermissionDao implements Dao { if (auditPersister != null) { String projectName = (componentDto != null) ? componentDto.name() : null; - auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(permission, groupUuid, groupName, rootComponentUuid, projectName, null)); + String qualifier = (componentDto != null) ? componentDto.qualifier() : null; + auditPersister.deleteGroupPermission(dbSession, new PermissionNewValue(permission, groupUuid, groupName, rootComponentUuid, + projectName, qualifier, null)); } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/UserPermissionDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/UserPermissionDao.java index 47d90d2d5a7..42661794fbf 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/UserPermissionDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/UserPermissionDao.java @@ -117,8 +117,9 @@ public class UserPermissionDao implements Dao { mapper(dbSession).insert(dto); if (auditPersister != null) { - String projectName = (componentDto != null) ? componentDto.name() : null; - auditPersister.addUserPermission(dbSession, new PermissionNewValue(dto, projectName)); + String componentName = (componentDto != null) ? componentDto.name() : null; + String qualifier = (componentDto != null) ? componentDto.qualifier() : null; + auditPersister.addUserPermission(dbSession, new PermissionNewValue(dto, componentName, qualifier)); } } @@ -129,41 +130,44 @@ public class UserPermissionDao implements Dao { mapper(dbSession).deleteGlobalPermission(userUuid, permission); if (auditPersister != null) { - auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(permission, null, null, null, - null, userUuid)); + auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(permission, null, null, + null, null, null, userUuid)); } } /** * Removes a single project permission from user */ - public void deleteProjectPermission(DbSession dbSession, String userUuid, String permission, String projectUuid, @Nullable String projectName) { - mapper(dbSession).deleteProjectPermission(userUuid, permission, projectUuid); + public void deleteProjectPermission(DbSession dbSession, String userUuid, String permission, ComponentDto component) { + mapper(dbSession).deleteProjectPermission(userUuid, permission, component.uuid()); if (auditPersister != null) { - auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(permission, null, null, projectUuid, projectName, userUuid)); + auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(permission, null, null, component.uuid(), + component.name(), component.qualifier(), userUuid)); } } /** * Deletes all the permissions defined on a project */ - public void deleteProjectPermissions(DbSession dbSession, String projectUuid, String projectName) { - mapper(dbSession).deleteProjectPermissions(projectUuid); + public void deleteProjectPermissions(DbSession dbSession, ComponentDto component) { + mapper(dbSession).deleteProjectPermissions(component.uuid()); if (auditPersister != null) { - auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(null, null, null, projectUuid, projectName, null)); + auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(null, null, null, component.uuid(), component.name(), + component.qualifier(), null)); } } /** * Deletes the specified permission on the specified project for any user. */ - public int deleteProjectPermissionOfAnyUser(DbSession dbSession, String projectUuid, String permission, String projectName) { - int deletedRows = mapper(dbSession).deleteProjectPermissionOfAnyUser(projectUuid, permission); + public int deleteProjectPermissionOfAnyUser(DbSession dbSession, String permission, ComponentDto project) { + int deletedRows = mapper(dbSession).deleteProjectPermissionOfAnyUser(project.uuid(), permission); if (auditPersister != null) { - auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(permission, null, null, projectUuid, projectName, null)); + auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(permission, null, null, project.uuid(), project.name(), + project.qualifier(), null)); } return deletedRows; @@ -173,7 +177,8 @@ public class UserPermissionDao implements Dao { mapper(dbSession).deleteByUserUuid(userUuid); if (auditPersister != null) { - auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(null, null, null, null, null, userUuid)); + auditPersister.deleteUserPermission(dbSession, new PermissionNewValue(null, null, null, null, + null, null, userUuid)); } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java index f45ad0a9ad5..29028f2c6fb 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java @@ -210,11 +210,12 @@ public class PropertiesDao implements Dao { * * @throws IllegalArgumentException if {@link PropertyDto#getKey()} is {@code null} or empty */ - public void saveProperty(DbSession session, PropertyDto property, @Nullable String userLogin, @Nullable String projectName) { + public void saveProperty(DbSession session, PropertyDto property, @Nullable String userLogin, @Nullable String projectName, + @Nullable String qualifier) { save(getMapper(session), property.getKey(), property.getUserUuid(), property.getComponentUuid(), property.getValue()); if (auditPersister != null && auditPersister.isTrackedProperty(property.getKey())) { - auditPersister.addProperty(session, new PropertyNewValue(property, userLogin, projectName), false); + auditPersister.addProperty(session, new PropertyNewValue(property, userLogin, projectName, qualifier), false); } } @@ -247,7 +248,7 @@ public class PropertiesDao implements Dao { public void saveProperty(PropertyDto property) { try (DbSession session = mybatis.openSession(false)) { - saveProperty(session, property, null, null); + saveProperty(session, property, null, null, null); session.commit(); } } @@ -264,33 +265,34 @@ public class PropertiesDao implements Dao { if (auditPersister != null && query.key() != null && auditPersister.isTrackedProperty(query.key())) { auditPersister.deleteProperty(dbSession, new PropertyNewValue(query.key(), query.componentUuid(), - null, query.userUuid()), false); + null, null, query.userUuid()), false); } return deletedRows; } - public int delete(DbSession dbSession, PropertyDto dto, @Nullable String userLogin, @Nullable String projectName) { + public int delete(DbSession dbSession, PropertyDto dto, @Nullable String userLogin, @Nullable String projectName, @Nullable String qualifier) { int deletedRows = getMapper(dbSession).delete(dto.getKey(), dto.getUserUuid(), dto.getComponentUuid()); if (auditPersister != null && auditPersister.isTrackedProperty(dto.getKey())) { - auditPersister.deleteProperty(dbSession, new PropertyNewValue(dto, userLogin, projectName), false); + auditPersister.deleteProperty(dbSession, new PropertyNewValue(dto, userLogin, projectName, qualifier), false); } return deletedRows; } - public void deleteProjectProperty(String key, String projectUuid, String projectName) { + public void deleteProjectProperty(String key, String projectUuid, String projectName, String qualifier) { try (DbSession session = mybatis.openSession(false)) { - deleteProjectProperty(key, projectUuid, session, projectName); + deleteProjectProperty(session, key, projectUuid, projectName, qualifier); session.commit(); } } - public void deleteProjectProperty(String key, String projectUuid, DbSession session, String projectName) { + public void deleteProjectProperty(DbSession session, String key, String projectUuid, String projectName, String qualifier) { getMapper(session).deleteProjectProperty(key, projectUuid); if (auditPersister != null && auditPersister.isTrackedProperty(key)) { - auditPersister.deleteProperty(session, new PropertyNewValue(key, projectUuid, projectName, null), false); + auditPersister.deleteProperty(session, new PropertyNewValue(key, projectUuid, projectName, qualifier, + null), false); } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/audit/model/ComponentNewValueTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/audit/model/ComponentNewValueTest.java index 79b82bca00f..f959cc148a2 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/audit/model/ComponentNewValueTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/audit/model/ComponentNewValueTest.java @@ -38,53 +38,65 @@ public class ComponentNewValueTest { } @Test - public void toString_addsPortfolioPrefix() { + public void toString_addsPortfolioQualifier() { ComponentNewValue newValue = new ComponentNewValue("uuid", "name", "key", true, "path", "VW"); - assertThat(newValue.toString()).contains("portfolioUuid"); + assertThat(newValue.toString()) + .contains("componentUuid") + .contains("\"qualifier\": \"portfolio\""); } @Test public void toString_project_uuid_and_name_and_isPrivate() { ComponentNewValue newValue = new ComponentNewValue("uuid", "name", true,"TRK"); - assertThat(newValue.toString()).contains("\"projectUuid\": \"uuid\""); - assertThat(newValue.toString()).contains("\"projectName\": \"name\""); - assertThat(newValue.toString()).contains("\"isPrivate\": true"); + assertThat(newValue.toString()) + .contains("\"componentUuid\": \"uuid\"") + .contains("\"componentName\": \"name\"") + .contains("\"qualifier\": \"project\"") + .contains("\"isPrivate\": true"); } @Test public void toString_project_uuid_and_name_and_key() { ComponentNewValue newValue = new ComponentNewValue("uuid", "name", "key", "TRK"); - assertThat(newValue.toString()).contains("\"projectUuid\": \"uuid\""); - assertThat(newValue.toString()).contains("\"projectName\": \"name\""); - assertThat(newValue.toString()).contains("\"key\": \"key\""); + assertThat(newValue.toString()) + .contains("\"componentUuid\": \"uuid\"") + .contains("\"componentName\": \"name\"") + .contains("\"qualifier\": \"project\"") + .contains("\"key\": \"key\""); } @Test public void toString_project_uuid_and_name_and_key_and_isPrivate_and_description() { ComponentNewValue newValue = new ComponentNewValue("uuid", true, "name", "key", "description", "TRK"); - assertThat(newValue.toString()).contains("\"projectUuid\": \"uuid\""); - assertThat(newValue.toString()).contains("\"projectName\": \"name\""); - assertThat(newValue.toString()).contains("\"isPrivate\": true"); - assertThat(newValue.toString()).contains("\"key\": \"key\""); - assertThat(newValue.toString()).contains("\"description\": \"description\""); + assertThat(newValue.toString()) + .contains("\"componentUuid\": \"uuid\"") + .contains("\"componentName\": \"name\"") + .contains("\"qualifier\": \"project\"") + .contains("\"isPrivate\": true") + .contains("\"key\": \"key\"") + .contains("\"description\": \"description\""); } @Test - public void toString_addsProjectPrefix() { + public void toString_addsProjectQualifier() { ComponentNewValue newValue = new ComponentNewValue("uuid", "name", "key", true, "path", "TRK"); - assertThat(newValue.toString()).contains("projectUuid"); + assertThat(newValue.toString()) + .contains("componentUuid") + .contains("\"qualifier\": \"project\""); } @Test - public void toString_addsApplicationPrefix() { + public void toString_addsApplicationQualifier() { ComponentNewValue newValue = new ComponentNewValue("uuid", "name", "key", true, "path", "APP"); - assertThat(newValue.toString()).contains("applicationUuid"); + assertThat(newValue.toString()) + .contains("componentUuid") + .contains("\"qualifier\": \"application\""); } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoTest.java index 6714fcdb93e..24d8075b28e 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoTest.java @@ -561,7 +561,7 @@ public class GroupPermissionDaoTest { db.users().insertProjectPermissionOnGroup(group1, "perm2", project1); db.users().insertProjectPermissionOnGroup(group2, "perm3", project2); - underTest.deleteByRootComponentUuid(dbSession, project1.uuid(), project1.name()); + underTest.deleteByRootComponentUuid(dbSession, project1); dbSession.commit(); assertThat(db.countSql("select count(uuid) from group_roles where component_uuid='" + project1.uuid() + "'")).isZero(); @@ -580,7 +580,7 @@ public class GroupPermissionDaoTest { db.users().insertProjectPermissionOnAnyone("perm4", project1); db.users().insertProjectPermissionOnAnyone("perm5", project2); - underTest.deleteByRootComponentUuid(dbSession, project1.uuid(), project1.name()); + underTest.deleteByRootComponentUuid(dbSession, project1); dbSession.commit(); assertThat(db.countSql("select count(uuid) from group_roles where component_uuid='" + project1.uuid() + "'")).isZero(); @@ -698,7 +698,7 @@ public class GroupPermissionDaoTest { assertThat(underTest.selectGlobalPermissionsOfGroup(dbSession, group.getUuid())) .containsOnly("p4"); - int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), null); + int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, null, project); assertThat(deletedCount).isEqualTo(1); assertThat(underTest.selectProjectPermissionsOfGroup(dbSession, null, project.uuid())) @@ -736,7 +736,7 @@ public class GroupPermissionDaoTest { assertThat(underTest.selectGlobalPermissionsOfGroup(dbSession, group2.getUuid())) .containsOnly("p7"); - int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), group1.getUuid()); + int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, group1.getUuid(), project); assertThat(deletedCount).isEqualTo(1); assertThat(underTest.selectProjectPermissionsOfGroup(dbSession, null, project.uuid())) @@ -750,7 +750,7 @@ public class GroupPermissionDaoTest { assertThat(underTest.selectGlobalPermissionsOfGroup(dbSession, group2.getUuid())) .containsOnly("p7"); - deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), group2.getUuid()); + deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, group2.getUuid(), project); assertThat(deletedCount).isEqualTo(2); assertThat(underTest.selectProjectPermissionsOfGroup(dbSession, null, project.uuid())) @@ -768,9 +768,10 @@ public class GroupPermissionDaoTest { @Test public void deleteByRootComponentUuidAndGroupUuid_has_no_effect_if_component_does_not_exist() { GroupDto group = db.users().insertGroup(); + ComponentDto component = new ComponentDto().setUuid("1234"); - assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, "1234", null)).isZero(); - assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, "1234", group.getUuid())).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, null, component)).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, group.getUuid(), component)).isZero(); } @Test @@ -778,15 +779,15 @@ public class GroupPermissionDaoTest { ComponentDto project = randomPublicOrPrivateProject(); GroupDto group = db.users().insertGroup(); - assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), null)).isZero(); - assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), group.getUuid())).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, null, project)).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, group.getUuid(), project)).isZero(); } @Test public void deleteByRootComponentUuidAndGroupUuid_has_no_effect_if_group_does_not_exist() { ComponentDto project = randomPublicOrPrivateProject(); - assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), "5678")).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, "5678", project)).isZero(); } @Test @@ -801,7 +802,7 @@ public class GroupPermissionDaoTest { db.users().insertPermissionOnAnyone("p2"); db.users().insertPermissionOnGroup(group1, "p3"); - int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), null); + int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, null, project); assertThat(deletedCount).isZero(); assertThat(underTest.selectProjectPermissionsOfGroup(dbSession, null, project.uuid())) @@ -823,7 +824,7 @@ public class GroupPermissionDaoTest { db.users().insertPermissionOnAnyone("p2"); db.users().insertPermissionOnGroup(group1, "p3"); - int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, project.uuid(), group2.getUuid()); + int deletedCount = underTest.deleteByRootComponentUuidAndGroupUuid(dbSession, group2.getUuid(), project); assertThat(deletedCount).isZero(); assertThat(underTest.selectProjectPermissionsOfGroup(dbSession, group1.getUuid(), project.uuid())) @@ -851,7 +852,7 @@ public class GroupPermissionDaoTest { assertThat(getProjectPermissionsForAnyOne(project)).containsOnly("p1", "p2"); assertThat(getProjectPermissionsForGroup(project, group)).containsOnly("p1", "p2"); - int deletedRows = underTest.deleteByRootComponentUuidAndPermission(dbSession, project.uuid(), "p1", project.name()); + int deletedRows = underTest.deleteByRootComponentUuidAndPermission(dbSession, "p1", project); assertThat(deletedRows).isEqualTo(2); assertThat(getGlobalPermissionsForAnyone()).containsOnly("p1", "p2"); @@ -859,7 +860,7 @@ public class GroupPermissionDaoTest { assertThat(getProjectPermissionsForAnyOne(project)).containsOnly("p2"); assertThat(getProjectPermissionsForGroup(project, group)).containsOnly("p2"); - deletedRows = underTest.deleteByRootComponentUuidAndPermission(dbSession, project.uuid(), "p2", project.name()); + deletedRows = underTest.deleteByRootComponentUuidAndPermission(dbSession, "p2", project); assertThat(deletedRows).isEqualTo(2); assertThat(getGlobalPermissionsForAnyone()).containsOnly("p1", "p2"); @@ -875,7 +876,7 @@ public class GroupPermissionDaoTest { db.users().insertPermissionOnAnyone("p1"); db.users().insertPermissionOnGroup(group, "p1"); - assertThat(underTest.deleteByRootComponentUuidAndPermission(dbSession, project.uuid(), "p1", project.name())).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndPermission(dbSession, "p1", project)).isZero(); assertThat(getGlobalPermissionsForAnyone()).containsOnly("p1"); assertThat(getGlobalPermissionsForGroup(group)).containsOnly("p1"); @@ -892,7 +893,9 @@ public class GroupPermissionDaoTest { db.users().insertProjectPermissionOnGroup(group, "p1", project); db.users().insertProjectPermissionOnAnyone("p1", project); - assertThat(underTest.deleteByRootComponentUuidAndPermission(dbSession, "1324", "p1", "")).isZero(); + ComponentDto anotherProject = new ComponentDto().setUuid("1324"); + + assertThat(underTest.deleteByRootComponentUuidAndPermission(dbSession, "p1", anotherProject)).isZero(); assertThat(getGlobalPermissionsForAnyone()).containsOnly("p1"); assertThat(getGlobalPermissionsForGroup(group)).containsOnly("p1"); @@ -907,7 +910,7 @@ public class GroupPermissionDaoTest { db.users().insertPermissionOnAnyone("p1"); db.users().insertPermissionOnGroup(group, "p1"); - assertThat(underTest.deleteByRootComponentUuidAndPermission(dbSession, project.uuid(), "p1", project.name())).isZero(); + assertThat(underTest.deleteByRootComponentUuidAndPermission(dbSession, "p1", project)).isZero(); } private Collection getGlobalPermissionsForAnyone() { diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoWithPersisterTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoWithPersisterTest.java index d15ca54dd36..94c5311e916 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoWithPersisterTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/GroupPermissionDaoWithPersisterTest.java @@ -55,14 +55,15 @@ public class GroupPermissionDaoWithPersisterTest { .setGroupUuid(group.getUuid()) .setGroupName(group.getName()) .setRole(ADMIN); - underTest.insert(dbSession, dto); + underTest.insert(dbSession, dto, null); verify(auditPersister).addGroupPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getGroupName, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), null, dto.getRole(), null); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), null, dto.getRole(), null, null); assertThat(newValue.toString()).doesNotContain("projectUuid"); underTest.delete(dbSession, ADMIN, group.getUuid(), group.getName(), null, null); @@ -70,8 +71,9 @@ public class GroupPermissionDaoWithPersisterTest { verify(auditPersister).deleteGroupPermission(eq(dbSession), newValueCaptor.capture()); newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getGroupName, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName) .containsExactly(null, group.getUuid(), group.getName(), null, ADMIN, null); assertThat(newValue.toString()).doesNotContain("permissionUuid"); } @@ -81,23 +83,25 @@ public class GroupPermissionDaoWithPersisterTest { GroupDto group = db.users().insertGroup(); ComponentDto project = db.components().insertPrivateProject(); GroupPermissionDto dto = getGroupPermission(group, project); - underTest.insert(dbSession, dto); + underTest.insert(dbSession, dto, project); verify(auditPersister).addGroupPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getGroupName, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), project.uuid(), dto.getRole(), project.name()); - assertThat(newValue.toString()).contains("projectUuid"); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), project.uuid(), dto.getRole(), project.name(), "project"); + assertThat(newValue.toString()).contains("componentUuid"); - underTest.deleteByRootComponentUuid(dbSession, project.uuid(), project.name()); + underTest.deleteByRootComponentUuid(dbSession, project); verify(auditPersister).deleteGroupPermission(eq(dbSession), newValueCaptor.capture()); newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getGroupName, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName) .containsExactly(null, null, null, project.uuid(), null, project.name()); assertThat(newValue.toString()).doesNotContain("permissionUuid"); } @@ -107,24 +111,26 @@ public class GroupPermissionDaoWithPersisterTest { GroupDto group = db.users().insertGroup(); ComponentDto project = db.components().insertPrivateProject(); GroupPermissionDto dto = getGroupPermission(group, project); - underTest.insert(dbSession, dto); + underTest.insert(dbSession, dto, project); verify(auditPersister).addGroupPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getGroupName, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), project.uuid(), dto.getRole(), project.name()); - assertThat(newValue.toString()).contains("projectUuid"); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), project.uuid(), dto.getRole(), project.name(), "project"); + assertThat(newValue.toString()).contains("componentUuid"); - underTest.deleteByRootComponentUuidForAnyOne(dbSession, project.uuid(), project.name()); + underTest.deleteByRootComponentUuidForAnyOne(dbSession, project); verify(auditPersister).deleteGroupPermission(eq(dbSession), newValueCaptor.capture()); newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(null, project.uuid(), null, project.name()); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName) + .containsExactly(null, null, null, project.uuid(), null, project.name()); assertThat(newValue.toString()).doesNotContain("permissionUuid"); } @@ -133,23 +139,24 @@ public class GroupPermissionDaoWithPersisterTest { GroupDto group = db.users().insertGroup(); ComponentDto project = db.components().insertPrivateProject(); GroupPermissionDto dto = getGroupPermission(group, project); - underTest.insert(dbSession, dto); + underTest.insert(dbSession, dto, project); verify(auditPersister).addGroupPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getGroupName, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), project.uuid(), dto.getRole(), project.name()); - assertThat(newValue.toString()).contains("projectUuid"); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, + PermissionNewValue::getGroupName, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), group.getUuid(), group.getName(), project.uuid(), dto.getRole(), project.name(), "project"); + assertThat(newValue.toString()).contains("componentUuid"); - underTest.deleteByRootComponentUuidAndPermission(dbSession, project.uuid(), dto.getRole(), project.name()); + underTest.deleteByRootComponentUuidAndPermission(dbSession, dto.getRole(), project); verify(auditPersister).deleteGroupPermission(eq(dbSession), newValueCaptor.capture()); newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getGroupUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName) .containsExactly(null, null, project.uuid(), ADMIN, project.name()); assertThat(newValue.toString()).doesNotContain("permissionUuid"); } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoTest.java index eec32dd69f6..a276c319cd4 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoTest.java @@ -397,10 +397,10 @@ public class UserPermissionDaoTest { addProjectPermission("perm", user2, project1); // no such provision -> ignore - underTest.deleteProjectPermission(dbSession, user1.getUuid(), "anotherPerm", project1.uuid(), project1.name()); + underTest.deleteProjectPermission(dbSession, user1.getUuid(), "anotherPerm", project1); assertThat(db.countRowsOfTable(dbSession, "user_roles")).isEqualTo(4); - underTest.deleteProjectPermission(dbSession, user1.getUuid(), "perm", project1.uuid(), project1.name()); + underTest.deleteProjectPermission(dbSession, user1.getUuid(), "perm", project1); assertThatProjectPermissionDoesNotExist(user1, "perm", project1); assertThat(db.countRowsOfTable(dbSession, "user_roles")).isEqualTo(3); } @@ -416,7 +416,7 @@ public class UserPermissionDaoTest { addProjectPermission("perm", user2, project1); addProjectPermission("perm", user1, project2); - underTest.deleteProjectPermissions(dbSession, project1.uuid(), project1.name()); + underTest.deleteProjectPermissions(dbSession, project1); assertThat(db.countRowsOfTable(dbSession, "user_roles")).isEqualTo(2); assertThatProjectHasNoPermissions(project1); } @@ -520,8 +520,9 @@ public class UserPermissionDaoTest { public void deleteProjectPermissionOfAnyUser_has_no_effect_if_specified_component_does_not_exist() { UserDto user = insertUser(); db.users().insertPermissionOnUser(user, SCAN); + ComponentDto component = newPrivateProjectDto(); - int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, "124", SCAN.getKey(), ""); + int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, SCAN.getKey(), component); assertThat(deletedCount).isZero(); assertThat(underTest.selectGlobalPermissionsOfUser(dbSession, user.getUuid())).containsOnly(SCAN.getKey()); @@ -533,7 +534,7 @@ public class UserPermissionDaoTest { db.users().insertPermissionOnUser(user, SCAN); ComponentDto project = randomPublicOrPrivateProject(); - int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, project.uuid(), SCAN.getKey(), ""); + int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, SCAN.getKey(), project); assertThat(deletedCount).isZero(); assertThat(underTest.selectGlobalPermissionsOfUser(dbSession, user.getUuid())).containsOnly(SCAN.getKey()); @@ -546,7 +547,7 @@ public class UserPermissionDaoTest { ComponentDto project = randomPublicOrPrivateProject(); db.users().insertProjectPermissionOnUser(user, SCAN.getKey(), project); - int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, project.uuid(), "p1", project.name()); + int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, "p1", project); assertThat(deletedCount).isZero(); assertThat(underTest.selectGlobalPermissionsOfUser(dbSession, user.getUuid())).containsOnly(SCAN.getKey()); @@ -567,7 +568,7 @@ public class UserPermissionDaoTest { db.users().insertProjectPermissionOnUser(user2, SCAN.getKey(), project2); db.users().insertProjectPermissionOnUser(user2, PROVISION_PROJECTS.getKey(), project2); - int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, project1.uuid(), SCAN.getKey(), project1.name()); + int deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, SCAN.getKey(), project1); assertThat(deletedCount).isEqualTo(2); assertThat(underTest.selectGlobalPermissionsOfUser(dbSession, user1.getUuid())).containsOnly(SCAN.getKey()); @@ -577,7 +578,7 @@ public class UserPermissionDaoTest { assertThat(underTest.selectProjectPermissionsOfUser(dbSession, user1.getUuid(), project2.uuid())).containsOnly(SCAN.getKey()); assertThat(underTest.selectProjectPermissionsOfUser(dbSession, user2.getUuid(), project2.uuid())).containsOnly(SCAN.getKey(), PROVISION_PROJECTS.getKey()); - deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, project2.uuid(), SCAN.getKey(), project2.name()); + deletedCount = underTest.deleteProjectPermissionOfAnyUser(dbSession, SCAN.getKey(), project2); assertThat(deletedCount).isEqualTo(2); assertThat(underTest.selectGlobalPermissionsOfUser(dbSession, user1.getUuid())).containsOnly(SCAN.getKey()); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoWithPersisterTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoWithPersisterTest.java index b0c37ac9492..dbbfd2c85e6 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoWithPersisterTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/UserPermissionDaoWithPersisterTest.java @@ -58,9 +58,9 @@ public class UserPermissionDaoWithPersisterTest { verify(auditPersister).addUserPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(dto.getUuid(), user.getUuid(), null, dto.getPermission(), null); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), user.getUuid(), null, dto.getPermission(), null, null); assertThat(newValue.toString()).doesNotContain("projectUuid"); underTest.deleteGlobalPermission(dbSession, user.getUuid(), SYSTEM_ADMIN); @@ -68,8 +68,8 @@ public class UserPermissionDaoWithPersisterTest { verify(auditPersister).deleteUserPermission(eq(dbSession), newValueCaptor.capture()); newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName) .containsExactly(null, user.getUuid(), null, dto.getPermission(), null); assertThat(newValue.toString()).doesNotContain("permissionUuid"); } @@ -84,20 +84,55 @@ public class UserPermissionDaoWithPersisterTest { verify(auditPersister).addUserPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(dto.getUuid(), user.getUuid(), project.uuid(), dto.getPermission(), project.name()); - assertThat(newValue.toString()).contains("projectUuid"); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), user.getUuid(), project.uuid(), dto.getPermission(), project.name(), "project"); + assertThat(newValue.toString()).contains("componentUuid"); - underTest.deleteProjectPermission(dbSession, user.getUuid(), SYSTEM_ADMIN, project.projectUuid(), project.name()); + underTest.deleteProjectPermission(dbSession, user.getUuid(), SYSTEM_ADMIN, project); verify(auditPersister).deleteUserPermission(eq(dbSession), newValueCaptor.capture()); newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName) .containsExactly(null, user.getUuid(), project.uuid(), dto.getPermission(), project.name()); - assertThat(newValue.toString()).doesNotContain("permissionUuid"); + assertThat(newValue.toString()) + .doesNotContain("permissionUuid"); + } + + @Test + public void userPortfolioPermissionIsPersisted() { + UserDto user = insertUser(u -> u.setLogin("login1").setName("Marius").setEmail("email1@email.com")); + ComponentDto portfolio = db.components().insertPublicPortfolio(); + UserPermissionDto dto = new UserPermissionDto(Uuids.create(), SYSTEM_ADMIN, user.getUuid(), portfolio.uuid()); + underTest.insert(dbSession, dto, portfolio); + + verify(auditPersister).addUserPermission(eq(dbSession), newValueCaptor.capture()); + PermissionNewValue newValue = newValueCaptor.getValue(); + assertThat(newValue) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), user.getUuid(), portfolio.uuid(), dto.getPermission(), portfolio.name(), "portfolio"); + assertThat(newValue.toString()) + .contains("componentUuid"); + } + + @Test + public void userApplicationPermissionIsPersisted() { + UserDto user = insertUser(u -> u.setLogin("login1").setName("Marius").setEmail("email1@email.com")); + ComponentDto application = db.components().insertPublicApplication(); + UserPermissionDto dto = new UserPermissionDto(Uuids.create(), SYSTEM_ADMIN, user.getUuid(), application.uuid()); + underTest.insert(dbSession, dto, application); + + verify(auditPersister).addUserPermission(eq(dbSession), newValueCaptor.capture()); + PermissionNewValue newValue = newValueCaptor.getValue(); + assertThat(newValue) + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(dto.getUuid(), user.getUuid(), application.uuid(), dto.getPermission(), application.name(), "application"); + assertThat(newValue.toString()) + .contains("componentUuid"); } @Test @@ -106,14 +141,14 @@ public class UserPermissionDaoWithPersisterTest { ComponentDto project = db.components().insertPrivateProject(); UserPermissionDto dto = new UserPermissionDto(Uuids.create(), SCAN_EXECUTION, user.getUuid(), project.uuid()); underTest.insert(dbSession, dto, project); - underTest.deleteProjectPermissionOfAnyUser(dbSession, project.projectUuid(), SCAN_EXECUTION, project.name()); + underTest.deleteProjectPermissionOfAnyUser(dbSession, SCAN_EXECUTION, project); verify(auditPersister).deleteUserPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(null, null, project.uuid(), SCAN_EXECUTION, project.name()); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(null, null, project.uuid(), SCAN_EXECUTION, project.name(), "project"); assertThat(newValue.toString()).doesNotContain("userUuid"); } @@ -128,9 +163,9 @@ public class UserPermissionDaoWithPersisterTest { verify(auditPersister).deleteUserPermission(eq(dbSession), newValueCaptor.capture()); PermissionNewValue newValue = newValueCaptor.getValue(); assertThat(newValue) - .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getProjectUuid, - PermissionNewValue::getRole, PermissionNewValue::getProjectName) - .containsExactly(null, user.getUuid(), null, null, null); + .extracting(PermissionNewValue::getPermissionUuid, PermissionNewValue::getUserUuid, PermissionNewValue::getComponentUuid, + PermissionNewValue::getRole, PermissionNewValue::getComponentName, PermissionNewValue::getQualifier) + .containsExactly(null, user.getUuid(), null, null, null, null); assertThat(newValue.toString()).contains("userUuid"); } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java index e560a5cc4fc..cdb218b2025 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java @@ -36,6 +36,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; +import org.sonar.api.resources.Qualifiers; import org.sonar.api.web.UserRole; import org.sonar.db.DbClient; import org.sonar.db.DbSession; @@ -646,10 +647,10 @@ public class PropertiesDaoTest { public void select_by_key_and_matching_value() { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject(); - db.properties().insertProperties(null, project1.name(), newComponentPropertyDto("key", "value", project1)); - db.properties().insertProperties(null, project2.name(), newComponentPropertyDto("key", "value", project2)); - db.properties().insertProperties(null, null, newGlobalPropertyDto("key", "value")); - db.properties().insertProperties(null, project1.name(), newComponentPropertyDto("another key", "value", project1)); + db.properties().insertProperties(null, project1.name(), project1.qualifier(), newComponentPropertyDto("key", "value", project1)); + db.properties().insertProperties(null, project2.name(), project2.qualifier(), newComponentPropertyDto("key", "value", project2)); + db.properties().insertProperties(null, null, null, newGlobalPropertyDto("key", "value")); + db.properties().insertProperties(null, project1.name(), project1.qualifier(), newComponentPropertyDto("another key", "value", project1)); assertThat(underTest.selectByKeyAndMatchingValue(db.getSession(), "key", "value")) .extracting(PropertyDto::getValue, PropertyDto::getComponentUuid) @@ -666,12 +667,12 @@ public class PropertiesDaoTest { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto file1 = db.components().insertComponent(ComponentTesting.newFileDto(project1)); ComponentDto project2 = db.components().insertPrivateProject(); - db.properties().insertProperties(user1.getLogin(), project1.name(), newPropertyDto("key", "1", project1, user1)); - db.properties().insertProperties(user1.getLogin(), project2.name(), newPropertyDto("key", "2", project2, user1)); - db.properties().insertProperties(user1.getLogin(), file1.name(), newPropertyDto("key", "3", file1, user1)); - db.properties().insertProperties(user1.getLogin(), project1.name(), newPropertyDto("another key", "4", project1, user1)); - db.properties().insertProperties(user2.getLogin(), project1.name(), newPropertyDto("key", "5", project1, user2)); - db.properties().insertProperties(null, null, newGlobalPropertyDto("key", "global")); + db.properties().insertProperties(user1.getLogin(), project1.name(), project1.qualifier(), newPropertyDto("key", "1", project1, user1)); + db.properties().insertProperties(user1.getLogin(), project2.name(), project2.qualifier(), newPropertyDto("key", "2", project2, user1)); + db.properties().insertProperties(user1.getLogin(), file1.name(), null, newPropertyDto("key", "3", file1, user1)); + db.properties().insertProperties(user1.getLogin(), project1.name(), project1.qualifier(), newPropertyDto("another key", "4", project1, user1)); + db.properties().insertProperties(user2.getLogin(), project1.name(), project1.qualifier(), newPropertyDto("key", "5", project1, user2)); + db.properties().insertProperties(null, null, null, newGlobalPropertyDto("key", "global")); assertThat(underTest.selectByKeyAndUserUuidAndComponentQualifier(db.getSession(), "key", user1.getUuid(), "TRK")) .extracting(PropertyDto::getValue).containsExactlyInAnyOrder("1", "2"); @@ -904,7 +905,7 @@ public class PropertiesDaoTest { String uuid6 = insertProperty("user.two", "two", null, "100", "login", null); String uuid7 = insertProperty("other.one", "one", "project3", null, null, "project3"); - underTest.deleteProjectProperty("struts.one", "project1", "project1"); + underTest.deleteProjectProperty("struts.one", "project1", "project1", Qualifiers.PROJECT); assertThatPropertiesRowByUuid(uuid1) .hasKey("global.one") @@ -1224,7 +1225,7 @@ public class PropertiesDaoTest { private void insertProperties(@Nullable String userLogin, @Nullable String projectName, PropertyDto... properties) { for (PropertyDto propertyDto : properties) { - underTest.saveProperty(session, propertyDto, userLogin, projectName); + underTest.saveProperty(session, propertyDto, userLogin, projectName, Qualifiers.PROJECT); } session.commit(); } @@ -1235,7 +1236,7 @@ public class PropertiesDaoTest { .setComponentUuid(componentUuid) .setUserUuid(userUuid) .setValue(value); - db.properties().insertProperty(dto, projectName, userLogin); + db.properties().insertProperty(dto, projectName, Qualifiers.PROJECT, userLogin); return (String) db.selectFirst(session, "select uuid as \"uuid\" from properties" + " where prop_key='" + key + "'" + diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoWithPersisterTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoWithPersisterTest.java index d0349a59061..26ef4bf051d 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoWithPersisterTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoWithPersisterTest.java @@ -28,6 +28,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; +import org.sonar.api.resources.Qualifiers; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; @@ -121,7 +122,7 @@ public class PropertiesDaoWithPersisterTest { when(auditPersister.isTrackedProperty(KEY)).thenReturn(true); PropertyDto propertyDto = getPropertyDto(KEY); - underTest.saveProperty(session, propertyDto, USER_LOGIN, PROJECT_NAME); + underTest.saveProperty(session, propertyDto, USER_LOGIN, PROJECT_NAME, Qualifiers.PROJECT); verify(auditPersister).isTrackedProperty(KEY); verify(auditPersister).addProperty(any(), newValueCaptor.capture(), eq(false)); @@ -129,10 +130,50 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName, PropertyNewValue::getQualifier) .containsExactly(propertyDto.getKey(), propertyDto.getValue(), propertyDto.getUserUuid(), - USER_LOGIN, propertyDto.getComponentUuid(), PROJECT_NAME); - assertThat(newValue.toString()).contains("projectUuid"); + USER_LOGIN, propertyDto.getComponentUuid(), PROJECT_NAME, "project"); + assertThat(newValue.toString()).contains("componentUuid"); + } + + @Test + public void saveApplicationTrackedPropertyIsPersisted() { + when(auditPersister.isTrackedProperty(KEY)).thenReturn(true); + + PropertyDto propertyDto = getPropertyDto(KEY); + underTest.saveProperty(session, propertyDto, USER_LOGIN, "app-name", Qualifiers.APP); + + verify(auditPersister).isTrackedProperty(KEY); + verify(auditPersister).addProperty(any(), newValueCaptor.capture(), eq(false)); + PropertyNewValue newValue = newValueCaptor.getValue(); + assertThat(newValue) + .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, + PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName, PropertyNewValue::getQualifier) + .containsExactly(propertyDto.getKey(), propertyDto.getValue(), propertyDto.getUserUuid(), + USER_LOGIN, propertyDto.getComponentUuid(), "app-name", "application"); + assertThat(newValue.toString()) + .contains("componentUuid"); + } + + @Test + public void savePortfolioTrackedPropertyIsPersisted() { + when(auditPersister.isTrackedProperty(KEY)).thenReturn(true); + + PropertyDto propertyDto = getPropertyDto(KEY); + underTest.saveProperty(session, propertyDto, USER_LOGIN, "portfolio-name", Qualifiers.VIEW); + + verify(auditPersister).isTrackedProperty(KEY); + verify(auditPersister).addProperty(any(), newValueCaptor.capture(), eq(false)); + PropertyNewValue newValue = newValueCaptor.getValue(); + assertThat(newValue) + .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, + PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName, PropertyNewValue::getQualifier) + .containsExactly(propertyDto.getKey(), propertyDto.getValue(), propertyDto.getUserUuid(), + USER_LOGIN, propertyDto.getComponentUuid(), "portfolio-name", "portfolio"); + assertThat(newValue.toString()) + .contains("componentUuid"); } @Test @@ -140,7 +181,7 @@ public class PropertiesDaoWithPersisterTest { when(auditPersister.isTrackedProperty(SECURED_KEY)).thenReturn(true); PropertyDto propertyDto = getPropertyDto(SECURED_KEY); - underTest.saveProperty(session, propertyDto, USER_LOGIN, PROJECT_NAME); + underTest.saveProperty(session, propertyDto, USER_LOGIN, PROJECT_NAME, Qualifiers.PROJECT); verify(auditPersister).isTrackedProperty(SECURED_KEY); verify(auditPersister).addProperty(any(), newValueCaptor.capture(), eq(false)); @@ -148,10 +189,10 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName, PropertyNewValue::getQualifier) .containsExactly(propertyDto.getKey(), null, propertyDto.getUserUuid(), - USER_LOGIN, propertyDto.getComponentUuid(), PROJECT_NAME); - assertThat(newValue.toString()).contains("projectUuid"); + USER_LOGIN, propertyDto.getComponentUuid(), PROJECT_NAME, "project"); + assertThat(newValue.toString()).contains("componentUuid"); } @Test @@ -167,7 +208,7 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(query.key(), null, query.userUuid(), null, query.componentUuid(), null); assertThat(newValue.toString()).doesNotContain("userLogin"); @@ -189,7 +230,7 @@ public class PropertiesDaoWithPersisterTest { when(auditPersister.isTrackedProperty(KEY)).thenReturn(true); PropertyDto propertyDto = getPropertyDto(KEY); - underTest.delete(session, propertyDto, USER_LOGIN, PROJECT_NAME); + underTest.delete(session, propertyDto, USER_LOGIN, PROJECT_NAME, Qualifiers.PROJECT); verify(auditPersister).isTrackedProperty(KEY); verify(auditPersister).deleteProperty(any(), newValueCaptor.capture(), eq(false)); @@ -197,7 +238,7 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(propertyDto.getKey(), propertyDto.getValue(), propertyDto.getUserUuid(), USER_LOGIN, propertyDto.getComponentUuid(), PROJECT_NAME); assertThat(newValue.toString()).contains("userLogin"); @@ -208,7 +249,7 @@ public class PropertiesDaoWithPersisterTest { when(auditPersister.isTrackedProperty(KEY)).thenReturn(false); PropertyDto propertyDto = getPropertyDto(KEY); - underTest.delete(session, propertyDto, USER_LOGIN, PROJECT_NAME); + underTest.delete(session, propertyDto, USER_LOGIN, PROJECT_NAME, Qualifiers.PROJECT); verify(auditPersister).isTrackedProperty(KEY); verifyNoMoreInteractions(auditPersister); @@ -217,7 +258,7 @@ public class PropertiesDaoWithPersisterTest { @Test public void deleteTrackedProjectPropertyIsPersisted() { when(auditPersister.isTrackedProperty(KEY)).thenReturn(true); - underTest.deleteProjectProperty(KEY, PROJECT_UUID, PROJECT_NAME); + underTest.deleteProjectProperty(KEY, PROJECT_UUID, PROJECT_NAME, Qualifiers.PROJECT); verify(auditPersister).isTrackedProperty(KEY); verify(auditPersister).deleteProperty(any(), newValueCaptor.capture(), eq(false)); @@ -225,7 +266,7 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(KEY, null, null, null, PROJECT_UUID, PROJECT_NAME); assertThat(newValue.toString()).doesNotContain("userLogin"); @@ -236,7 +277,7 @@ public class PropertiesDaoWithPersisterTest { when(auditPersister.isTrackedProperty(KEY)).thenReturn(false); PropertyDto propertyDto = getPropertyDto(KEY); - underTest.delete(session, propertyDto, USER_LOGIN, PROJECT_NAME); + underTest.delete(session, propertyDto, USER_LOGIN, PROJECT_NAME, Qualifiers.PROJECT); verify(auditPersister).isTrackedProperty(KEY); verifyNoMoreInteractions(auditPersister); @@ -254,7 +295,7 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(KEY, VALUE, null, null, null, null); assertThat(newValue.toString()).doesNotContain("projectUuid"); @@ -282,7 +323,7 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(KEY, null, null, null, null, null); assertThat(newValue.toString()).doesNotContain("projectUuid"); @@ -311,14 +352,14 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValues.get(0)) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(KEY, null, user.getUuid(), user.getLogin(), null, null); assertThat(newValues.get(0).toString()).contains("userUuid"); assertThat(newValues.get(1)) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(SECURED_KEY, null, user.getUuid(), user.getLogin(), null, null); assertThat(newValues.get(1).toString()).doesNotContain("value"); @@ -337,14 +378,14 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValues.get(0)) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(KEY, null, null, user.getLogin(), null, null); assertThat(newValues.get(0).toString()).contains("userLogin"); assertThat(newValues.get(1)) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(SECURED_KEY, null, null, user.getLogin(), null, null); assertThat(newValues.get(1).toString()).doesNotContain("value"); @@ -362,7 +403,7 @@ public class PropertiesDaoWithPersisterTest { assertThat(newValue) .extracting(PropertyNewValue::getPropertyKey, PropertyNewValue::getPropertyValue, PropertyNewValue::getUserUuid, PropertyNewValue::getUserLogin, - PropertyNewValue::getProjectUuid, PropertyNewValue::getProjectName) + PropertyNewValue::getComponentUuid, PropertyNewValue::getComponentName) .containsExactly(KEY, VALUE, null, null, null, null); assertThat(newValue.toString()).doesNotContain("projectUuid"); @@ -418,12 +459,9 @@ public class PropertiesDaoWithPersisterTest { .setComponentUuid(project.uuid()) .setUserUuid(user.getUuid()) .setValue(value); - db.properties().insertProperty(dto1, project.name(), user.getLogin()); - db.properties().insertProperty(dto2, project.name(), user.getLogin()); - db.properties().insertProperty(dto3, project.name(), user.getLogin()); - List list = db.getDbClient().propertiesDao().selectByKeyAndMatchingValue(session, KEY, VALUE); - list = db.getDbClient().propertiesDao().selectByKeyAndMatchingValue(session, ANOTHER_KEY, VALUE); - list = db.getDbClient().propertiesDao().selectByKeyAndMatchingValue(session, SECURED_KEY, VALUE); + db.properties().insertProperty(dto1, project.name(), project.qualifier(), user.getLogin()); + db.properties().insertProperty(dto2, project.name(), project.qualifier(), user.getLogin()); + db.properties().insertProperty(dto3, project.name(), project.qualifier(), user.getLogin()); return user; } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java index efa49b31960..6aa13a36cb0 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java @@ -1646,7 +1646,7 @@ public class PurgeDaoTest { .setKey(randomAlphabetic(3)) .setValue(randomAlphabetic(3)) .setComponentUuid(componentDto.uuid()), - componentDto.name(), null)); + componentDto.name(), componentDto.qualifier(), null)); } private void insertPropertyFor(Collection branches) { @@ -1654,7 +1654,7 @@ public class PurgeDaoTest { .setKey(randomAlphabetic(3)) .setValue(randomAlphabetic(3)) .setComponentUuid(branchDto.getUuid()), - branchDto.getKey(), null)); + branchDto.getKey(), null,null)); } private Stream getComponentUuidsOfMeasures() { diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoWithAuditTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoWithAuditTest.java index 4e7344ee683..22d7cf8bfc1 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoWithAuditTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoWithAuditTest.java @@ -62,8 +62,9 @@ public class PurgeDaoWithAuditTest { verify(auditPersister).deleteComponent(any(DbSession.class), newValueCaptor.capture(), eq(project.qualifier())); ComponentNewValue componentNewValue = newValueCaptor.getValue(); assertThat(componentNewValue) - .extracting(ComponentNewValue::getComponentUuid, ComponentNewValue::getComponentName, ComponentNewValue::getKey) - .containsExactly(project.uuid(), project.name(), project.getKey()); + .extracting(ComponentNewValue::getComponentUuid, ComponentNewValue::getComponentName, ComponentNewValue::getKey, + ComponentNewValue::getQualifier) + .containsExactly(project.uuid(), project.name(), project.getKey(), "project"); } } diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/favorite/FavoriteDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/favorite/FavoriteDbTester.java index b31b05d85bd..fd75fb40227 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/favorite/FavoriteDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/favorite/FavoriteDbTester.java @@ -43,7 +43,7 @@ public class FavoriteDbTester { .setKey(PROP_FAVORITE_KEY) .setUserUuid(userUuid) .setComponentUuid(componentDto.uuid()), - userLogin, componentDto.name()); + userLogin, componentDto.name(), componentDto.qualifier()); dbSession.commit(); } diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/property/PropertyDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/property/PropertyDbTester.java index c53992da6e1..aac7f1fdbf4 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/property/PropertyDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/property/PropertyDbTester.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; -import org.sonar.core.util.UuidFactory; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; @@ -47,20 +46,23 @@ public class PropertyDbTester { this.dbSession = db.getSession(); } - public PropertyDto insertProperty(PropertyDto property, @Nullable String componentName, @Nullable String userLogin) { - dbClient.propertiesDao().saveProperty(dbSession, property, userLogin, componentName); + public PropertyDto insertProperty(PropertyDto property, @Nullable String componentName, @Nullable String qualifier, + @Nullable String userLogin) { + dbClient.propertiesDao().saveProperty(dbSession, property, userLogin, qualifier, componentName); db.commit(); return property; } - public void insertProperties(@Nullable String userLogin, @Nullable String projectName, PropertyDto... properties) { - insertProperties(asList(properties), userLogin, projectName); + public void insertProperties(@Nullable String userLogin, @Nullable String projectName, @Nullable String qualifier, + PropertyDto... properties) { + insertProperties(asList(properties), userLogin, qualifier, projectName); } - public void insertProperties(List properties, @Nullable String userLogin, @Nullable String projectName) { + public void insertProperties(List properties, @Nullable String userLogin, @Nullable String projectName, + @Nullable String qualifier) { for (PropertyDto propertyDto : properties) { - dbClient.propertiesDao().saveProperty(dbSession, propertyDto, userLogin, projectName); + dbClient.propertiesDao().saveProperty(dbSession, propertyDto, userLogin, projectName, qualifier); } dbSession.commit(); } @@ -88,7 +90,8 @@ public class PropertyDbTester { propertyDtos.add(newGlobalPropertyDto().setKey(settingBaseKey).setValue(idsValue)); } String componentName = componentDto == null ? null : componentDto.name(); - insertProperties(propertyDtos, null, componentName); + String qualififer = componentDto == null ? null : componentDto.qualifier(); + insertProperties(propertyDtos, null, componentName, qualififer); } public PropertyDbTester verifyInternal(String key, @Nullable String expectedValue) { diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java index feefd300e54..2a5ac2dfa86 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java @@ -200,7 +200,7 @@ public class UserDbTester { .setUuid(Uuids.createFast()) .setGroupUuid(null) .setRole(permission); - db.getDbClient().groupPermissionDao().insert(db.getSession(), dto); + db.getDbClient().groupPermissionDao().insert(db.getSession(), dto, null); db.commit(); return dto; } @@ -214,7 +214,7 @@ public class UserDbTester { .setUuid(Uuids.createFast()) .setGroupUuid(group.getUuid()) .setRole(permission); - db.getDbClient().groupPermissionDao().insert(db.getSession(), dto); + db.getDbClient().groupPermissionDao().insert(db.getSession(), dto, null); db.commit(); return dto; } @@ -239,7 +239,7 @@ public class UserDbTester { .setRole(permission) .setComponentUuid(project.uuid()) .setComponentName(project.name()); - db.getDbClient().groupPermissionDao().insert(db.getSession(), dto); + db.getDbClient().groupPermissionDao().insert(db.getSession(), dto, project); db.commit(); return dto; } @@ -260,7 +260,7 @@ public class UserDbTester { .setRole(permission) .setComponentUuid(project.uuid()) .setComponentName(project.name()); - db.getDbClient().groupPermissionDao().insert(db.getSession(), dto); + db.getDbClient().groupPermissionDao().insert(db.getSession(), dto, project); db.commit(); return dto; } @@ -306,7 +306,7 @@ public class UserDbTester { } public void deletePermissionFromUser(ComponentDto project, UserDto user, String permission) { - db.getDbClient().userPermissionDao().deleteProjectPermission(db.getSession(), user.getUuid(), permission, project.uuid(), project.name()); + db.getDbClient().userPermissionDao().deleteProjectPermission(db.getSession(), user.getUuid(), permission, project); db.commit(); } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/favorite/FavoriteUpdater.java b/server/sonar-server-common/src/main/java/org/sonar/server/favorite/FavoriteUpdater.java index 6deb01b0806..e5abb245540 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/favorite/FavoriteUpdater.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/favorite/FavoriteUpdater.java @@ -63,7 +63,7 @@ public class FavoriteUpdater { .setComponentUuid(componentDto.uuid()) .setUserUuid(userUuid), userLogin, - componentDto.name()); + componentDto.name(), componentDto.qualifier()); } /** @@ -80,7 +80,7 @@ public class FavoriteUpdater { .setKey(PROP_FAVORITE_KEY) .setComponentUuid(component.uuid()) .setUserUuid(userUuid), - userLogin, component.name()); + userLogin, component.name(), component.qualifier()); checkArgument(result == 1, "Component '%s' is not a favorite", component.getDbKey()); } } diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/platform/StartupMetadataProviderTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/platform/StartupMetadataProviderTest.java index 0851cd9b1ba..74a37ad19a6 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/platform/StartupMetadataProviderTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/platform/StartupMetadataProviderTest.java @@ -102,7 +102,7 @@ public class StartupMetadataProviderTest { private void testLoadingFromDatabase(SonarRuntime runtime, boolean isStartupLeader) { dbTester.properties().insertProperty(new PropertyDto().setKey(CoreProperties.SERVER_STARTTIME).setValue(formatDateTime(A_DATE)), - null, null); + null, null, null); when(webServer.isStartupLeader()).thenReturn(isStartupLeader); StartupMetadata metadata = underTest.provide(system, runtime, webServer, dbTester.getDbClient()); diff --git a/server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginConsentVerifier.java b/server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginConsentVerifier.java index 70e31993887..178ec824b7a 100644 --- a/server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginConsentVerifier.java +++ b/server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginConsentVerifier.java @@ -54,7 +54,7 @@ public class PluginConsentVerifier implements Startable { if (hasExternalPlugins && NOT_ACCEPTED == PluginRiskConsent.valueOf(property.getValue())) { addWarningInSonarDotLog(); property.setValue(REQUIRED.name()); - dbClient.propertiesDao().saveProperty(session, property, null, null); + dbClient.propertiesDao().saveProperty(session, property, null, null, null); session.commit(); } else if (!hasExternalPlugins && REQUIRED == PluginRiskConsent.valueOf(property.getValue())) { dbClient.propertiesDao().deleteGlobalProperty(PLUGINS_RISK_CONSENT, session); diff --git a/server/sonar-webserver-api/src/main/java/org/sonar/server/project/ProjectDefaultVisibility.java b/server/sonar-webserver-api/src/main/java/org/sonar/server/project/ProjectDefaultVisibility.java index aabae7c3665..07d0d37da1c 100644 --- a/server/sonar-webserver-api/src/main/java/org/sonar/server/project/ProjectDefaultVisibility.java +++ b/server/sonar-webserver-api/src/main/java/org/sonar/server/project/ProjectDefaultVisibility.java @@ -46,6 +46,6 @@ public class ProjectDefaultVisibility { public void set(DbSession dbSession, Visibility visibility) { dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto() .setKey(PROJECTS_DEFAULT_VISIBILITY_PROPERTY_NAME) - .setValue(visibility.getLabel()), null, null); + .setValue(visibility.getLabel()), null, null, null); } } diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/user/UserUpdaterUpdateTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/user/UserUpdaterUpdateTest.java index d0269c96891..9440c0225da 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/user/UserUpdaterUpdateTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/user/UserUpdaterUpdateTest.java @@ -233,12 +233,12 @@ public class UserUpdaterUpdateTest { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = db.components().insertPrivateProject(); ComponentDto anotherProject = db.components().insertPrivateProject(); - db.properties().insertProperties(oldUser.getLogin(), project1.name(), + db.properties().insertProperties(oldUser.getLogin(), project1.name(), project1.qualifier(), new PropertyDto().setKey(DEFAULT_ISSUE_ASSIGNEE).setValue(oldUser.getLogin()), new PropertyDto().setKey(DEFAULT_ISSUE_ASSIGNEE).setValue(oldUser.getLogin()).setComponentUuid(project1.uuid())); - db.properties().insertProperties(oldUser.getLogin(), project2.name(), + db.properties().insertProperties(oldUser.getLogin(), project2.name(), project2.qualifier(), new PropertyDto().setKey(DEFAULT_ISSUE_ASSIGNEE).setValue(oldUser.getLogin()).setComponentUuid(project2.uuid())); - db.properties().insertProperties(oldUser.getLogin(), anotherProject.name(), + db.properties().insertProperties(oldUser.getLogin(), anotherProject.name(), anotherProject.qualifier(), new PropertyDto().setKey(DEFAULT_ISSUE_ASSIGNEE).setValue("another login").setComponentUuid(anotherProject.uuid())); userIndexer.indexAll(); diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/PersistentSettings.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/PersistentSettings.java index f64d38a65e3..cd50694adce 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/PersistentSettings.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/PersistentSettings.java @@ -72,7 +72,7 @@ public class PersistentSettings { if (value == null) { dbClient.propertiesDao().deleteGlobalProperty(key, dbSession); } else { - dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(key).setValue(value), null, null); + dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(key).setValue(value), null, null, null); } // refresh the cache of settings delegate.setProperty(key, value); diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/serverid/ServerIdManager.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/serverid/ServerIdManager.java index 700f7819c1e..f87fa6f23c2 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/serverid/ServerIdManager.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/serverid/ServerIdManager.java @@ -139,7 +139,8 @@ public class ServerIdManager implements Startable { } private void persistServerId(DbSession dbSession, ServerId serverId) { - dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(SERVER_ID).setValue(serverId.toString()), null, null); + dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(SERVER_ID).setValue(serverId.toString()), + null, null, null); } private void persistChecksum(DbSession dbSession, String checksump) { diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/serverid/ServerIdManagerTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/serverid/ServerIdManagerTest.java index 003c972b70e..97d28f89917 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/serverid/ServerIdManagerTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/serverid/ServerIdManagerTest.java @@ -345,7 +345,7 @@ public class ServerIdManagerTest { private void insertServerId(String serverId) { dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(CoreProperties.SERVER_ID).setValue(serverId), - null, null); + null, null, null); dbSession.commit(); } diff --git a/server/sonar-webserver-es/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java b/server/sonar-webserver-es/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java index 36d56d951bd..e7aba7949a5 100644 --- a/server/sonar-webserver-es/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java +++ b/server/sonar-webserver-es/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java @@ -173,7 +173,7 @@ public class PermissionIndexerDaoTest { .setRole(USER) .setComponentUuid(project.uuid()) .setComponentName(project.name()); - dbClient.groupPermissionDao().insert(dbSession, dto); + dbClient.groupPermissionDao().insert(dbSession, dto, project); } dbSession.commit(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/notification/ws/NotificationUpdater.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/notification/ws/NotificationUpdater.java index 60779ed731b..d19281c6d5c 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/notification/ws/NotificationUpdater.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/notification/ws/NotificationUpdater.java @@ -49,6 +49,7 @@ public class NotificationUpdater { String key = String.join(".", PROP_NOTIFICATION_PREFIX, dispatcher, channel); String projectUuid = project == null ? null : project.uuid(); String projectName = project == null ? null : project.name(); + String qualifier = project == null ? null : project.qualifier(); List existingNotification = dbClient.propertiesDao().selectByQuery( PropertyQuery.builder() @@ -67,7 +68,7 @@ public class NotificationUpdater { .setUserUuid(user.getUuid()) .setValue(PROP_NOTIFICATION_VALUE) .setComponentUuid(projectUuid), - user.getLogin(), projectName); + user.getLogin(), projectName, qualifier); } /** @@ -77,6 +78,7 @@ public class NotificationUpdater { String key = String.join(".", PROP_NOTIFICATION_PREFIX, dispatcher, channel); String projectUuid = project == null ? null : project.uuid(); String projectName = project == null ? null : project.name(); + String qualifier = project == null ? null : project.qualifier(); List existingNotification = dbClient.propertiesDao().selectByQuery( PropertyQuery.builder() @@ -93,7 +95,7 @@ public class NotificationUpdater { .setKey(key) .setUserUuid(user.getUuid()) .setValue(PROP_NOTIFICATION_VALUE) - .setComponentUuid(projectUuid), user.getLogin(), projectName); + .setComponentUuid(projectUuid), user.getLogin(), projectName, qualifier); } private static Predicate notificationScope(@Nullable ComponentDto project) { diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/GroupPermissionChanger.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/GroupPermissionChanger.java index 283042c2e2f..1b7b340e567 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/GroupPermissionChanger.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/GroupPermissionChanger.java @@ -131,7 +131,7 @@ public class GroupPermissionChanger { .map(GroupDto::getName) .ifPresent(addedDto::setGroupName); - dbClient.groupPermissionDao().insert(dbSession, addedDto); + dbClient.groupPermissionDao().insert(dbSession, addedDto, change.getProject()); return true; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/PermissionTemplateService.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/PermissionTemplateService.java index 1c5a3256dc4..76c8155e945 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/PermissionTemplateService.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/PermissionTemplateService.java @@ -126,8 +126,8 @@ public class PermissionTemplateService { } private void copyPermissions(DbSession dbSession, PermissionTemplateDto template, ComponentDto project, @Nullable String projectCreatorUserUuid) { - dbClient.groupPermissionDao().deleteByRootComponentUuid(dbSession, project.uuid(), project.name()); - dbClient.userPermissionDao().deleteProjectPermissions(dbSession, project.uuid(), project.name()); + dbClient.groupPermissionDao().deleteByRootComponentUuid(dbSession, project); + dbClient.userPermissionDao().deleteProjectPermissions(dbSession, project); List usersPermissions = dbClient.permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getUuid()); Map userDtoMap = dbClient.userDao().selectByUuids(dbSession, usersPermissions.stream().map(PermissionTemplateUserDto::getUserUuid).collect(Collectors.toSet())) @@ -155,7 +155,7 @@ public class PermissionTemplateService { .setRole(gp.getPermission()) .setComponentUuid(project.uuid()) .setComponentName(project.name()); - dbClient.groupPermissionDao().insert(dbSession, dto); + dbClient.groupPermissionDao().insert(dbSession, dto, null); }); List characteristics = dbClient.permissionTemplateCharacteristicDao().selectByTemplateUuids(dbSession, singletonList(template.getUuid())); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/UserPermissionChanger.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/UserPermissionChanger.java index 1a3de04965b..35edf77c0fb 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/UserPermissionChanger.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/UserPermissionChanger.java @@ -107,11 +107,10 @@ public class UserPermissionChanger { return false; } checkOtherAdminsExist(dbSession, change); - String projectUuid = change.getProjectUuid(); - String projectName = change.getProject() == null ? null : change.getProject().name(); - if (projectUuid != null) { + ComponentDto project = change.getProject(); + if (project != null) { dbClient.userPermissionDao().deleteProjectPermission(dbSession, change.getUserId().getUuid(), change.getPermission(), - projectUuid, projectName); + project); } else { dbClient.userPermissionDao().deleteGlobalPermission(dbSession, change.getUserId().getUuid(), change.getPermission()); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java index 0d8f6aa2640..b395be13fcc 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java @@ -151,7 +151,7 @@ public class UpdateVisibilityAction implements ProjectsWsAction { private void updatePermissionsToPrivate(DbSession dbSession, ComponentDto component) { // delete project permissions for group AnyOne - dbClient.groupPermissionDao().deleteByRootComponentUuidForAnyOne(dbSession, component.uuid(), component.name()); + dbClient.groupPermissionDao().deleteByRootComponentUuidForAnyOne(dbSession, component); // grant UserRole.CODEVIEWER and UserRole.USER to any group or user with at least one permission on project PUBLIC_PERMISSIONS.forEach(permission -> { dbClient.groupPermissionDao().selectGroupUuidsWithPermissionOnProjectBut(dbSession, component.uuid(), permission) @@ -174,15 +174,15 @@ public class UpdateVisibilityAction implements ProjectsWsAction { .setGroupUuid(groupUuid) .setGroupName(groupName) .setRole(permission) - .setComponentName(component.name())); + .setComponentName(component.name()), component); } private void updatePermissionsToPublic(DbSession dbSession, ComponentDto component) { PUBLIC_PERMISSIONS.forEach(permission -> { // delete project group permission for UserRole.CODEVIEWER and UserRole.USER - dbClient.groupPermissionDao().deleteByRootComponentUuidAndPermission(dbSession, component.uuid(), permission, component.name()); + dbClient.groupPermissionDao().deleteByRootComponentUuidAndPermission(dbSession, permission, component); // delete project user permission for UserRole.CODEVIEWER and UserRole.USER - dbClient.userPermissionDao().deleteProjectPermissionOfAnyUser(dbSession, component.uuid(), permission, component.name()); + dbClient.userPermissionDao().deleteProjectPermissionOfAnyUser(dbSession, permission, component); }); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SetAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SetAction.java index bfa2f5d524c..52237b4a733 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SetAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SetAction.java @@ -145,6 +145,7 @@ public class SetAction implements SettingsWsAction { private void doHandle(DbSession dbSession, SetRequest request) { Optional component = searchComponent(dbSession, request); String projectName = component.isPresent() ? component.get().name() : null; + String qualifier = component.isPresent() ? component.get().qualifier() : null; checkPermissions(component); PropertyDefinition definition = propertyDefinitions.get(request.getKey()); @@ -159,7 +160,7 @@ public class SetAction implements SettingsWsAction { validate(request); PropertyDto property = toProperty(request, component); value = property.getValue(); - dbClient.propertiesDao().saveProperty(dbSession, property, null, projectName); + dbClient.propertiesDao().saveProperty(dbSession, property, null, projectName, qualifier); } dbSession.commit(); @@ -177,17 +178,18 @@ public class SetAction implements SettingsWsAction { String key = persistedKey(request); String componentUuid = component.isPresent() ? component.get().uuid() : null; String componentName = component.isPresent() ? component.get().name() : null; + String qualifier = component.isPresent() ? component.get().qualifier() : null; deleteSettings(dbSession, component, key); dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey(key).setValue(inlinedFieldKeys) - .setComponentUuid(componentUuid), null, componentName); + .setComponentUuid(componentUuid), null, componentName, qualifier); List fieldValues = request.getFieldValues(); IntStream.of(fieldIds).boxed() .flatMap(i -> readOneFieldValues(fieldValues.get(i - 1), request.getKey()).entrySet().stream() .map(entry -> new KeyValue(key + "." + i + "." + entry.getKey(), entry.getValue()))) .forEach(keyValue -> dbClient.propertiesDao().saveProperty(dbSession, toFieldProperty(keyValue, componentUuid), - null, componentName)); + null, componentName, qualifier)); return inlinedFieldKeys; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SettingsUpdater.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SettingsUpdater.java index fe8f0973b1c..50ce79791d0 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SettingsUpdater.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SettingsUpdater.java @@ -75,7 +75,8 @@ public class SettingsUpdater { private void deleteSetting(DbSession dbSession, String settingKey, Optional componentDto) { if (componentDto.isPresent()) { - dbClient.propertiesDao().deleteProjectProperty(settingKey, componentDto.get().uuid(), dbSession, componentDto.get().name()); + dbClient.propertiesDao().deleteProjectProperty(dbSession, settingKey, componentDto.get().uuid(), componentDto.get().name(), + componentDto.get().qualifier()); } else { dbClient.propertiesDao().deleteGlobalProperty(settingKey, dbSession); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java index 097969e1ad3..be7e7c5d219 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java @@ -558,7 +558,7 @@ public class SearchProjectsActionTest { Stream.of(javaProject, markDownProject).forEach(this::addFavourite); index(); - addFavourite(null, null); + addFavourite(null, null, null); SearchProjectsWsResponse result = call(request.setFilter("isFavorite")); @@ -1342,12 +1342,12 @@ public class SearchProjectsActionTest { } private void addFavourite(ComponentDto project) { - addFavourite(project.uuid(), project.name()); + addFavourite(project.uuid(), project.name(), project.qualifier()); } - private void addFavourite(@Nullable String componentUuid, @Nullable String componentName) { + private void addFavourite(@Nullable String componentUuid, @Nullable String componentName, @Nullable String qualifier) { dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto().setKey("favourite") - .setComponentUuid(componentUuid).setUserUuid(userSession.getUuid()), userSession.getLogin(), componentName); + .setComponentUuid(componentUuid).setUserUuid(userSession.getUuid()), userSession.getLogin(), componentName, qualifier); dbSession.commit(); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java index 1ddb8a22a83..0c30faf1f31 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java @@ -1399,7 +1399,7 @@ public class SearchActionTest { .setGroupUuid(null) .setComponentUuid(project.uuid()) .setComponentName(project.name()) - .setRole(permission)); + .setRole(permission), project); session.commit(); userSession.logIn().addProjectPermission(permission, project); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/GroupPermissionChangerTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/GroupPermissionChangerTest.java index d0ea8c710c2..03435d3c93b 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/GroupPermissionChangerTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/GroupPermissionChangerTest.java @@ -434,7 +434,7 @@ public class GroupPermissionChangerTest { .setRole(perm) .setComponentUuid(privateProject.uuid()) .setComponentName(privateProject.name()); - db.getDbClient().groupPermissionDao().insert(db.getSession(), dto); + db.getDbClient().groupPermissionDao().insert(db.getSession(), dto, privateProject); db.commit(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java index d1b3b62f515..ecc8c918a5f 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/RemoveGroupActionTest.java @@ -476,7 +476,7 @@ public class RemoveGroupActionTest extends BasePermissionWsTest b.setKey("feature1").setUuid("xyz")); UserDto user = db.users().insertUser("obiwan"); propertyDbTester.insertProperty(new PropertyDto().setKey("favourite").setComponentUuid(project.uuid()).setUserUuid(user.getUuid()), - project.name(), user.getLogin()); + project.name(), project.qualifier(), user.getLogin()); userSession.logIn(user).addProjectPermission(UserRole.USER, project); init(); @@ -625,7 +625,7 @@ public class ComponentActionTest { when(resourceTypes.get(project.qualifier())).thenReturn(DefaultResourceTypes.get().getRootType()); UserDto user = db.users().insertUser("obiwan"); propertyDbTester.insertProperty(new PropertyDto().setKey("favourite").setComponentUuid(project.uuid()).setUserUuid(user.getUuid()), - project.name(), user.getLogin()); + project.name(), project.qualifier(), user.getLogin()); addQualityProfiles(project, createQProfile("qp1", "Sonar Way Java", "java"), createQProfile("qp2", "Sonar Way Xoo", "xoo")); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java index 8d98e05f7bb..7367088e9e0 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java @@ -143,9 +143,9 @@ public class DeactivateActionTest { logInAsSystemAdministrator(); UserDto user = db.users().insertUser(); ComponentDto project = db.components().insertPrivateProject(); - db.properties().insertProperty(newUserPropertyDto(user), null, user.getLogin()); - db.properties().insertProperty(newUserPropertyDto(user), null, user.getLogin()); - db.properties().insertProperty(newUserPropertyDto(user).setComponentUuid(project.uuid()), project.name(), user.getLogin()); + db.properties().insertProperty(newUserPropertyDto(user), null, null, user.getLogin()); + db.properties().insertProperty(newUserPropertyDto(user), null, null, user.getLogin()); + db.properties().insertProperty(newUserPropertyDto(user).setComponentUuid(project.uuid()), project.name(), project.qualifier(), user.getLogin()); deactivate(user.getLogin()); @@ -209,11 +209,11 @@ public class DeactivateActionTest { ComponentDto project = db.components().insertPrivateProject(); ComponentDto anotherProject = db.components().insertPrivateProject(); db.properties().insertProperty(new PropertyDto().setKey("sonar.issues.defaultAssigneeLogin").setValue(user.getLogin()) - .setComponentUuid(project.uuid()), project.name(), user.getLogin()); + .setComponentUuid(project.uuid()), project.name(), project.qualifier(), user.getLogin()); db.properties().insertProperty(new PropertyDto().setKey("sonar.issues.defaultAssigneeLogin").setValue(user.getLogin()) - .setComponentUuid(anotherProject.uuid()), anotherProject.name(), user.getLogin()); + .setComponentUuid(anotherProject.uuid()), anotherProject.name(), anotherProject.qualifier(), user.getLogin()); db.properties().insertProperty(new PropertyDto().setKey("other").setValue(user.getLogin()) - .setComponentUuid(anotherProject.uuid()), anotherProject.name(), user.getLogin()); + .setComponentUuid(anotherProject.uuid()), anotherProject.name(), anotherProject.qualifier(), user.getLogin()); deactivate(user.getLogin()); -- 2.39.5