diff options
author | Julien Lancelot <julien.lancelot@gmail.com> | 2013-05-22 17:30:54 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@gmail.com> | 2013-05-22 17:30:54 +0200 |
commit | c9c8fa20425f48628e05e1588c3b2549846721d3 (patch) | |
tree | c76bcd0214b235b1409cf2e9c58ce7754daeb027 /sonar-server/src | |
parent | fe28ee821c1a09fed5ff31c32d28f6c234048d78 (diff) | |
download | sonarqube-c9c8fa20425f48628e05e1588c3b2549846721d3.tar.gz sonarqube-c9c8fa20425f48628e05e1588c3b2549846721d3.zip |
SONAR-4301 Improve issues sort
Diffstat (limited to 'sonar-server/src')
3 files changed, 15 insertions, 9 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/issue/DefaultIssueFinder.java b/sonar-server/src/main/java/org/sonar/server/issue/DefaultIssueFinder.java index 3736a6e3f49..985bae3d4cf 100644 --- a/sonar-server/src/main/java/org/sonar/server/issue/DefaultIssueFinder.java +++ b/sonar-server/src/main/java/org/sonar/server/issue/DefaultIssueFinder.java @@ -107,15 +107,15 @@ public class DefaultIssueFinder implements IssueFinder { List<IssueDto> authorizedIssues = issueDao.selectIssueAndProjectIds(query, rootProjectIds, sqlSession); // 3. Sort all authorized issues - Collection<IssueDto> authorizedSortedIssues = new IssuesFinderSort(authorizedIssues, query).sort(); + List<IssueDto> authorizedSortedIssues = sort(authorizedIssues, query, authorizedIssues.size()); // 4. Apply pagination Paging paging = Paging.create(query.pageSize(), query.pageIndex(), authorizedSortedIssues.size()); Set<Long> pagedIssueIds = pagedIssueIds(authorizedSortedIssues, paging); // 5. Load issues and their related data (rules, components, projects, comments, action plans, ...) and sort then again - Collection<IssueDto> pagedIssues = issueDao.selectByIds(pagedIssueIds, sqlSession); - Collection<IssueDto> pagedSortedIssues = new IssuesFinderSort(pagedIssues, query).sort(); + List<IssueDto> pagedIssues = issueDao.selectByIds(pagedIssueIds, sqlSession); + List<IssueDto> pagedSortedIssues = sort(pagedIssues, query, authorizedIssues.size()); Map<String, DefaultIssue> issuesByKey = newHashMap(); List<Issue> issues = newArrayList(); @@ -165,6 +165,13 @@ public class DefaultIssueFinder implements IssueFinder { } } + private List<IssueDto> sort(List<IssueDto> issues, IssueQuery query, int allIssuesSize){ + if (allIssuesSize < query.maxResults()) { + return new IssuesFinderSort(issues, query).sort(); + } + return issues; + } + private Set<Long> pagedIssueIds(Collection<IssueDto> issues, Paging paging) { Set<Long> issueIds = Sets.newLinkedHashSet(); int index = 0; diff --git a/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java b/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java index 086365f974d..fae20ee7eb5 100644 --- a/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java +++ b/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java @@ -31,15 +31,15 @@ import java.util.List; class IssuesFinderSort { - private Collection<IssueDto> issues; + private List<IssueDto> issues; private IssueQuery query; - public IssuesFinderSort(Collection<IssueDto> issues, IssueQuery query) { + public IssuesFinderSort(List<IssueDto> issues, IssueQuery query) { this.issues = issues; this.query = query; } - public Collection<IssueDto> sort() { + public List<IssueDto> sort() { if (query.sort() != null) { IssueProcessor issueProcessor; switch (query.sort()) { diff --git a/sonar-server/src/main/webapp/WEB-INF/app/helpers/issues_helper.rb b/sonar-server/src/main/webapp/WEB-INF/app/helpers/issues_helper.rb index fab4c9a0457..413e03c6766 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/helpers/issues_helper.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/helpers/issues_helper.rb @@ -22,13 +22,12 @@ module IssuesHelper def column_html(filter, column_label, column_tooltip, sort) filter_sort = filter.criteria[:sort] filter_asc = filter.criteria[:asc] == 'true' ? true : false - if !filter.issues_result.maxResultsReached() + html = h(column_label) + unless filter.issues_result.maxResultsReached() html = link_to_function(h(column_label), "refreshList('#{escape_javascript sort}',#{!filter_asc}, #{filter.criteria[:page]||1})", :title => h(column_tooltip)) if sort == filter_sort html << (filter_asc ? image_tag("asc12.png") : image_tag("desc12.png")) end - else - html = h(column_label) end html end |