diff options
author | Eric Hartmann <hartmann.eric@gmail.com> | 2017-12-07 16:55:49 +0100 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2017-12-14 17:03:35 +0100 |
commit | 30885bbdcb12462ba870113f7435ac78f6507f9c (patch) | |
tree | f05a34206fd0adbfd630c0d6d62cdb90e04c4fcd /server | |
parent | 3365d9c48f13c2d47a5d4e119a53a61dc5eb6ce8 (diff) | |
download | sonarqube-30885bbdcb12462ba870113f7435ac78f6507f9c.tar.gz sonarqube-30885bbdcb12462ba870113f7435ac78f6507f9c.zip |
SONAR-10147 Remove 'sonar.qualitygate' setting usage to store default quality gate
Diffstat (limited to 'server')
6 files changed, 42 insertions, 76 deletions
diff --git a/server/sonar-db-dao/src/test/resources/org/sonar/db/qualitygate/ProjectQgateAssociationDaoTest/shared.xml b/server/sonar-db-dao/src/test/resources/org/sonar/db/qualitygate/ProjectQgateAssociationDaoTest/shared.xml index 830b74c8798..081048e62f7 100644 --- a/server/sonar-db-dao/src/test/resources/org/sonar/db/qualitygate/ProjectQgateAssociationDaoTest/shared.xml +++ b/server/sonar-db-dao/src/test/resources/org/sonar/db/qualitygate/ProjectQgateAssociationDaoTest/shared.xml @@ -118,12 +118,6 @@ id="8" private="[false]"/> - <properties id="1" - prop_key="sonar.qualitygate" - resource_id="[null]" - is_empty="[false]" - text_value="43" - created_at="1555000"/> <properties id="2" prop_key="sonar.qualitygate" resource_id="1" diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java index d4306095d56..32744f1de84 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGateUpdater.java @@ -19,23 +19,18 @@ */ package org.sonar.server.qualitygate; -import javax.annotation.Nullable; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.property.PropertyDto; import org.sonar.db.qualitygate.QualityGateConditionDto; import org.sonar.db.qualitygate.QualityGateDto; import static com.google.common.base.Preconditions.checkArgument; import static org.sonar.server.util.Validation.IS_ALREADY_USED_MESSAGE; -import static org.sonar.server.ws.WsUtils.checkFound; public class QualityGateUpdater { - public static final String SONAR_QUALITYGATE_PROPERTY = "sonar.qualitygate"; - private final DbClient dbClient; private final UuidFactory uuidFactory; @@ -73,15 +68,9 @@ public class QualityGateUpdater { checkQualityGateDoesNotAlreadyExist(dbSession, organizationDto, name); } - public void setDefault(DbSession dbSession, @Nullable QualityGateDto qualityGateDto) { - if (qualityGateDto == null) { - dbClient.propertiesDao().deleteGlobalProperty(SONAR_QUALITYGATE_PROPERTY, dbSession); - } else { - long qualityGateId = qualityGateDto.getId(); - checkFound(dbClient.qualityGateDao().selectById(dbSession, qualityGateId), "There is no quality gate with id=" + qualityGateId); - dbClient.propertiesDao().saveProperty(dbSession, - new PropertyDto().setKey(SONAR_QUALITYGATE_PROPERTY).setValue(qualityGateDto.getId().toString())); - } + public void setDefault(DbSession dbSession, OrganizationDto organizationDto, QualityGateDto qualityGateDto) { + organizationDto.setDefaultQualityGateUuid(qualityGateDto.getUuid()); + dbClient.qualityGateDao().update(qualityGateDto, dbSession); } private void checkQualityGateDoesNotAlreadyExist(DbSession dbSession, OrganizationDto organizationDto, String name) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java index 59cd8971aa5..0df8928ded6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java @@ -19,14 +19,12 @@ */ package org.sonar.server.qualitygate; -import javax.annotation.Nullable; import org.sonar.api.web.UserRole; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.component.ComponentDto; import org.sonar.db.permission.OrganizationPermission; import org.sonar.db.property.PropertiesDao; -import org.sonar.db.property.PropertyDto; import org.sonar.db.qualitygate.QualityGateDao; import org.sonar.db.qualitygate.QualityGateDto; import org.sonar.server.exceptions.NotFoundException; @@ -57,33 +55,6 @@ public class QualityGates { this.organizationProvider = organizationProvider; } - /** - * Use {@link QualityGateUpdater#setDefault(DbSession, QualityGateDto)} - * @deprecated - */ - @Deprecated - public void setDefault(DbSession dbSession, @Nullable Long idToUseAsDefault) { - checkIsQualityGateAdministrator(); - if (idToUseAsDefault == null) { - propertiesDao.deleteGlobalProperty(SONAR_QUALITYGATE_PROPERTY, dbSession); - } else { - QualityGateDto newDefault = getNonNullQgate(dbSession, idToUseAsDefault); - propertiesDao.saveProperty(dbSession, new PropertyDto().setKey(SONAR_QUALITYGATE_PROPERTY).setValue(newDefault.getId().toString())); - } - } - - /** - * Use {@link QualityGateUpdater#setDefault(DbSession, QualityGateDto)} - * @deprecated - */ - @Deprecated - public void setDefault(@Nullable Long idToUseAsDefault) { - try (DbSession dbSession = dbClient.openSession(false)) { - setDefault(dbSession, idToUseAsDefault); - dbSession.commit(); - } - } - public void dissociateProject(DbSession dbSession, ComponentDto project) { checkProjectAdmin(project); propertiesDao.deleteProjectProperty(SONAR_QUALITYGATE_PROPERTY, project.getId(), dbSession); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java index ea7a71ce3bb..97d2bdb3347 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/RegisterQualityGates.java @@ -98,12 +98,6 @@ public class RegisterQualityGates implements Startable { builtin = createQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); } - // Set builtin as default if there is no default - if (!qualityGateFinder.getDefault(dbSession).isPresent()) { - LOGGER.info("Built-in quality gate [{}] has been set as default", BUILTIN_QUALITY_GATE_NAME); - qualityGateUpdater.setDefault(dbSession, builtin); - } - // Set builtin if missing if (!builtin.isBuiltIn()) { builtin.setBuiltIn(true); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/SetAsDefaultAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/SetAsDefaultAction.java index 823d7ced164..54f1f9d0cbe 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/SetAsDefaultAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/SetAsDefaultAction.java @@ -22,14 +22,36 @@ package org.sonar.server.qualitygate.ws; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; -import org.sonar.server.qualitygate.QualityGates; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; +import org.sonar.db.organization.OrganizationDto; +import org.sonar.db.qualitygate.QualityGateDto; +import org.sonar.server.qualitygate.QualityGateFinder; +import org.sonar.server.qualitygate.QualityGateUpdater; +import org.sonar.server.user.UserSession; + +import static com.google.common.base.Preconditions.checkArgument; +import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES; +import static org.sonar.server.qualitygate.ws.QualityGatesWs.parseId; +import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID; +import static org.sonar.server.ws.WsUtils.writeProtobuf; +import static org.sonarqube.ws.Qualitygates.QualityGate.newBuilder; public class SetAsDefaultAction implements QualityGatesWsAction { - private final QualityGates qualityGates; + private final DbClient dbClient; + private final UserSession userSession; + private final QualityGateUpdater qualityGateUpdater; + private final QualityGateFinder qualityGateFinder; + private final QualityGatesWsSupport wsSupport; - public SetAsDefaultAction(QualityGates qualityGates) { - this.qualityGates = qualityGates; + public SetAsDefaultAction(DbClient dbClient, UserSession userSession, QualityGateUpdater qualityGateUpdater, + QualityGateFinder qualityGateFinder, QualityGatesWsSupport qualityGatesWsSupport) { + this.dbClient = dbClient; + this.userSession = userSession; + this.qualityGateUpdater = qualityGateUpdater; + this.qualityGateFinder = qualityGateFinder; + this.wsSupport = qualityGatesWsSupport; } @Override @@ -45,11 +67,23 @@ public class SetAsDefaultAction implements QualityGatesWsAction { .setDescription("ID of the quality gate to set as default") .setRequired(true) .setExampleValue("1"); + + wsSupport.createOrganizationParam(action); } @Override public void handle(Request request, Response response) { - qualityGates.setDefault(QualityGatesWs.parseId(request, QualityGatesWsParameters.PARAM_ID)); + Long id = parseId(request, PARAM_ID); + + try (DbSession dbSession = dbClient.openSession(false)) { + OrganizationDto organization = wsSupport.getOrganization(dbSession, request); + userSession.checkPermission(ADMINISTER_QUALITY_GATES, organization); + QualityGateDto qualityGate = qualityGateFinder.getByOrganizationAndId(dbSession, organization, id); + organization.setDefaultQualityGateUuid(qualityGate.getUuid()); + dbClient.organizationDao().update(dbSession, organization); + dbSession.commit(); + } + response.noContent(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java index ce5f18f1061..03e795f5ecb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java @@ -83,20 +83,4 @@ public class QualityGatesTest { userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organizationProvider.get().getUuid()); } - - @Test - public void should_select_default_qgate() { - long defaultId = QUALITY_GATE_ID; - String defaultName = "Default Name"; - when(dao.selectById(dbSession, defaultId)).thenReturn(new QualityGateDto().setId(defaultId).setName(defaultName)); - - underTest.setDefault(defaultId); - - verify(dao).selectById(dbSession, defaultId); - ArgumentCaptor<PropertyDto> propertyCaptor = ArgumentCaptor.forClass(PropertyDto.class); - verify(propertiesDao).saveProperty(any(DbSession.class), propertyCaptor.capture()); - - assertThat(propertyCaptor.getValue().getKey()).isEqualTo("sonar.qualitygate"); - assertThat(propertyCaptor.getValue().getValue()).isEqualTo("42"); - } } |