]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3755 replace the enum IssueQuery.Sort by String constants
authorSimon Brandhof <simon.brandhof@gmail.com>
Wed, 29 May 2013 08:24:04 +0000 (10:24 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Wed, 29 May 2013 14:26:35 +0000 (16:26 +0200)
sonar-batch/src/main/java/org/sonar/batch/index/Cache.java
sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueQuery.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/RubyIssueService.java
sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java
sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java
sonar-server/src/main/java/org/sonar/server/issue/PublicRubyIssueService.java
sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java
sonar-server/src/test/java/org/sonar/server/issue/PublicRubyIssueServiceTest.java

index fc2c80acefd140ce51d693ff9126d21c7d5fef50..399dafb665f7d9424f270b35cd2f092efff5bdb1 100644 (file)
@@ -27,7 +27,6 @@ import com.persistit.exception.PersistitException;
 import org.apache.commons.lang.builder.ToStringBuilder;
 
 import javax.annotation.CheckForNull;
-
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Iterator;
@@ -35,7 +34,6 @@ import java.util.List;
 import java.util.Set;
 
 /**
- *
  * <p>
  * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}
  * </p>
@@ -192,7 +190,7 @@ public class Cache<K, V extends Serializable> {
   // 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);
@@ -213,7 +211,7 @@ public class Cache<K, V extends Serializable> {
 
   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);
index a87e101942b80c638d58c88a1255e0d908ab399c..3ebf476c91e1693fa82b15b807a1de8e35cac7e6 100644 (file)
   <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>
index f66eb89b3eafae27196c21ca13cd3f9d478e1ea2..41089436f817b247d03059368106c7abe47903ba 100644 (file)
@@ -251,27 +251,27 @@ public class IssueDaoTest extends AbstractDaoTestCase {
   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();
   }
index 26a2cbd712307d08620cb242de9d40fa023a544f..761c2b8294fc7de2d2c8425ee09e0195132ce09f 100644 (file)
 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
@@ -41,9 +42,13 @@ public class IssueQuery {
   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;
@@ -60,7 +65,7 @@ public class IssueQuery {
   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;
 
@@ -159,7 +164,7 @@ public class IssueQuery {
   }
 
   @CheckForNull
-  public Sort sort() {
+  public String sort() {
     return sort;
   }
 
@@ -209,7 +214,7 @@ public class IssueQuery {
     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;
@@ -305,8 +310,11 @@ public class IssueQuery {
       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;
     }
 
@@ -345,7 +353,7 @@ public class IssueQuery {
       } 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;
         }
       }
index dd716651c38647ca39083a97ff95137cd7de89c5..458f123541f736b354e9d6daccbf04585b231f18 100644 (file)
@@ -56,8 +56,9 @@ public interface RubyIssueService extends ServerComponent {
    *   <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>
index fb972c40ceed92a21610c0421a735f1c03f51e7e..5792dc0f63a4b190c591362fb048820b90a93e0e 100644 (file)
@@ -49,7 +49,7 @@ public class IssueQueryTest {
       .assigned(true)
       .createdAfter(new Date())
       .createdBefore(new Date())
-      .sort(IssueQuery.Sort.ASSIGNEE)
+      .sort(IssueQuery.SORT_BY_ASSIGNEE)
       .pageSize(10)
       .pageIndex(2)
       .requiredRole(UserRole.CODEVIEWER)
@@ -67,7 +67,7 @@ public class IssueQueryTest {
     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);
index fb6cca9192276e7e98fa979c06f1d45e95f5a252..64e394bb7311b62601619a66829920be8f14ab48 100644 (file)
@@ -40,30 +40,33 @@ class IssuesFinderSort {
   }
 
   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 {
index 1832775006f94cc58181ff74c65cf40fcb8f8e12..2f12f8ce1f929b1dda40fbd35d499191532b287a 100644 (file)
@@ -85,7 +85,7 @@ public class PublicRubyIssueService implements RubyIssueService {
     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();
index 0b7a18690425a272277d49a41a0bcaafc708bea0..23601d03ed77a785fc353d7fa3be685e5dd75c98 100644 (file)
@@ -42,7 +42,7 @@ public class IssuesFinderSortTest {
     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());
@@ -61,7 +61,7 @@ public class IssuesFinderSortTest {
     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());
@@ -79,7 +79,7 @@ public class IssuesFinderSortTest {
     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());
@@ -101,7 +101,7 @@ public class IssuesFinderSortTest {
     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());
@@ -123,7 +123,7 @@ public class IssuesFinderSortTest {
     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());
@@ -145,7 +145,7 @@ public class IssuesFinderSortTest {
     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());
index d85d8102b154cc050e4198ec9ad2e26104424ecc..8552facf9bbb5777429ebd724d21c500c91b42e6 100644 (file)
@@ -74,7 +74,7 @@ public class PublicRubyIssueServiceTest {
     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);
@@ -94,7 +94,7 @@ public class PublicRubyIssueServiceTest {
     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();
   }