diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java index e52750da6f23..5a5744e5e4f0 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java @@ -32,30 +32,23 @@ import org.sonar.db.organization.OrganizationDto; import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Optional.*; import static org.sonar.db.DatabaseUtils.executeLargeInputs; public class RuleDao implements Dao { public Optional selectByKey(DbSession session, OrganizationDto organization, RuleKey key) { - return selectByKey(session, organization.getUuid(), key); - } - - /** - * @deprecated use {@link #selectByKey(DbSession, OrganizationDto, RuleKey)} - */ - @Deprecated - public Optional selectByKey(DbSession session, String organizationUuid, RuleKey key) { - RuleDto res = mapper(session).selectByKey(organizationUuid, key); - ensureOrganizationIsSet(organizationUuid, res); - return Optional.ofNullable(res); + RuleDto res = mapper(session).selectByKey(organization.getUuid(), key); + ensureOrganizationIsSet(organization.getUuid(), res); + return ofNullable(res); } public Optional selectDefinitionByKey(DbSession session, RuleKey key) { - return Optional.ofNullable(mapper(session).selectDefinitionByKey(key)); + return ofNullable(mapper(session).selectDefinitionByKey(key)); } - public java.util.Optional selectMetadataByKey(DbSession session, RuleKey key, OrganizationDto organization) { - return java.util.Optional.ofNullable(mapper(session).selectMetadataByKey(key, organization.getUuid())); + public Optional selectMetadataByKey(DbSession session, RuleKey key, OrganizationDto organization) { + return ofNullable(mapper(session).selectMetadataByKey(key, organization.getUuid())); } public RuleDto selectOrFailByKey(DbSession session, OrganizationDto organization, RuleKey key) { @@ -78,11 +71,11 @@ public RuleDefinitionDto selectOrFailDefinitionByKey(DbSession session, RuleKey public Optional selectById(long id, String organizationUuid, DbSession session) { RuleDto res = mapper(session).selectById(organizationUuid, id); ensureOrganizationIsSet(organizationUuid, res); - return Optional.ofNullable(res); + return ofNullable(res); } public Optional selectDefinitionById(long id, DbSession session) { - return Optional.ofNullable(mapper(session).selectDefinitionById(id)); + return ofNullable(mapper(session).selectDefinitionById(id)); } public List selectByIds(DbSession session, String organizationUuid, List ids) { diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java index 3796587ccd0e..a79d4d7c1410 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Optional; import org.apache.ibatis.session.ResultHandler; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -57,14 +58,20 @@ public class RuleDaoTest { public DbTester dbTester = DbTester.create(System2.INSTANCE); private RuleDao underTest = dbTester.getDbClient().ruleDao(); + private OrganizationDto organization; + + @Before + public void before() { + organization = dbTester.organizations().insert(o -> o.setUuid(ORGANIZATION_UUID)); + } @Test public void selectByKey() { dbTester.prepareDbUnit(getClass(), "shared.xml"); - assertThat(underTest.selectByKey(dbTester.getSession(), ORGANIZATION_UUID, RuleKey.of("NOT", "FOUND")).isPresent()).isFalse(); + assertThat(underTest.selectByKey(dbTester.getSession(), organization, RuleKey.of("NOT", "FOUND")).isPresent()).isFalse(); - Optional rule = underTest.selectByKey(dbTester.getSession(), ORGANIZATION_UUID, RuleKey.of("java", "S001")); + Optional rule = underTest.selectByKey(dbTester.getSession(), organization, RuleKey.of("java", "S001")); assertThat(rule.isPresent()).isTrue(); assertThat(rule.get().getId()).isEqualTo(1); } @@ -73,7 +80,7 @@ public void selectByKey() { public void selectByKey_populates_organizationUuid_even_when_organization_has_no_metadata() { dbTester.prepareDbUnit(getClass(), "shared.xml"); - assertThat(underTest.selectByKey(dbTester.getSession(), ORGANIZATION_UUID, RuleKey.of("java", "S001")).get().getOrganizationUuid()) + assertThat(underTest.selectByKey(dbTester.getSession(), organization, RuleKey.of("java", "S001")).get().getOrganizationUuid()) .isEqualTo(ORGANIZATION_UUID); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java b/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java index fcaf87bd8b85..ffe7267bc91b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java @@ -36,6 +36,7 @@ import org.sonar.api.rules.RulePriority; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDao; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleParamDto; @@ -99,7 +100,10 @@ public Collection findByKeys(Collection ruleK @CheckForNull public org.sonar.api.rules.Rule findByKey(RuleKey key) { try (DbSession dbSession = dbClient.openSession(false)) { - Optional rule = ruleDao.selectByKey(dbSession, defaultOrganizationProvider.get().getUuid(), key); + String defaultOrganizationUuid = defaultOrganizationProvider.get().getUuid(); + OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid) + .orElseThrow(() -> new IllegalStateException(String.format("Cannot find default organization '%s'", defaultOrganizationUuid))); + Optional rule = ruleDao.selectByKey(dbSession, defaultOrganization, key); if (rule.isPresent() && rule.get().getStatus() != RuleStatus.REMOVED) { return toRule(rule.get(), ruleDao.selectRuleParamsByRuleKey(dbSession, rule.get().getKey())); } else { diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java index cde36668bd8b..b0aa25af050f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java @@ -25,9 +25,7 @@ import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; -import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.OrganizationFlags; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.rule.index.RuleIndexer; @@ -39,16 +37,13 @@ public class RuleDeleter { private final RuleIndexer ruleIndexer; private final DbClient dbClient; private final RuleActivator ruleActivator; - private final DefaultOrganizationProvider defaultOrganizationProvider; private final OrganizationFlags organizationFlags; - public RuleDeleter(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, RuleActivator ruleActivator, DefaultOrganizationProvider defaultOrganizationProvider, - OrganizationFlags organizationFlags) { + public RuleDeleter(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, RuleActivator ruleActivator, OrganizationFlags organizationFlags) { this.system2 = system2; this.ruleIndexer = ruleIndexer; this.dbClient = dbClient; this.ruleActivator = ruleActivator; - this.defaultOrganizationProvider = defaultOrganizationProvider; this.organizationFlags = organizationFlags; } @@ -61,10 +56,6 @@ public void delete(RuleKey ruleKey) { throw new IllegalStateException("Only custom rules can be deleted"); } - String defaultOrganizationUuid = defaultOrganizationProvider.get().getUuid(); - OrganizationDto organization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid) - .orElseThrow(() -> new IllegalStateException(String.format("Default organization not found for uuid '%s'", defaultOrganizationUuid))); - // For custom rule, first deactivate the rule on all profiles if (rule.getTemplateId() != null) { ruleActivator.deactivateOfAllOrganizations(dbSession, rule); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java index dda7ce5056c3..f350e50de41b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java @@ -46,7 +46,6 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleParamDto; -import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.user.UserSession; @@ -62,13 +61,11 @@ public class RuleUpdater { private final DbClient dbClient; private final RuleIndexer ruleIndexer; private final System2 system; - private final DefaultOrganizationProvider defaultOrganizationProvider; - public RuleUpdater(DbClient dbClient, RuleIndexer ruleIndexer, System2 system, DefaultOrganizationProvider defaultOrganizationProvider) { + public RuleUpdater(DbClient dbClient, RuleIndexer ruleIndexer, System2 system) { this.dbClient = dbClient; this.ruleIndexer = ruleIndexer; this.system = system; - this.defaultOrganizationProvider = defaultOrganizationProvider; } /** diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java index 148d6eaffa3b..532e3b2ef13c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java @@ -85,7 +85,7 @@ public class UpdateActionTest { private Languages languages = new Languages(); private RuleMapper mapper = new RuleMapper(languages, macroInterpreter); private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient); - private RuleUpdater ruleUpdater = new RuleUpdater(dbClient, ruleIndexer, System2.INSTANCE, defaultOrganizationProvider); + private RuleUpdater ruleUpdater = new RuleUpdater(dbClient, ruleIndexer, System2.INSTANCE); private RuleWsSupport ruleWsSupport = new RuleWsSupport(dbClient, userSession, defaultOrganizationProvider); private WsAction underTest = new UpdateAction(dbClient, ruleUpdater, mapper, userSession, ruleWsSupport, defaultOrganizationProvider); private WsActionTester actionTester = new WsActionTester(underTest);