]> source.dussan.org Git - sonarqube.git/commitdiff
Fix filtering of rules in active profile rules form
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 18 Dec 2013 13:26:53 +0000 (14:26 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 18 Dec 2013 15:01:35 +0000 (16:01 +0100)
sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java
sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb
sonar-server/src/test/java/org/sonar/server/rule/ProfileRuleQueryTest.java

index 7abd37ca1511c29ab5dc5c5f14a3afb88b6c6d85..03aa979ba27c1712fae3a27d88602d68e0c1f515 100644 (file)
@@ -22,7 +22,6 @@ package org.sonar.server.rule;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.util.RubyUtils;
 
@@ -71,7 +70,6 @@ public class ProfileRuleQuery {
       errors.add(BadRequestException.Message.of("profileId could not be parsed"));
     }
 
-
     if (params.containsKey(PARAM_NAME_OR_KEY)) {
       result.setNameOrKey((String) params.get(PARAM_NAME_OR_KEY));
     }
@@ -92,7 +90,7 @@ public class ProfileRuleQuery {
   }
 
   private static void validatePresenceOf(Map<String, Object> params, List<BadRequestException.Message> errors, String... paramNames) {
-    for (String param: paramNames) {
+    for (String param : paramNames) {
       if (params.get(param) == null) {
         errors.add(BadRequestException.Message.of("Missing parameter " + param));
       }
@@ -146,20 +144,13 @@ public class ProfileRuleQuery {
     return ImmutableList.copyOf(statuses);
   }
 
-  public boolean hasParentRuleCriteria() {
-    return !(
-      StringUtils.isEmpty(nameOrKey)
-      && repositoryKeys.isEmpty()
-      && statuses.isEmpty()
-    );
-  }
-
   private static String[] optionalVarargs(Object jRubyArray) {
     List<String> items = RubyUtils.toStrings(jRubyArray);
     String[] empty = new String[0];
     if (items == null) {
       return empty;
     } else {
+      items.remove("");
       return items.toArray(empty);
     }
   }
index da157f8de86e1bbc850b252b373308df93943327..183b32c5f2fe91f739cbc488d8942f0a3f065451 100644 (file)
@@ -23,11 +23,14 @@ import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.action.get.MultiGetItemResponse;
 import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.common.collect.Lists;
-import org.elasticsearch.index.query.*;
+import org.elasticsearch.index.query.BoolFilterBuilder;
+import org.elasticsearch.index.query.FilterBuilder;
 import org.elasticsearch.index.query.MatchQueryBuilder.Operator;
+import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.sonar.api.ServerExtension;
+import org.sonar.api.rules.Rule;
 import org.sonar.server.qualityprofile.Paging;
 import org.sonar.server.qualityprofile.PagingResult;
 import org.sonar.server.qualityprofile.QProfileRule;
@@ -111,14 +114,14 @@ public class ProfileRules implements ServerExtension {
   }
 
   private FilterBuilder parentRuleFilter(ProfileRuleQuery query) {
-    if (! query.hasParentRuleCriteria()) {
-      return FilterBuilders.matchAllFilter();
-    }
-
     BoolFilterBuilder result = boolFilter();
 
     addMustTermOrTerms(result, RuleDocument.FIELD_REPOSITORY_KEY, query.repositoryKeys());
-    addMustTermOrTerms(result, RuleDocument.FIELD_STATUS, query.statuses());
+    if (query.statuses().isEmpty()) {
+      result.mustNot(termFilter(RuleDocument.FIELD_STATUS, Rule.STATUS_REMOVED));
+    } else {
+      addMustTermOrTerms(result, RuleDocument.FIELD_STATUS, query.statuses());
+    }
 
     if (StringUtils.isNotBlank(query.nameOrKey())) {
       result.must(
index 5b0ae0cbff082514d299a366c2ab25b4c18d33b2..850e6640e8754cc8bfd54c39474b9eb6fb52f043 100644 (file)
@@ -53,8 +53,8 @@ class NewRulesConfigurationController < ApplicationController
       stop_watch = Internal.profiling.start("rules", "BASIC")
 
       criteria = {
-      "profileId" => @profile.id.to_i, "activation" => @activation, "severities" => @priorities.to_java, "inheritance" => @inheritance, "statuses" => @status.to_java,
-      "repositoryKeys" => @repositories.to_java, "nameOrKey" => @searchtext, "include_parameters_and_notes" => true, "language" => @profile.language, "sort_by" => @sort_by}
+      "profileId" => @profile.id.to_i, "activation" => @activation, "severities" => @priorities, "inheritance" => @inheritance, "statuses" => @status,
+      "repositoryKeys" => @repositories, "nameOrKey" => @searchtext, "include_parameters_and_notes" => true, "language" => @profile.language, "sort_by" => @sort_by}
 
       @rules = []
       @pagination = Api::Pagination.new(params)
index 3577f31189902ea5ad6ae922d61aa24033ca5b22..da529d60878d7be6923c3312bd6065676fa153db 100644 (file)
@@ -36,7 +36,6 @@ public class ProfileRuleQueryTest {
     final int profileId = 42;
     ProfileRuleQuery query = ProfileRuleQuery.create(profileId);
     assertThat(query.profileId()).isEqualTo(profileId);
-    assertThat(query.hasParentRuleCriteria()).isFalse();
   }
 
   @Test
@@ -45,7 +44,6 @@ public class ProfileRuleQueryTest {
     Map<String, Object> params = ImmutableMap.of("profileId", (Object) Integer.toString(profileId));
     ProfileRuleQuery query = ProfileRuleQuery.parse(params);
     assertThat(query.profileId()).isEqualTo(profileId);
-    assertThat(query.hasParentRuleCriteria()).isFalse();
   }
 
   @Test