]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4535 Split activateRule into two actions : create active rule and update severity
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 20 Dec 2013 12:54:49 +0000 (13:54 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 20 Dec 2013 12:54:49 +0000 (13:54 +0100)
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java
sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileOperationsTest.java
sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java

index 7660f581e2a3963a0179aa1f16935a4475c50e46..a34fdc69c4e3c12438f72b083ad2b7c2e3434dc4 100644 (file)
@@ -129,57 +129,53 @@ public class QProfileOperations implements ServerComponent {
     propertiesDao.setProperty(new PropertyDto().setKey(PROPERTY_PREFIX + qualityProfile.getLanguage()).setValue(qualityProfile.getName()));
   }
 
-  public RuleActivationResult activateRule(QualityProfileDto qualityProfile, Rule rule, String severity, UserSession userSession) {
+  public RuleActivationResult createActiveRule(QualityProfileDto qualityProfile, Rule rule, String severity, UserSession userSession) {
     checkPermission(userSession);
-
     SqlSession session = myBatis.openSession();
     try {
-      ActiveRuleDto activeRule = findActiveRule(qualityProfile, rule);
-      if (activeRule == null) {
-        activeRule = newActiveRule(qualityProfile, rule, severity, userSession, session);
-      } else {
-        updateSeverity(activeRule, severity, userSession, session);
+      ActiveRuleDto activeRule = new ActiveRuleDto()
+        .setProfileId(qualityProfile.getId())
+        .setRuleId(rule.getId())
+        .setSeverity(Severity.ordinal(severity));
+      activeRuleDao.insert(activeRule, session);
+
+      List<RuleParamDto> ruleParams = ruleDao.selectParameters(rule.getId(), session);
+      List<ActiveRuleParamDto> activeRuleParams = Lists.newArrayList();
+      for (RuleParamDto ruleParam : ruleParams) {
+        ActiveRuleParamDto activeRuleParam = new ActiveRuleParamDto()
+          .setActiveRuleId(activeRule.getId())
+          .setRulesParameterId(ruleParam.getId())
+          .setKey(ruleParam.getName())
+          .setValue(ruleParam.getDefaultValue());
+        activeRuleParams.add(activeRuleParam);
+        activeRuleDao.insert(activeRuleParam, session);
       }
+      session.commit();
+
+      ruleRegistry.save(activeRule, activeRuleParams);
+
+      profilesManager.activated(qualityProfile.getId(), activeRule.getId(), userSession.name());
       return new RuleActivationResult(QProfile.from(qualityProfile), profileRules.getFromActiveRuleId(activeRule.getId()));
     } finally {
       MyBatis.closeQuietly(session);
     }
   }
 
-  private ActiveRuleDto newActiveRule(QualityProfileDto qualityProfile, Rule rule, String severity, UserSession userSession, SqlSession session) {
-    ActiveRuleDto activeRuleDto = new ActiveRuleDto()
-      .setProfileId(qualityProfile.getId())
-      .setRuleId(rule.getId())
-      .setSeverity(Severity.ordinal(severity));
-    activeRuleDao.insert(activeRuleDto, session);
-
-    List<RuleParamDto> ruleParams = ruleDao.selectParameters(rule.getId(), session);
-    List<ActiveRuleParamDto> activeRuleParams = Lists.newArrayList();
-    for (RuleParamDto ruleParam : ruleParams) {
-      ActiveRuleParamDto activeRuleParam = new ActiveRuleParamDto()
-        .setActiveRuleId(activeRuleDto.getId())
-        .setRulesParameterId(ruleParam.getId())
-        .setKey(ruleParam.getName())
-        .setValue(ruleParam.getDefaultValue());
-      activeRuleParams.add(activeRuleParam);
-      activeRuleDao.insert(activeRuleParam, session);
-    }
-    session.commit();
-
-    ruleRegistry.save(activeRuleDto, activeRuleParams);
-
-    profilesManager.activated(qualityProfile.getId(), activeRuleDto.getId(), userSession.name());
-    return activeRuleDto;
-  }
-
-  private void updateSeverity(ActiveRuleDto activeRule, String newSeverity, UserSession userSession, SqlSession session) {
-    Integer oldSeverity = activeRule.getSeverity();
-    activeRule.setSeverity(Severity.ordinal(newSeverity));
-    activeRuleDao.update(activeRule, session);
-    session.commit();
+  public RuleActivationResult updateSeverity(QualityProfileDto qualityProfile, ActiveRuleDto activeRule, String newSeverity, UserSession userSession) {
+    checkPermission(userSession);
+    SqlSession session = myBatis.openSession();
+    try {
+      Integer oldSeverity = activeRule.getSeverity();
+      activeRule.setSeverity(Severity.ordinal(newSeverity));
+      activeRuleDao.update(activeRule, session);
+      session.commit();
 
-    profilesManager.ruleSeverityChanged(activeRule.getProfileId(), activeRule.getId(), RulePriority.valueOfInt(oldSeverity), RulePriority.valueOf(newSeverity),
-      userSession.name());
+      profilesManager.ruleSeverityChanged(activeRule.getProfileId(), activeRule.getId(), RulePriority.valueOfInt(oldSeverity), RulePriority.valueOf(newSeverity),
+        userSession.name());
+      return new RuleActivationResult(QProfile.from(qualityProfile), profileRules.getFromActiveRuleId(activeRule.getId()));
+    } finally {
+      MyBatis.closeQuietly(session);
+    }
   }
 
   public RuleActivationResult deactivateRule(QualityProfileDto qualityProfile, Rule rule, UserSession userSession) {
@@ -203,8 +199,6 @@ public class QProfileOperations implements ServerComponent {
   public void createActiveRuleParam(ActiveRuleDto activeRule, String key, String value, UserSession userSession) {
     checkPermission(userSession);
 
-    // TODO inheritance
-
     SqlSession session = myBatis.openSession();
     try {
       createActiveRuleParam(activeRule, key, value, session);
@@ -218,8 +212,6 @@ public class QProfileOperations implements ServerComponent {
   public void deleteActiveRuleParam(ActiveRuleDto activeRule, ActiveRuleParamDto activeRuleParam, UserSession userSession) {
     checkPermission(userSession);
 
-    // TODO inheritance
-
     SqlSession session = myBatis.openSession();
     try {
       activeRuleDao.deleteParameter(activeRuleParam.getId(), session);
@@ -233,8 +225,6 @@ public class QProfileOperations implements ServerComponent {
   public void updateActiveRuleParam(ActiveRuleDto activeRule, ActiveRuleParamDto activeRuleParam, String value, UserSession userSession) {
     checkPermission(userSession);
 
-    // TODO inheritance
-
     SqlSession session = myBatis.openSession();
     try {
       String sanitizedValue = Strings.emptyToNull(value);
index 37cc48b783e2734d4294c3fd0a535e9df9381845..0b7895e34ef8111310ad2fe9c659f8d509e24cb8 100644 (file)
@@ -193,7 +193,12 @@ public class QProfiles implements ServerComponent {
   public RuleActivationResult activateRule(int profileId, int ruleId, String severity) {
     QualityProfileDto qualityProfile = findNotNull(profileId);
     Rule rule = findRuleNotNull(ruleId);
-    return operations.activateRule(qualityProfile, rule, severity, UserSession.get());
+    ActiveRuleDto activeRule = findActiveRule(qualityProfile, rule);
+    if (activeRule == null) {
+      return operations.createActiveRule(qualityProfile, rule, severity, UserSession.get());
+    } else {
+      return operations.updateSeverity(qualityProfile, activeRule, severity, UserSession.get());
+    }
   }
 
   public RuleActivationResult deactivateRule(int profileId, int ruleId) {
@@ -311,6 +316,11 @@ public class QProfiles implements ServerComponent {
     return activeRule;
   }
 
+  @CheckForNull
+  private ActiveRuleDto findActiveRule(QualityProfileDto qualityProfile, Rule rule) {
+    return activeRuleDao.selectByProfileAndRule(qualityProfile.getId(), rule.getId());
+  }
+
   @CheckForNull
   private ActiveRuleParamDto findActiveRuleParam(int activeRuleId, String key) {
     return activeRuleDao.selectParamByActiveRuleAndKey(activeRuleId, key);
index 311676afffcb39fe2e54446fe2b9cefa846ccabf..c5d6faea816d4f2369e7958ec5a2cb1dbcabaefd 100644 (file)
@@ -249,7 +249,7 @@ public class QProfileOperationsTest {
     when(ruleDao.selectParameters(eq(10), eq(session))).thenReturn(newArrayList(new RuleParamDto().setId(20).setName("max").setDefaultValue("10")));
     when(profileRules.getFromActiveRuleId(anyInt())).thenReturn(mock(QProfileRule.class));
 
-    RuleActivationResult result = operations.activateRule(qualityProfile, rule, Severity.CRITICAL, MockUserSession.create().setName("nicolas").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN));
+    RuleActivationResult result = operations.createActiveRule(qualityProfile, rule, Severity.CRITICAL, MockUserSession.create().setName("nicolas").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN));
     assertThat(result.profile()).isNotNull();
     assertThat(result.rule()).isNotNull();
     assertThat(result.rule().activeRuleId()).isNotNull();
@@ -276,10 +276,9 @@ public class QProfileOperationsTest {
     Rule rule = Rule.create().setRepositoryKey("squid").setKey("AvoidCycle");
     rule.setId(10);
     ActiveRuleDto activeRule = new ActiveRuleDto().setId(5).setProfileId(1).setRuleId(10).setSeverity(1);
-    when(activeRuleDao.selectByProfileAndRule(1, 10)).thenReturn(activeRule);
     when(profileRules.getFromActiveRuleId(anyInt())).thenReturn(mock(QProfileRule.class));
 
-    RuleActivationResult result = operations.activateRule(qualityProfile, rule, Severity.MAJOR, MockUserSession.create().setName("nicolas").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN));
+    RuleActivationResult result = operations.updateSeverity(qualityProfile, activeRule, Severity.MAJOR, MockUserSession.create().setName("nicolas").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN));
     assertThat(result.profile()).isNotNull();
     assertThat(result.rule()).isNotNull();
     assertThat(result.rule().activeRuleId()).isNotNull();
index 6cbf76f2ec042ab10d449fefb8bb0c9f886981de..2376ba7101fea1f9f1d1aa7bdebe9286232a5449 100644 (file)
@@ -291,7 +291,7 @@ public class QProfilesTest {
 
     qProfiles.activateRule(1, 10, Severity.BLOCKER);
 
-    verify(service).activateRule(eq(qualityProfile), eq(rule), eq(Severity.BLOCKER), any(UserSession.class));
+    verify(service).createActiveRule(eq(qualityProfile), eq(rule), eq(Severity.BLOCKER), any(UserSession.class));
   }
 
   @Test
@@ -311,6 +311,23 @@ public class QProfilesTest {
     verifyZeroInteractions(service);
   }
 
+  @Test
+  public void update_severity() throws Exception {
+    QualityProfileDto qualityProfile = new QualityProfileDto().setId(1).setName("My profile").setLanguage("java");
+    when(qualityProfileDao.selectById(1)).thenReturn(qualityProfile);
+
+    ActiveRuleDto activeRule = new ActiveRuleDto().setId(5).setProfileId(1).setRuleId(10).setSeverity(1);
+    when(activeRuleDao.selectByProfileAndRule(1, 10)).thenReturn(activeRule);
+
+    Rule rule = Rule.create().setRepositoryKey("squid").setKey("AvoidCycle");
+    rule.setId(10);
+    when(ruleFinder.findById(10)).thenReturn(rule);
+
+    qProfiles.activateRule(1, 10, Severity.BLOCKER);
+
+    verify(service).updateSeverity(eq(qualityProfile), eq(activeRule), eq(Severity.BLOCKER), any(UserSession.class));
+  }
+
   @Test
   public void deactivate_rule() throws Exception {
     QualityProfileDto qualityProfile = new QualityProfileDto().setId(1).setName("My profile").setLanguage("java");