From: Sébastien Lesaint Date: Mon, 2 Dec 2019 10:15:14 +0000 (+0100) Subject: SONAR-12717 store ruleId padded with 0s to fix sorting on this field X-Git-Tag: 8.2.0.32929~214 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=611fb9ad6896b19dd6f948f348bb0d2608752d6f;p=sonarqube.git SONAR-12717 store ruleId padded with 0s to fix sorting on this field --- diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java index 8680eb6a2f4..88e8254667a 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java @@ -25,9 +25,11 @@ import java.util.Date; import java.util.Map; import javax.annotation.CheckForNull; import javax.annotation.Nullable; +import org.apache.commons.lang.StringUtils; import org.sonar.api.rule.Severity; import org.sonar.api.rules.RuleType; import org.sonar.api.utils.Duration; +import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.es.BaseDoc; import org.sonar.server.permission.index.AuthorizationDoc; import org.sonar.server.security.SecurityStandards; @@ -79,7 +81,8 @@ public class IssueDoc extends BaseDoc { } public Integer ruleId() { - return getField(IssueIndexDefinition.FIELD_ISSUE_RULE_ID); + String field = getField(IssueIndexDefinition.FIELD_ISSUE_RULE_ID); + return Integer.valueOf(field); } public String language() { @@ -190,10 +193,20 @@ public class IssueDoc extends BaseDoc { } public IssueDoc setRuleId(Integer s) { - setField(IssueIndexDefinition.FIELD_ISSUE_RULE_ID, s); + // leftpad with 0 to have correct sorting on this fields (other 10 becomes lower than 9) + String str = formatRuleId(s); + setField(IssueIndexDefinition.FIELD_ISSUE_RULE_ID, str); return this; } + public static String formatRuleId(RuleDefinitionDto dto) { + return formatRuleId(dto.getId()); + } + + private static String formatRuleId(int s) { + return StringUtils.leftPad(String.valueOf(s), 10, "0"); + } + public IssueDoc setLanguage(@Nullable String s) { setField(IssueIndexDefinition.FIELD_ISSUE_LANGUAGE, s); return this; diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 58ca0dccbfc..9a2e700f341 100644 --- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -72,7 +72,6 @@ import org.sonar.api.rules.RuleType; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; import org.sonar.core.util.stream.MoreCollectors; -import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.es.BaseDoc; import org.sonar.server.es.EsClient; import org.sonar.server.es.EsUtils; @@ -385,7 +384,7 @@ public class IssueIndex { filters.put(FIELD_ISSUE_AUTHOR_LOGIN, createTermsFilter(FIELD_ISSUE_AUTHOR_LOGIN, query.authors())); filters.put(FIELD_ISSUE_RULE_ID, createTermsFilter( FIELD_ISSUE_RULE_ID, - query.rules().stream().map(RuleDefinitionDto::getId).collect(toList()))); + query.rules().stream().map(IssueDoc::formatRuleId).collect(toList()))); filters.put(FIELD_ISSUE_STATUS, createTermsFilter(FIELD_ISSUE_STATUS, query.statuses())); filters.put(FIELD_ISSUE_ORGANIZATION_UUID, createTermFilter(FIELD_ISSUE_ORGANIZATION_UUID, query.organizationUuid())); filters.put(FIELD_ISSUE_OWASP_TOP_10, createTermsFilter(FIELD_ISSUE_OWASP_TOP_10, query.owaspTop10())); @@ -629,7 +628,7 @@ public class IssueIndex { addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, DIRECTORIES, query.directories().toArray()); addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, FILE_UUIDS, query.fileUuids().toArray()); addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, LANGUAGES, query.languages().toArray()); - addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, RULES, query.rules().stream().map(RuleDefinitionDto::getId).toArray()); + addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, RULES, query.rules().stream().map(IssueDoc::formatRuleId).toArray()); addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, AUTHORS, query.authors().toArray()); addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, AUTHOR, query.authors().toArray()); addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, TAGS, query.tags().toArray()); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java index 7c7c4746d5d..b2942ef5deb 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java @@ -52,6 +52,7 @@ import org.sonar.db.user.UserDto; import org.sonar.server.es.Facets; import org.sonar.server.es.SearchOptions; import org.sonar.server.issue.SearchRequest; +import org.sonar.server.issue.index.IssueDoc; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueQuery; import org.sonar.server.issue.index.IssueQueryFactory; @@ -481,7 +482,7 @@ public class SearchAction implements IssuesWsAction, Startable { } addMandatoryValuesToFacet(facets, PARAM_ASSIGNEES, assignees); addMandatoryValuesToFacet(facets, FACET_ASSIGNED_TO_ME, singletonList(userSession.getUuid())); - addMandatoryValuesToFacet(facets, PARAM_RULES, query.rules().stream().map(r -> Integer.toString(r.getId())).collect(toList())); + addMandatoryValuesToFacet(facets, PARAM_RULES, query.rules().stream().map(IssueDoc::formatRuleId).collect(toList())); addMandatoryValuesToFacet(facets, PARAM_LANGUAGES, request.getLanguages()); addMandatoryValuesToFacet(facets, PARAM_TAGS, request.getTags()); addMandatoryValuesToFacet(facets, PARAM_TYPES, RuleType.names());