From 227a651af91fa5487c046d97a60545493784cdaf Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Wed, 18 Dec 2013 14:26:53 +0100 Subject: [PATCH] Fix filtering of rules in active profile rules form --- .../org/sonar/server/rule/ProfileRuleQuery.java | 13 ++----------- .../java/org/sonar/server/rule/ProfileRules.java | 15 +++++++++------ .../new_rules_configuration_controller.rb | 4 ++-- .../sonar/server/rule/ProfileRuleQueryTest.java | 2 -- 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java index 7abd37ca151..03aa979ba27 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java @@ -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 params, List 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 items = RubyUtils.toStrings(jRubyArray); String[] empty = new String[0]; if (items == null) { return empty; } else { + items.remove(""); return items.toArray(empty); } } diff --git a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java index da157f8de86..183b32c5f2f 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java @@ -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( diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb index 5b0ae0cbff0..850e6640e87 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb @@ -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) diff --git a/sonar-server/src/test/java/org/sonar/server/rule/ProfileRuleQueryTest.java b/sonar-server/src/test/java/org/sonar/server/rule/ProfileRuleQueryTest.java index 3577f311899..da529d60878 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule/ProfileRuleQueryTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule/ProfileRuleQueryTest.java @@ -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 params = ImmutableMap.of("profileId", (Object) Integer.toString(profileId)); ProfileRuleQuery query = ProfileRuleQuery.parse(params); assertThat(query.profileId()).isEqualTo(profileId); - assertThat(query.hasParentRuleCriteria()).isFalse(); } @Test -- 2.39.5