import org.apache.commons.lang.builder.ToStringBuilder;
import javax.annotation.CheckForNull;
-
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
/**
- *
* <p>
* This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}
* </p>
// TODO implement a lazy-loading equivalent with Iterator/Iterable
public Collection<V> values(String group) {
try {
- List<V> values = Lists.newLinkedList();
+ List<V> values = Lists.newArrayList();
exchange.clear();
Exchange iteratorExchange = new Exchange(exchange);
iteratorExchange.append(group).append(Key.BEFORE);
public Collection<V> allValues() {
try {
- List<V> values = Lists.newLinkedList();
+ List<V> values = Lists.newArrayList();
exchange.clear();
Exchange iteratorExchange = new Exchange(exchange);
iteratorExchange.append(Key.BEFORE);
<sql id="sortColumn">
<if test="query.sort() != null">,
<choose>
- <when test="'SEVERITY'.equals(query.sort().name())">
+ <when test="'SEVERITY'.equals(query.sort())">
i.severity as severity
</when>
- <when test="'STATUS'.equals(query.sort().name())">
+ <when test="'STATUS'.equals(query.sort())">
i.status as status
</when>
- <when test="'ASSIGNEE'.equals(query.sort().name())">
+ <when test="'ASSIGNEE'.equals(query.sort())">
i.assignee as assignee
</when>
- <when test="'CREATION_DATE'.equals(query.sort().name())">
+ <when test="'CREATION_DATE'.equals(query.sort())">
i.issue_creation_date as issueCreationDate
</when>
- <when test="'UPDATE_DATE'.equals(query.sort().name())">
+ <when test="'UPDATE_DATE'.equals(query.sort())">
i.issue_update_date as issueUpdateDate
</when>
- <when test="'CLOSE_DATE'.equals(query.sort().name())">
+ <when test="'CLOSE_DATE'.equals(query.sort())">
i.issue_close_date as issueCloseDate
</when>
</choose>
public void should_select_issues_with_sort_column() {
setupData("shared", "should_select_issues_with_sort_column");
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.ASSIGNEE).requiredRole("user").build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_ASSIGNEE).requiredRole("user").build();
List<IssueDto> results = dao.selectIssues(query);
assertThat(results.get(0).getAssignee()).isNotNull();
- query = IssueQuery.builder().sort(IssueQuery.Sort.SEVERITY).requiredRole("user").build();
+ query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).requiredRole("user").build();
results = dao.selectIssues(query);
assertThat(results.get(0).getSeverity()).isNotNull();
- query = IssueQuery.builder().sort(IssueQuery.Sort.STATUS).requiredRole("user").build();
+ query = IssueQuery.builder().sort(IssueQuery.SORT_BY_STATUS).requiredRole("user").build();
results = dao.selectIssues(query);
assertThat(results.get(0).getStatus()).isNotNull();
- query = IssueQuery.builder().sort(IssueQuery.Sort.CREATION_DATE).requiredRole("user").build();
+ query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).requiredRole("user").build();
results = dao.selectIssues(query);
assertThat(results.get(0).getIssueCreationDate()).isNotNull();
- query = IssueQuery.builder().sort(IssueQuery.Sort.UPDATE_DATE).requiredRole("user").build();
+ query = IssueQuery.builder().sort(IssueQuery.SORT_BY_UPDATE_DATE).requiredRole("user").build();
results = dao.selectIssues(query);
assertThat(results.get(0).getIssueUpdateDate()).isNotNull();
- query = IssueQuery.builder().sort(IssueQuery.Sort.CLOSE_DATE).requiredRole("user").build();
+ query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CLOSE_DATE).requiredRole("user").build();
results = dao.selectIssues(query);
assertThat(results.get(0).getIssueCloseDate()).isNotNull();
}
package org.sonar.api.issue;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.web.UserRole;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-
import java.util.Collection;
import java.util.Date;
+import java.util.Set;
/**
* @since 3.6
public static final int MAX_PAGE_SIZE = 500;
public static final int MAX_ISSUE_KEYS = 500;
- public static enum Sort {
- CREATION_DATE, UPDATE_DATE, CLOSE_DATE, ASSIGNEE, SEVERITY, STATUS
- }
+ public static final String SORT_BY_CREATION_DATE = "CREATION_DATE";
+ public static final String SORT_BY_UPDATE_DATE = "UPDATE_DATE";
+ public static final String SORT_BY_CLOSE_DATE = "CLOSE_DATE";
+ public static final String SORT_BY_ASSIGNEE = "ASSIGNEE";
+ public static final String SORT_BY_SEVERITY = "SEVERITY";
+ public static final String SORT_BY_STATUS = "STATUS";
+ public static final Set<String> SORTS = ImmutableSet.of(SORT_BY_CREATION_DATE, SORT_BY_UPDATE_DATE, SORT_BY_CLOSE_DATE, SORT_BY_ASSIGNEE, SORT_BY_SEVERITY, SORT_BY_STATUS);
private final Collection<String> issueKeys;
private final Collection<String> severities;
private final Boolean resolved;
private final Date createdAfter;
private final Date createdBefore;
- private final Sort sort;
+ private final String sort;
private final Boolean asc;
private final String requiredRole;
}
@CheckForNull
- public Sort sort() {
+ public String sort() {
return sort;
}
private Boolean resolved = null;
private Date createdAfter;
private Date createdBefore;
- private Sort sort;
+ private String sort;
private Boolean asc = false;
private Integer pageSize;
private Integer pageIndex;
return this;
}
- public Builder sort(@Nullable Sort sort) {
- this.sort = sort;
+ public Builder sort(@Nullable String s) {
+ if (s != null && !SORTS.contains(s)) {
+ throw new IllegalArgumentException("Bad sort field: " + s);
+ }
+ this.sort = s;
return this;
}
} else {
if (pageSize == null) {
pageSize = DEFAULT_PAGE_SIZE;
- } else if (pageSize<=0 || pageSize > MAX_PAGE_SIZE) {
+ } else if (pageSize <= 0 || pageSize > MAX_PAGE_SIZE) {
pageSize = MAX_PAGE_SIZE;
}
}
* <li>'assigned': true to get only assigned issues, false to get only unassigned issues. By default no filtering is done.</li>
* <li>'createdAfter': match all the issues created after the given date (inclusive). Both date and datetime ISO formats are supported: 2013-05-18 or 2010-05-18T15:50:45+0100</li>
* <li>'createdBefore': match all the issues created before the given date (exclusive). Both date and datetime ISO formats are supported: 2013-05-18 or 2010-05-18T15:50:45+0100</li>
- * <li>'pageSize': TODO</li>
- * <li>'pageIndex': TODO</li>
+ * <li>'pageSize': maximum number of results per page. Default is {@link org.sonar.api.issue.IssueQuery#DEFAULT_PAGE_SIZE},
+ * except when the parameter 'components' is set. In this case there's no limit by default (all results in the same page).</li>
+ * <li>'pageIndex': index of the selected page. Default is 1.</li>
* <li>'sort': TODO</li>
* <li>'asc': TODO </li>
* </ul>
.assigned(true)
.createdAfter(new Date())
.createdBefore(new Date())
- .sort(IssueQuery.Sort.ASSIGNEE)
+ .sort(IssueQuery.SORT_BY_ASSIGNEE)
.pageSize(10)
.pageIndex(2)
.requiredRole(UserRole.CODEVIEWER)
assertThat(query.actionPlans()).containsOnly("AP1", "AP2");
assertThat(query.createdAfter()).isNotNull();
assertThat(query.createdBefore()).isNotNull();
- assertThat(query.sort()).isEqualTo(IssueQuery.Sort.ASSIGNEE);
+ assertThat(query.sort()).isEqualTo(IssueQuery.SORT_BY_ASSIGNEE);
assertThat(query.pageSize()).isEqualTo(10);
assertThat(query.pageIndex()).isEqualTo(2);
assertThat(query.requiredRole()).isEqualTo(UserRole.CODEVIEWER);
}
public List<IssueDto> sort() {
- IssueQuery.Sort sort = query.sort();
+ String sort = query.sort();
if (sort != null) {
return getIssueProcessor(sort).sort(issues, query.asc());
}
return issues;
}
- private IssueProcessor getIssueProcessor(IssueQuery.Sort sort){
- switch (sort) {
- case ASSIGNEE:
- return new AssigneeSortIssueProcessor();
- case SEVERITY:
- return new SeveritySortIssueProcessor();
- case STATUS:
- return new StatusSortIssueProcessor();
- case CREATION_DATE:
- return new CreationDateSortIssueProcessor();
- case UPDATE_DATE:
- return new UpdateDateSortIssueProcessor();
- case CLOSE_DATE:
- return new CloseDateSortIssueProcessor();
- default:
- throw new IllegalArgumentException("Cannot sort issues on field : " + sort.name());
+ private IssueProcessor getIssueProcessor(String sort) {
+ if (IssueQuery.SORT_BY_ASSIGNEE.equals(sort)) {
+ return new AssigneeSortIssueProcessor();
}
+ if (IssueQuery.SORT_BY_SEVERITY.equals(sort)) {
+ return new SeveritySortIssueProcessor();
+ }
+ if (IssueQuery.SORT_BY_STATUS.equals(sort)) {
+ return new StatusSortIssueProcessor();
+ }
+ if (IssueQuery.SORT_BY_CREATION_DATE.equals(sort)) {
+ return new CreationDateSortIssueProcessor();
+ }
+ if (IssueQuery.SORT_BY_UPDATE_DATE.equals(sort)) {
+ return new UpdateDateSortIssueProcessor();
+ }
+ if (IssueQuery.SORT_BY_CLOSE_DATE.equals(sort)) {
+ return new CloseDateSortIssueProcessor();
+ }
+ throw new IllegalArgumentException("Cannot sort issues on field : " + sort);
}
abstract static class IssueProcessor {
builder.pageIndex(RubyUtils.toInteger(props.get("pageIndex")));
String sort = (String) props.get("sort");
if (sort != null) {
- builder.sort(IssueQuery.Sort.valueOf(sort.toUpperCase()));
+ builder.sort(sort);
builder.asc(RubyUtils.toBoolean(props.get("asc")));
}
return builder.build();
IssueDto issue4 = new IssueDto().setId(4L).setAssignee(null);
List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3, issue4);
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.ASSIGNEE).asc(true).build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_ASSIGNEE).asc(true).build();
IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query);
List<IssueDto> result = newArrayList(issuesFinderSort.sort());
IssueDto issue3 = new IssueDto().setId(3L).setStatus("OPEN");
List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3);
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.STATUS).asc(false).build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_STATUS).asc(false).build();
IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query);
List<IssueDto> result = newArrayList(issuesFinderSort.sort());
IssueDto issue3 = new IssueDto().setId(3L).setSeverity("MAJOR");
List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3);
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.SEVERITY).asc(true).build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(true).build();
IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query);
List<IssueDto> result = newArrayList(issuesFinderSort.sort());
IssueDto issue3 = new IssueDto().setId(3L).setIssueCreationDate(date2);
List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3);
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.CREATION_DATE).asc(false).build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).asc(false).build();
IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query);
List<IssueDto> result = newArrayList(issuesFinderSort.sort());
IssueDto issue3 = new IssueDto().setId(3L).setIssueUpdateDate(date2);
List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3);
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.UPDATE_DATE).asc(false).build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(false).build();
IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query);
List<IssueDto> result = newArrayList(issuesFinderSort.sort());
IssueDto issue3 = new IssueDto().setId(3L).setIssueCloseDate(date2);
List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3);
- IssueQuery query = IssueQuery.builder().sort(IssueQuery.Sort.CLOSE_DATE).asc(false).build();
+ IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(false).build();
IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query);
List<IssueDto> result = newArrayList(issuesFinderSort.sort());
map.put("rules", "squid:AvoidCycle,findbugs:NullReference");
map.put("pageSize", 10l);
map.put("pageIndex", 50);
- map.put("sort", "creation_date");
+ map.put("sort", "CREATION_DATE");
map.put("asc", true);
IssueQuery query = new PublicRubyIssueService(finder).toQuery(map);
assertThat(query.createdBefore()).isEqualTo(DateUtils.parseDateTime("2013-04-17T09:08:24+0200"));
assertThat(query.pageSize()).isEqualTo(10);
assertThat(query.pageIndex()).isEqualTo(50);
- assertThat(query.sort()).isEqualTo(IssueQuery.Sort.CREATION_DATE);
+ assertThat(query.sort()).isEqualTo(IssueQuery.SORT_BY_CREATION_DATE);
assertThat(query.asc()).isTrue();
}