aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@gmail.com>2013-05-22 17:30:54 +0200
committerJulien Lancelot <julien.lancelot@gmail.com>2013-05-22 17:30:54 +0200
commitc9c8fa20425f48628e05e1588c3b2549846721d3 (patch)
treec76bcd0214b235b1409cf2e9c58ce7754daeb027 /sonar-server/src
parentfe28ee821c1a09fed5ff31c32d28f6c234048d78 (diff)
downloadsonarqube-c9c8fa20425f48628e05e1588c3b2549846721d3.tar.gz
sonarqube-c9c8fa20425f48628e05e1588c3b2549846721d3.zip
SONAR-4301 Improve issues sort
Diffstat (limited to 'sonar-server/src')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/issue/DefaultIssueFinder.java13
-rw-r--r--sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java6
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/helpers/issues_helper.rb5
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