]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3879 Moved status constant to Rule. Removed Rule status enumeration.
authorJulien Lancelot <julien.lancelot@gmail.com>
Mon, 25 Mar 2013 12:29:14 +0000 (13:29 +0100)
committerJulien Lancelot <julien.lancelot@gmail.com>
Mon, 25 Mar 2013 12:29:27 +0000 (13:29 +0100)
14 files changed:
sonar-check-api/src/main/java/org/sonar/check/Rule.java
sonar-core/src/main/java/org/sonar/core/rule/DefaultRuleFinder.java
sonar-core/src/main/java/org/sonar/core/rule/RuleStatus.java [deleted file]
sonar-core/src/main/java/org/sonar/jpa/dao/RulesDao.java
sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java
sonar-core/src/test/java/org/sonar/core/rule/RuleStatusTest.java [deleted file]
sonar-plugin-api/src/main/java/org/sonar/api/resources/AbstractLanguage.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Java.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/Rule.java
sonar-plugin-api/src/test/java/org/sonar/api/rules/AnnotationRuleParserTest.java
sonar-plugin-api/src/test/java/org/sonar/api/rules/RuleTest.java
sonar-server/src/main/java/org/sonar/server/configuration/RulesBackup.java
sonar-server/src/main/java/org/sonar/server/startup/RegisterRules.java
sonar-server/src/test/java/org/sonar/server/startup/RegisterRulesTest.java

