]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5056 Restore characteristics when restoring language
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 26 Mar 2014 15:29:23 +0000 (16:29 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 26 Mar 2014 15:29:23 +0000 (16:29 +0100)
sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java
sonar-server/src/test/java/org/sonar/server/debt/DebtModelBackupTest.java

index 4233730383e8aae6fba3cd3e1e0d0cde03b16dd7..9568feb3a02ab21c8733a90cf966fe2d2e8cafbb 100644 (file)
@@ -126,88 +126,58 @@ public class DebtModelBackup implements ServerComponent {
   }
 
   /**
-   * Restore from provided model (characteristics and rule debt are restored)
+   * Restore from provided model
    */
   public void restore() {
-    checkPermission();
-
-    Date updateDate = new Date(system2.now());
-    SqlSession session = mybatis.openSession();
-    try {
-      restoreCharacteristics(loadModelFromPlugin(DebtModelPluginRepository.DEFAULT_MODEL), updateDate, session);
-      restoreProvidedModel(ruleDao.selectEnablesAndNonManual(session), updateDate, session);
-      session.commit();
-    } finally {
-      MyBatis.closeQuietly(session);
-    }
+    restoreProvidedModel(null);
   }
 
   /**
-   * Restore from plugins providing rules for a given language (only debt of rules on given language are restored)
+   * Restore from plugins providing rules for a given language
    */
   public void restore(final String languageKey) {
+    restoreProvidedModel(languageKey);
+  }
+
+  private void restoreProvidedModel(@Nullable String languageKey) {
     checkPermission();
 
     Date updateDate = new Date(system2.now());
     SqlSession session = mybatis.openSession();
     try {
-      List<RuleDto> rules = newArrayList(Iterables.filter(ruleDao.selectEnablesAndNonManual(session), new Predicate<RuleDto>() {
-        @Override
-        public boolean apply(@Nullable RuleDto input) {
-          return input != null && languageKey.equals(input.getLanguage());
-        }
-      }));
-      restoreProvidedModel(rules, updateDate, session);
+      restoreCharacteristics(loadModelFromPlugin(DebtModelPluginRepository.DEFAULT_MODEL), updateDate, session);
+      for (RuleDto rule : rules(languageKey, session)) {
+        disabledRuleDebt(rule, updateDate, session);
+      }
       session.commit();
     } finally {
       MyBatis.closeQuietly(session);
     }
   }
 
-  private void restoreProvidedModel(List<RuleDto> rules, Date updateDate, SqlSession session) {
-    for (RuleDto rule : rules) {
-      disabledRuleDebt(rule, updateDate, session);
-    }
-  }
-
   /**
    * Restore model from a given XML model (characteristics and rule debt are restored from XML)
    */
   public ValidationMessages restoreFromXml(String xml) {
-    checkPermission();
-
-    ValidationMessages validationMessages = ValidationMessages.create();
-    Date updateDate = new Date(system2.now());
-    SqlSession session = mybatis.openSession();
-    try {
-      List<CharacteristicDto> characteristicDtos = restoreCharacteristics(characteristicsXMLImporter.importXML(xml), updateDate, session);
-      restoreRules(characteristicDtos, ruleDao.selectEnablesAndNonManual(session), rulesXMLImporter.importXML(xml, validationMessages), validationMessages, updateDate, session);
-
-      session.commit();
-    } finally {
-      MyBatis.closeQuietly(session);
-    }
-    return validationMessages;
+    return restoreXmlModel(xml, null);
   }
 
   /**
    * Restore model from a given XML model and a given language (only debt of rules on given language are restored from XML)
    */
   public ValidationMessages restoreFromXml(String xml, final String languageKey) {
+    return restoreXmlModel(xml, languageKey);
+  }
+
+  private ValidationMessages restoreXmlModel(String xml, @Nullable final String languageKey) {
     checkPermission();
 
     ValidationMessages validationMessages = ValidationMessages.create();
     Date updateDate = new Date(system2.now());
     SqlSession session = mybatis.openSession();
     try {
-      List<CharacteristicDto> characteristicDtos = dao.selectEnabledCharacteristics(session);
-      List<RuleDto> rules = newArrayList(Iterables.filter(ruleDao.selectEnablesAndNonManual(session), new Predicate<RuleDto>() {
-        @Override
-        public boolean apply(@Nullable RuleDto input) {
-          return input != null && languageKey.equals(input.getLanguage());
-        }
-      }));
-      restoreRules(characteristicDtos, rules, rulesXMLImporter.importXML(xml, validationMessages), validationMessages, updateDate, session);
+      List<CharacteristicDto> characteristicDtos = restoreCharacteristics(characteristicsXMLImporter.importXML(xml), updateDate, session);
+      restoreRules(characteristicDtos, rules(languageKey, session), rulesXMLImporter.importXML(xml, validationMessages), validationMessages, updateDate, session);
 
       session.commit();
     } finally {
@@ -227,12 +197,16 @@ public class DebtModelBackup implements ServerComponent {
         if (characteristicDto == null) {
           disabledRuleDebt(rule, updateDate, session);
         } else {
-          boolean isSameCharacteristic = characteristicDto.getId().equals(rule.getDefaultCharacteristicId());
-          boolean isSameFunction = isSameRemediationFunction(ruleDebt, rule);
-          rule.setCharacteristicId(!isSameCharacteristic ? characteristicDto.getId() : null);
-          rule.setRemediationFunction(!isSameFunction ? ruleDebt.function().name() : null);
-          rule.setRemediationCoefficient(!isSameFunction ? ruleDebt.coefficient() : null);
-          rule.setRemediationOffset(!isSameFunction ? ruleDebt.offset() : null);
+          boolean isSameCharacteristicAsDefault = characteristicDto.getId().equals(rule.getDefaultCharacteristicId());
+          boolean isSameFunctionAsDefault = isSameRemediationFunction(ruleDebt, rule);
+          // If given characteristic is the same as the default one, set nothing in overridden characteristic
+          rule.setCharacteristicId(!isSameCharacteristicAsDefault ? characteristicDto.getId() : null);
+
+          // If given function is the same as the default one, set nothing in overridden function
+          rule.setRemediationFunction(!isSameFunctionAsDefault ? ruleDebt.function().name() : null);
+          rule.setRemediationCoefficient(!isSameFunctionAsDefault ? ruleDebt.coefficient() : null);
+          rule.setRemediationOffset(!isSameFunctionAsDefault ? ruleDebt.offset() : null);
+
           rule.setUpdatedAt(updateDate);
           ruleDao.update(rule, session);
           // TODO index rules in E/S
@@ -316,6 +290,20 @@ public class DebtModelBackup implements ServerComponent {
     }
   }
 
+  private List<RuleDto> rules(@Nullable final String languageKey, SqlSession session) {
+    List<RuleDto> rules = ruleDao.selectEnablesAndNonManual(session);
+    if (languageKey == null) {
+      return rules;
+    } else {
+      return newArrayList(Iterables.filter(rules, new Predicate<RuleDto>() {
+        @Override
+        public boolean apply(@Nullable RuleDto input) {
+          return input != null && languageKey.equals(input.getLanguage());
+        }
+      }));
+    }
+  }
+
   @CheckForNull
   private static RuleDebt ruleDebtByRule(final RuleDto rule, List<RuleDebt> ruleDebts) {
     if (ruleDebts.isEmpty()) {
index cc0fcf31bacfd1464ed3dfbdcaef918d0e528fa0..642a934ebfa3b0fdc6c8b3a6ed1b1b9d71f50a96 100644 (file)
@@ -593,6 +593,10 @@ public class DebtModelBackupTest {
 
   @Test
   public void restore_from_xml_and_language() throws Exception {
+    when(characteristicsXMLImporter.importXML(anyString())).thenReturn(new DebtModel()
+      .addRootCharacteristic(new DefaultDebtCharacteristic().setKey("PORTABILITY").setName("Portability").setOrder(1))
+      .addSubCharacteristic(new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY"));
+
     when(dao.selectEnabledCharacteristics(session)).thenReturn(newArrayList(
       new CharacteristicDto().setId(1).setKey("PORTABILITY").setName("Portability").setOrder(1).setCreatedAt(oldDate),
       new CharacteristicDto().setId(2).setKey("COMPILER").setName("Compiler").setParentId(1).setCreatedAt(oldDate)));
@@ -612,9 +616,6 @@ public class DebtModelBackupTest {
 
     debtModelBackup.restoreFromXml("<xml/>", "java");
 
-    verify(characteristicsXMLImporter, never()).importXML(anyString());
-    verify(dao, never()).update(any(CharacteristicDto.class), eq(session));
-
     verify(ruleDao).selectEnablesAndNonManual(session);
     verify(ruleDao).update(ruleArgument.capture(), eq(session));
     verifyNoMoreInteractions(ruleDao);
@@ -627,6 +628,10 @@ public class DebtModelBackupTest {
 
   @Test
   public void restore_from_xml_and_language_with_rule_not_in_xml_and_linked_on_disabled_default_characteristic() throws Exception {
+    when(characteristicsXMLImporter.importXML(anyString())).thenReturn(new DebtModel()
+      .addRootCharacteristic(new DefaultDebtCharacteristic().setKey("PORTABILITY").setName("Portability").setOrder(1))
+      .addSubCharacteristic(new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY"));
+
     when(dao.selectEnabledCharacteristics(session)).thenReturn(newArrayList(
       new CharacteristicDto().setId(1).setKey("PORTABILITY").setName("Portability updated").setOrder(2).setCreatedAt(oldDate),
       new CharacteristicDto().setId(2).setKey("COMPILER").setName("Compiler updated").setParentId(1).setCreatedAt(oldDate)
@@ -643,9 +648,6 @@ public class DebtModelBackupTest {
 
     debtModelBackup.restoreFromXml("<xml/>", "java");
 
-    verify(characteristicsXMLImporter, never()).importXML(anyString());
-    verify(dao, never()).update(any(CharacteristicDto.class), eq(session));
-
     verify(ruleDao).selectEnablesAndNonManual(session);
     verify(ruleDao).update(ruleArgument.capture(), eq(session));
     verifyNoMoreInteractions(ruleDao);
@@ -663,6 +665,10 @@ public class DebtModelBackupTest {
 
   @Test
   public void restore_from_xml_and_language_with_rule_linked_on_disabled_characteristic2() throws Exception {
+    when(characteristicsXMLImporter.importXML(anyString())).thenReturn(new DebtModel()
+      .addRootCharacteristic(new DefaultDebtCharacteristic().setKey("PORTABILITY").setName("Portability").setOrder(1))
+      .addSubCharacteristic(new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY"));
+
     when(dao.selectEnabledCharacteristics(session)).thenReturn(newArrayList(
       new CharacteristicDto().setId(1).setKey("PORTABILITY").setName("Portability updated").setOrder(2).setCreatedAt(oldDate),
       new CharacteristicDto().setId(2).setKey("COMPILER").setName("Compiler updated").setParentId(1).setCreatedAt(oldDate)
@@ -681,9 +687,6 @@ public class DebtModelBackupTest {
 
     debtModelBackup.restoreFromXml("<xml/>", "java");
 
-    verify(characteristicsXMLImporter, never()).importXML(anyString());
-    verify(dao, never()).update(any(CharacteristicDto.class), eq(session));
-
     verify(ruleDao).selectEnablesAndNonManual(session);
     verify(ruleDao).update(ruleArgument.capture(), eq(session));
     verifyNoMoreInteractions(ruleDao);