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;
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));
}
}
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));
}
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);
}
}
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;
}
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(
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)
final int profileId = 42;
ProfileRuleQuery query = ProfileRuleQuery.create(profileId);
assertThat(query.profileId()).isEqualTo(profileId);
- assertThat(query.hasParentRuleCriteria()).isFalse();
}
@Test
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