index ef62eaa66e4149a7ee5aecf746964b5c05e1dcff..5c01708bbfe3f21d718aa283c3f6be37e9dda933 100644 (file)
@@ -31,10 +31,6 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 public @interface Rule {
 
-  public static final String STATUS_BETA = "BETA";
-  public static final String STATUS_DEPRECATED = "DEPRECATED";
-  public static final String STATUS_READY = "READY";
-
   /**
    * The default key is the class name.
    */
@@ -66,7 +62,7 @@ public @interface Rule {
   Cardinality cardinality() default Cardinality.SINGLE;
 
   /**
-   * The rule status. Can be READY, BETA or DEPRECATED
+   * The status. Can be READY, BETA or DEPRECATED
    * @since 3.6
    */
   String status() default "READY";
index f38d92caddedcda30b8980f943cff1d86dc27ab8..f394dd2cfbe298c770e86afbe13c7b4e6bf84b0b 100644 (file)
@@ -50,7 +50,7 @@ public class DefaultRuleFinder implements RuleFinder {
     return (Rule) session.getSingleResult(
         session.createQuery("FROM " + Rule.class.getSimpleName() + " r WHERE r.id=:id and r.status<>:status")
             .setParameter("id", ruleId)
-            .setParameter("status", RuleStatus.REMOVED.name()
+            .setParameter("status", Rule.STATUS_REMOVED
             ),
         null);
   }
@@ -65,7 +65,7 @@ public class DefaultRuleFinder implements RuleFinder {
         session.createQuery("FROM " + Rule.class.getSimpleName() + " r WHERE r.key=:key and r.pluginName=:pluginName and r.status<>:status")
             .setParameter("key", key)
             .setParameter("pluginName", repositoryKey)
-            .setParameter("status", RuleStatus.REMOVED.name()
+            .setParameter("status", Rule.STATUS_REMOVED
             ),
         null);
   }
@@ -84,7 +84,7 @@ public class DefaultRuleFinder implements RuleFinder {
   private Query createHqlQuery(DatabaseSession session, RuleQuery query) {
     StringBuilder hql = new StringBuilder().append("from ").append(Rule.class.getSimpleName()).append(" where status<>:status ");
     Map<String, Object> params = new HashMap<String, Object>();
-    params.put("status", RuleStatus.REMOVED.name());
+    params.put("status", Rule.STATUS_REMOVED);
     if (StringUtils.isNotBlank(query.getRepositoryKey())) {
       hql.append("AND pluginName=:repositoryKey ");
       params.put("repositoryKey", query.getRepositoryKey());
diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleStatus.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleStatus.java
deleted file mode 100644 (file)
index 6cf50c1..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2012 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.core.rule;
-
-import java.util.EnumSet;
-
-public enum RuleStatus {
-  READY, BETA, DEPRECATED, REMOVED;
-
-  public static String defaultValue() {
-    return RuleStatus.READY.name();
-  }
-
-  public static final EnumSet<RuleStatus> STATUS_FOR_PLUGIN = EnumSet.range(READY, DEPRECATED);
-
-  public final boolean isAvailableForPlugin() {
-    return STATUS_FOR_PLUGIN.contains(this);
-  }
-
-}
index 9915043d217aee0baec73029c0367b1aa3b1c85a..a994963048b306b708adb4f1a0f1efc44f7e7d69 100644 (file)
@@ -22,7 +22,6 @@ package org.sonar.jpa.dao;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RuleParam;
-import org.sonar.core.rule.RuleStatus;
 
 import java.util.List;
 
@@ -34,14 +33,14 @@ public class RulesDao extends BaseDao {
 
   public List<Rule> getRules() {
     return getSession().createQuery("FROM " + Rule.class.getSimpleName() + " r WHERE r.status<>:status")
-        .setParameter("status", RuleStatus.REMOVED.name())
+        .setParameter("status", Rule.STATUS_REMOVED)
         .getResultList();
   }
 
   public List<Rule> getRulesByRepository(String repositoryKey) {
     return getSession().createQuery("FROM " + Rule.class.getSimpleName() + " r WHERE r.pluginName=:pluginName and r.status<>:status")
         .setParameter("pluginName", repositoryKey)
-        .setParameter("status", RuleStatus.REMOVED.name())
+        .setParameter("status", Rule.STATUS_REMOVED)
         .getResultList();
   }
 
@@ -59,7 +58,7 @@ public class RulesDao extends BaseDao {
         session.createQuery("FROM " + Rule.class.getSimpleName() + " r WHERE r.key=:key and r.pluginName=:pluginName and r.status<>:status")
             .setParameter("key", ruleKey)
             .setParameter("pluginName", repositoryKey)
-            .setParameter("status", RuleStatus.REMOVED.name()
+            .setParameter("status", Rule.STATUS_REMOVED
             ), null);
   }
 
index 682e4db4fac820ea17c69caf8630d5d214fab3a0..64fe2a4634447626cf3eaafce1f48f9c02339892 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.core.rule;
 import org.hamcrest.core.Is;
 import org.junit.Before;
 import org.junit.Test;
+import org.sonar.api.rules.Rule;
 import org.sonar.core.persistence.AbstractDaoTestCase;
 
 import java.util.List;
@@ -47,7 +48,7 @@ public class RuleDaoTest extends AbstractDaoTestCase {
     assertThat(ruleDto.getId(), Is.is(1L));
     assertThat(ruleDto.getName(), Is.is("Avoid Null"));
     assertThat(ruleDto.getDescription(), Is.is("Should avoid NULL"));
-    assertThat(ruleDto.getStatus(), Is.is(RuleStatus.READY.name()));
+    assertThat(ruleDto.getStatus(), Is.is(Rule.STATUS_READY));
     assertThat(ruleDto.getRepositoryKey(), Is.is("checkstyle"));
   }
 
@@ -59,7 +60,7 @@ public class RuleDaoTest extends AbstractDaoTestCase {
     assertThat(ruleDto.getId(), Is.is(2L));
     assertThat(ruleDto.getName(), Is.is("Avoid Null"));
     assertThat(ruleDto.getDescription(), Is.is("Should avoid NULL"));
-    assertThat(ruleDto.getStatus(), Is.is(RuleStatus.READY.name()));
+    assertThat(ruleDto.getStatus(), Is.is(Rule.STATUS_READY));
     assertThat(ruleDto.getRepositoryKey(), Is.is("checkstyle"));
   }
 
diff --git a/sonar-core/src/test/java/org/sonar/core/rule/RuleStatusTest.java b/sonar-core/src/test/java/org/sonar/core/rule/RuleStatusTest.java
deleted file mode 100644 (file)
index f42bb85..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2012 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-
-package org.sonar.core.rule;
-
-import org.junit.Test;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class RuleStatusTest {
-
-  @Test
-  public void should_validate_status_for_user() {
-    assertThat(RuleStatus.READY.isAvailableForPlugin()).isTrue();
-    assertThat(RuleStatus.BETA.isAvailableForPlugin()).isTrue();
-    assertThat(RuleStatus.DEPRECATED.isAvailableForPlugin()).isTrue();
-
-    assertThat(RuleStatus.REMOVED.isAvailableForPlugin()).isFalse();
-  }
-
-  @Test
-  public void should_return_ready_as_default_value() {
-    assertThat(RuleStatus.defaultValue()).isEqualTo("READY");
-  }
-
-}
index e23da992fa57c7977e59cb3e0a016ccd13b1f2f1..e56a920a1956348a1ce6fc053e3c66ff9dd9d42b 100644 (file)
@@ -79,7 +79,7 @@ public abstract class AbstractLanguage implements Language {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Language)) {
       return false;
     }
 
index 5c243f04dca41359f913d2e9ac8e45b6c496a91e..d29825bd63942f499dd976f6f5c0e66b4ac66221 100644 (file)
@@ -76,18 +76,4 @@ public class Java extends AbstractLanguage {
     return ArrayUtils.contains(SUFFIXES, suffix);
   }
 
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    // We replace the test equality on classes by test on Language instance in order to keep backward compatibility between this deprecated class and the new one in sonar-java
-    if (!(o instanceof Language)) {
-      return false;
-    }
-
-    Language language = (Language) o;
-    return !(getKey() != null ? !getKey().equals(language.getKey()) : language.getKey() != null);
-  }
-
 }
index e91c724567c432685c56174d4fabe34a828d3e3d..27e9bb003509b4e9f42c6bcf3f970014e6ddfcc8 100644 (file)
 
 package org.sonar.api.rules;
 
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableSet;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
 import org.sonar.api.database.DatabaseProperties;
+import org.sonar.api.utils.SonarException;
 import org.sonar.check.Cardinality;
 
 import javax.persistence.Column;
@@ -45,11 +48,32 @@ import javax.persistence.TemporalType;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 @Entity
 @Table(name = "rules")
 public final class Rule {
 
+  /**
+   * @since 3.6
+   */
+  public static final String STATUS_BETA = "BETA";
+  /**
+   * @since 3.6
+   */
+  public static final String STATUS_DEPRECATED = "DEPRECATED";
+  /**
+   * @since 3.6
+   */
+  public static final String STATUS_READY = "READY";
+
+  /**
+   * For internal use only.
+   * @since 3.6
+   */
+  public static final String STATUS_REMOVED = "REMOVED";
+
+
   @Id
   @Column(name = "id")
   @GeneratedValue
@@ -85,7 +109,7 @@ public final class Rule {
   private Cardinality cardinality = Cardinality.SINGLE;
 
   @Column(name = "status", updatable = true, nullable = true)
-  private String status = "READY";
+  private String status = STATUS_READY;
 
   @Column(name = "language", updatable = true, nullable = true)
   private String language;
@@ -253,11 +277,11 @@ public final class Rule {
   }
 
   /**
-   * @deprecated in 3.6
+   * @deprecated in 3.6. Replaced by {@link #setStatus(String status)}.
    */
   @Deprecated
   public Rule setEnabled(Boolean enabled) {
-    throw new UnsupportedOperationException("No more supported since version 3.6. Please use setStatus() instead.");
+    throw new UnsupportedOperationException("No more supported since version 3.6.");
   }
 
   public Boolean isEnabled() {
@@ -305,7 +329,7 @@ public final class Rule {
   }
 
   /**
-   * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
+   * @deprecated since 2.5. See http://jira.codehaus.org/browse/SONAR-2007
    */
   @Deprecated
   public Integer getCategoryId() {
@@ -392,6 +416,9 @@ public final class Rule {
    * @since 3.6
    */
   public Rule setStatus(String status) {
+    if (!getStatusList().contains(status)) {
+      throw new SonarException("The status of a rule can only contain : " + Joiner.on(", ").join(getStatusList()));
+    }
     this.status = status;
     return this;
   }
@@ -509,4 +536,11 @@ public final class Rule {
   public static Rule create(String repositoryKey, String key) {
     return new Rule().setUniqueKey(repositoryKey, key);
   }
+
+  /**
+   * @since 3.6
+   */
+  public static Set<String> getStatusList() {
+    return ImmutableSet.of(STATUS_READY, STATUS_BETA, STATUS_DEPRECATED, STATUS_REMOVED);
+  }
 }
index 985fde99d01e9f4073d9512fc85a6c897790b03d..a8465ee0081a2551de030d70d6caab9c4e5aeea4 100644 (file)
@@ -44,7 +44,7 @@ public class AnnotationRuleParserTest {
     assertThat(rule.getName()).isEqualTo("bar");
     assertThat(rule.getDescription()).isEqualTo("Foo Bar");
     assertThat(rule.getSeverity()).isEqualTo(RulePriority.BLOCKER);
-    assertThat(rule.getStatus()).isEqualTo(org.sonar.check.Rule.STATUS_READY);
+    assertThat(rule.getStatus()).isEqualTo(Rule.STATUS_READY);
     assertThat(rule.getParams()).hasSize(1);
 
     RuleParam prop = rule.getParam("property");
@@ -140,7 +140,7 @@ public class AnnotationRuleParserTest {
   static class RuleWithoutNameNorDescription {
   }
 
-  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = org.sonar.check.Rule.STATUS_READY, priority = Priority.BLOCKER)
+  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = Rule.STATUS_READY, priority = Priority.BLOCKER)
   static class RuleWithProperty {
     @org.sonar.check.RuleProperty(description = "Ignore ?", defaultValue = "false")
     private String property;
@@ -152,19 +152,19 @@ public class AnnotationRuleParserTest {
     private String additionalProperty;
   }
 
-  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = org.sonar.check.Rule.STATUS_READY, priority = Priority.BLOCKER)
+  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = Rule.STATUS_READY, priority = Priority.BLOCKER)
   static class RuleWithIntegerProperty {
     @org.sonar.check.RuleProperty(description = "Max", defaultValue = "12")
     private Integer property;
   }
 
-  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = org.sonar.check.Rule.STATUS_READY, priority = Priority.BLOCKER)
+  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = Rule.STATUS_READY, priority = Priority.BLOCKER)
   static class RuleWithTextProperty {
     @org.sonar.check.RuleProperty(description = "text", defaultValue = "Long text", type = "TEXT")
     protected String property;
   }
 
-  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = org.sonar.check.Rule.STATUS_READY, priority = Priority.BLOCKER)
+  @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", status = Rule.STATUS_READY, priority = Priority.BLOCKER)
   static class RuleWithInvalidPropertyType {
     @org.sonar.check.RuleProperty(description = "text", defaultValue = "Long text", type = "INVALID")
     public String property;
index e17c6ca55143916351abca326df3f82068c4854c..d4e12fb41683d2b4f3d6be17a5565876e5684821 100644 (file)
  */
 package org.sonar.api.rules;
 
-import org.hamcrest.core.Is;
 import org.junit.Assert;
 import org.junit.Test;
+import org.sonar.api.utils.SonarException;
 
 import java.util.Arrays;
 import java.util.List;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
+import static org.fest.assertions.Assertions.assertThat;
 
 public class RuleTest {
 
   @Test
   public void description_should_be_cleaned() {
-    Rule rule = new Rule();
-    rule.setDescription("    my description         ");
+    Rule rule = Rule.create().setDescription("    my description         ");
     Assert.assertEquals("my description", rule.getDescription());
 
     rule.setDescription(null);
-    assertNull(rule.getDescription());
+    assertThat(rule.getDescription()).isNull();
   }
 
   @Test
   public void should_remove_new_line_characters_in_name_with_setter() {
-    Rule rule = new Rule();
+    Rule rule = Rule.create();
     for (String example : getExamplesContainingNewLineCharacter()) {
       rule.setName(example);
-      assertThat(rule.getName(), is("test"));
+      assertThat(rule.getName()).isEqualTo("test");
     }
   }
 
@@ -56,7 +53,7 @@ public class RuleTest {
     Rule rule;
     for (String example : getExamplesContainingNewLineCharacter()) {
       rule = new Rule(null, null).setName(example);
-      assertThat(rule.getName(), is("test"));
+      assertThat(rule.getName()).isEqualTo("test");
     }
   }
 
@@ -65,23 +62,43 @@ public class RuleTest {
     Rule rule;
     for (String example : getExamplesContainingNewLineCharacter()) {
       rule = new Rule(null, null).setName(example);
-      assertThat(rule.getName(), is("test"));
+      assertThat(rule.getName()).isEqualTo("test");
     }
   }
 
   @Test
   public void default_priority_is_major() {
-    Rule rule = new Rule();
-    assertThat(rule.getSeverity(), Is.is(RulePriority.MAJOR));
+    Rule rule = Rule.create();
+    assertThat(rule.getSeverity()).isEqualTo(RulePriority.MAJOR);
 
     rule = new Rule("name", "key");
-    assertThat(rule.getSeverity(), Is.is(RulePriority.MAJOR));
+    assertThat(rule.getSeverity()).isEqualTo(RulePriority.MAJOR);
 
     rule.setSeverity(RulePriority.BLOCKER);
-    assertThat(rule.getSeverity(), Is.is(RulePriority.BLOCKER));
+    assertThat(rule.getSeverity()).isEqualTo(RulePriority.BLOCKER);
 
     rule.setSeverity(null);
-    assertThat(rule.getSeverity(), Is.is(RulePriority.MAJOR));
+    assertThat(rule.getSeverity()).isEqualTo(RulePriority.MAJOR);
+  }
+
+  @Test(expected = SonarException.class)
+  public void should_not_authorize_unkown_status() {
+    Rule.create().setStatus("Unknown");
+  }
+
+  @Test
+  public void should_set_valid_status() {
+    Rule rule = Rule.create().setStatus(Rule.STATUS_DEPRECATED);
+    assertThat(rule.getStatus()).isEqualTo(Rule.STATUS_DEPRECATED);
+
+    rule = Rule.create().setStatus(Rule.STATUS_REMOVED);
+    assertThat(rule.getStatus()).isEqualTo(Rule.STATUS_REMOVED);
+
+    rule = Rule.create().setStatus(Rule.STATUS_BETA);
+    assertThat(rule.getStatus()).isEqualTo(Rule.STATUS_BETA);
+
+    rule = Rule.create().setStatus(Rule.STATUS_READY);
+    assertThat(rule.getStatus()).isEqualTo(Rule.STATUS_READY);
   }
 
   private List<String> getExamplesContainingNewLineCharacter() {
index fd014534e447cf397f305bd2465966dd8617ddc0..2d7cfaffd48c96f81e7c3439ed571b91478d3286 100644 (file)
@@ -31,7 +31,6 @@ import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RuleParam;
 import org.sonar.api.rules.RulePriority;
-import org.sonar.core.rule.RuleStatus;
 import org.sonar.jpa.dao.RulesDao;
 
 import java.util.Collection;
@@ -85,7 +84,7 @@ public class RulesBackup implements Backupable {
   private void disableUserRules() {
     LoggerFactory.getLogger(getClass()).info("Disable rules created by user");
     for (Rule rule : getUserRules()) {
-      rule.setStatus(RuleStatus.REMOVED.name());
+      rule.setStatus(Rule.STATUS_REMOVED);
       session.save(rule);
     }
   }
@@ -122,12 +121,12 @@ public class RulesBackup implements Backupable {
         matchingRuleInDb.setDescription(rule.getDescription());
         matchingRuleInDb.setSeverity(rule.getSeverity());
         matchingRuleInDb.setParams(rule.getParams());
-        matchingRuleInDb.setStatus(RuleStatus.defaultValue());
+        matchingRuleInDb.setStatus(Rule.STATUS_READY);
         matchingRuleInDb.setLanguage(rule.getLanguage());
         matchingRuleInDb.setUpdatedAt(new Date());
         session.save(matchingRuleInDb);
       } else {
-        rule.setStatus(RuleStatus.defaultValue());
+        rule.setStatus(Rule.STATUS_READY);
         rule.setCreatedAt(new Date());
         session.save(rule);
       }
index c55103c8a0664029e2b20781c7ec0425ce51c207..75a7c2825c8c2f81ed38e4aeb3d214e28a18042c 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.sonar.server.startup;
 
-import com.google.common.base.Joiner;
 import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.ArrayListMultimap;
@@ -38,7 +37,6 @@ import org.sonar.api.rules.RuleRepository;
 import org.sonar.api.utils.SonarException;
 import org.sonar.api.utils.TimeProfiler;
 import org.sonar.core.i18n.RuleI18nManager;
-import org.sonar.core.rule.RuleStatus;
 import org.sonar.jpa.session.DatabaseSessionFactory;
 import org.sonar.server.configuration.ProfilesManager;
 
@@ -93,7 +91,7 @@ public final class RegisterRules {
         .getResultList();
   }
 
-  private List<Rule> registerRules(RulesByRepository existingRules, TimeProfiler profiler, DatabaseSession session){
+  private List<Rule> registerRules(RulesByRepository existingRules, TimeProfiler profiler, DatabaseSession session) {
     List<Rule> registeredRules = newArrayList();
     for (RuleRepository repository : repositories) {
       profiler.start("Register rules [" + repository.getKey() + "/" + StringUtils.defaultString(repository.getLanguage(), "-") + "]");
@@ -110,7 +108,7 @@ public final class RegisterRules {
     for (Rule rule : repository.createRules()) {
       rule.setRepositoryKey(repository.getKey());
       rule.setLanguage(repository.getLanguage());
-      rule.setStatus(!Strings.isNullOrEmpty(rule.getStatus()) ? rule.getStatus() : RuleStatus.defaultValue());
+      rule.setStatus(!Strings.isNullOrEmpty(rule.getStatus()) ? rule.getStatus() : Rule.STATUS_READY);
       validateRule(rule, repository.getKey());
       ruleByKey.put(rule.getKey(), rule);
       registeredRules.add(rule);
@@ -132,7 +130,6 @@ public final class RegisterRules {
   private void validateRule(Rule rule, String repositoryKey) {
     validateRuleRepositoryName(rule, repositoryKey);
     validateRuleDescription(rule, repositoryKey);
-    validateStatus(rule);
   }
 
   private void validateRuleRepositoryName(Rule rule, String repositoryKey) {
@@ -153,17 +150,6 @@ public final class RegisterRules {
     }
   }
 
-  private void validateStatus(Rule rule) {
-    try {
-      RuleStatus ruleStatus = RuleStatus.valueOf(rule.getStatus());
-      if (!ruleStatus.isAvailableForPlugin()) {
-        throw new IllegalArgumentException();
-      }
-    } catch (IllegalArgumentException e) {
-      throw new SonarException("The status of a rule can only contains : " + Joiner.on(", ").join(RuleStatus.STATUS_FOR_PLUGIN), e);
-    }
-  }
-
   private void updateRule(Rule persistedRule, Rule rule, DatabaseSession session) {
     LOG.debug("Update rule " + rule);
 
@@ -221,7 +207,7 @@ public final class RegisterRules {
   }
 
   private void disableDeprecatedRules(RulesByRepository existingRules, List<Rule> registeredRules, DatabaseSession session) {
-    for(Rule rule : existingRules.rules()) {
+    for (Rule rule : existingRules.rules()) {
       if (!registeredRules.contains(rule)) {
         disable(rule, existingRules, session);
       }
@@ -229,7 +215,7 @@ public final class RegisterRules {
   }
 
   private void disableDeprecatedRepositories(RulesByRepository existingRules, DatabaseSession session) {
-    for(final String repositoryKey : existingRules.repositories()) {
+    for (final String repositoryKey : existingRules.repositories()) {
       if (!Iterables.any(repositories, new Predicate<RuleRepository>() {
         public boolean apply(RuleRepository input) {
           return input.getKey().equals(repositoryKey);
@@ -252,7 +238,7 @@ public final class RegisterRules {
     deprecatedUserRuleIds.addAll(session.createQuery(
         "SELECT r.id FROM " + Rule.class.getSimpleName() +
             " r WHERE r.parent IS NOT NULL AND EXISTS(FROM " + Rule.class.getSimpleName() + " p WHERE r.parent=p and p.status=:status)")
-        .setParameter("status", RuleStatus.REMOVED.name())
+        .setParameter("status", Rule.STATUS_REMOVED)
         .getResultList());
 
     for (Integer deprecatedUserRuleId : deprecatedUserRuleIds) {
@@ -262,10 +248,10 @@ public final class RegisterRules {
     profiler.stop();
   }
 
-  private void disable(Rule rule, RulesByRepository existingRules, DatabaseSession session){
-    if (!rule.getStatus().equals(RuleStatus.REMOVED.name())) {
+  private void disable(Rule rule, RulesByRepository existingRules, DatabaseSession session) {
+    if (!rule.getStatus().equals(Rule.STATUS_REMOVED)) {
       LOG.debug("Disable rule " + rule);
-      rule.setStatus(RuleStatus.REMOVED.name());
+      rule.setStatus(Rule.STATUS_REMOVED);
       rule.setUpdatedAt(new Date());
       session.saveWithoutFlush(rule);
       existingRules.addRuleToRemove(rule);
@@ -287,14 +273,14 @@ public final class RegisterRules {
       rulesToRemove = newArrayList();
     }
 
-    public RulesByRepository(List<Rule> rules){
+    public RulesByRepository(List<Rule> rules) {
       this();
-      for (Rule rule :rules) {
+      for (Rule rule : rules) {
         ruleRepositoryList.put(rule.getRepositoryKey(), rule);
       }
     }
 
-    public void add(Rule rule){
+    public void add(Rule rule) {
       ruleRepositoryList.put(rule.getRepositoryKey(), rule);
     }
 
@@ -302,15 +288,15 @@ public final class RegisterRules {
       return ruleRepositoryList.get(repositoryKey);
     }
 
-    public Collection<String> repositories(){
+    public Collection<String> repositories() {
       return ruleRepositoryList.keySet();
     }
 
-    public Collection<Rule> rules(){
+    public Collection<Rule> rules() {
       return ruleRepositoryList.values();
     }
 
-    public void addRuleToRemove(Rule rule){
+    public void addRuleToRemove(Rule rule) {
       rulesToRemove.add(rule);
     }
 
index 9ab9526eeebdc9dd2176bc08848b5f5840d9561b..841d4822cbd33c4259e475d882fd18c2f2d04f63 100644 (file)
@@ -30,7 +30,6 @@ import org.sonar.api.rules.RulePriority;
 import org.sonar.api.rules.RuleRepository;
 import org.sonar.api.utils.SonarException;
 import org.sonar.core.i18n.RuleI18nManager;
-import org.sonar.core.rule.RuleStatus;
 import org.sonar.jpa.test.AbstractDbUnitTestCase;
 import org.sonar.server.configuration.ProfilesManager;
 
@@ -79,7 +78,7 @@ public class RegisterRulesTest extends AbstractDbUnitTestCase {
     assertThat(first.getRepositoryKey(), is("fake"));
     assertThat(first.isEnabled(), is(true));
     assertThat(first.getCreatedAt(), notNullValue());
-    assertThat(first.getStatus(), is(RuleStatus.READY.name()));
+    assertThat(first.getStatus(), is(Rule.STATUS_READY));
     assertThat(first.getLanguage(), is("java"));
     assertThat(first.getParams().size(), is(2));
   }
@@ -113,7 +112,7 @@ public class RegisterRulesTest extends AbstractDbUnitTestCase {
     task.start();
 
     Rule rule = getSession().getSingleResult(Rule.class, "id", 1);
-    assertThat(rule.getStatus(), is(RuleStatus.READY.name()));
+    assertThat(rule.getStatus(), is(Rule.STATUS_READY));
     assertThat(rule.getUpdatedAt(), notNullValue());
   }
 
@@ -123,7 +122,7 @@ public class RegisterRulesTest extends AbstractDbUnitTestCase {
     task.start();
 
     Rule rule = getSession().getSingleResult(Rule.class, "id", 1);
-    assertThat(rule.getStatus(), is(RuleStatus.REMOVED.name()));
+    assertThat(rule.getStatus(), is(Rule.STATUS_REMOVED));
     assertThat(rule.getUpdatedAt(), nullValue());
   }
 
@@ -182,7 +181,7 @@ public class RegisterRulesTest extends AbstractDbUnitTestCase {
     assertThat(rule1.getUpdatedAt(), notNullValue());
 
     Rule rule2 = getSession().getSingleResult(Rule.class, "id", 2);
-    assertThat(rule2.getStatus(), is(RuleStatus.DEPRECATED.name()));
+    assertThat(rule2.getStatus(), is(Rule.STATUS_DEPRECATED));
     assertThat(rule2.getUpdatedAt(), notNullValue());
   }
 
@@ -244,7 +243,7 @@ public class RegisterRulesTest extends AbstractDbUnitTestCase {
     setupData("shared");
     task.start();
 
-    List<Rule> result = getSession().getResults(Rule.class, "status", RuleStatus.READY.name());
+    List<Rule> result = getSession().getResults(Rule.class, "status", Rule.STATUS_READY);
     assertThat(result.size(), is(VolumeRepository.SIZE));
   }
 
@@ -325,17 +324,6 @@ public class RegisterRulesTest extends AbstractDbUnitTestCase {
     }
   }
 
-  // http://jira.codehaus.org/browse/SONAR-3879
-  @Test
-  public void should_fail_with_rule_with_unknown_status() throws Exception {
-    task = new RegisterRules(getSessionFactory(), new RuleRepository[] {new RuleWithUnkownStatusRepository()}, null, profilesManager);
-    try {
-      task.start();
-      fail("Rule status must be unknown");
-    } catch (SonarException e) {
-      assertThat(e.getMessage(), containsString("The status of a rule can only contains : "));
-    }
-  }
 }
 
 class FakeRepository extends RuleRepository {
@@ -355,7 +343,7 @@ class FakeRepository extends RuleRepository {
     Rule rule2 = Rule.create("fake", "rule2", "Two");
     rule2.setDescription("Description of Two");
     rule2.setSeverity(RulePriority.INFO);
-    rule2.setStatus(RuleStatus.DEPRECATED.name());
+    rule2.setStatus(Rule.STATUS_DEPRECATED);
 
     return Arrays.asList(rule1, rule2);
   }