]> source.dussan.org Git - sonarqube.git/commitdiff
Continue draft of new WS /api/rules
authorSimon Brandhof <simon.brandhof@gmail.com>
Wed, 30 Apr 2014 09:03:32 +0000 (11:03 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Wed, 30 Apr 2014 09:03:40 +0000 (11:03 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java
sonar-server/src/main/java/org/sonar/server/rule2/RuleQuery.java
sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java
sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java

index 229d65bc2b02bf0111c2e0506ed5ed293b6cf0d0..be2b188bcb57c274039dbae5f1f994b8ac0077bf 100644 (file)
@@ -33,6 +33,7 @@ import org.sonar.server.rule2.RuleDao;
 import org.sonar.core.rule.RuleDto;
 import org.sonar.server.es.ESNode;
 import org.sonar.server.search.BaseIndex;
+import org.sonar.server.search.Results;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
@@ -196,4 +197,8 @@ public class RuleIndex extends BaseIndex<RuleKey, RuleDto> {
     }
     return null;
   }
+
+  public Results search(RuleQuery query) {
+    throw new UnsupportedOperationException("TODO");
+  }
 }
index 156b4503d942fbcc8f5f85e53251ec34fda5a6fa..3b6e261c80c980a4396208fd3f5164a6a9fd273e 100644 (file)
@@ -25,18 +25,31 @@ import org.sonar.api.rule.Severity;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
+import java.util.List;
 
 public class RuleQuery {
 
+  public static enum SortField {
+    NAME, CREATED_AT
+  }
+
   private String key;
   private String queryText;
-  private String[] languages;
-  private String[] repositories;
-  private String[] severities;
-  private RuleStatus[] statuses;
-  private String[] tags;
-  private String[] debtCharacteristics;
+  private List<String> languages;
+  private List<String> repositories;
+  private List<String> severities;
+  private List<RuleStatus> statuses;
+  private List<String> tags;
+  private List<String> debtCharacteristics;
   private Boolean hasDebtCharacteristic;
+  private SortField sortField;
+  private boolean ascendingSort = true;
+
+  /**
+   * @see RuleService#newRuleQuery()
+   */
+  RuleQuery() {
+  }
 
   @CheckForNull
   public String getKey() {
@@ -59,31 +72,31 @@ public class RuleQuery {
   }
 
   @CheckForNull
-  public String[] getLanguages() {
+  public List<String> getLanguages() {
     return languages;
   }
 
-  public RuleQuery setLanguages(@Nullable String[] languages) {
+  public RuleQuery setLanguages(@Nullable List<String> languages) {
     this.languages = languages;
     return this;
   }
 
   @CheckForNull
-  public String[] getRepositories() {
+  public List<String> getRepositories() {
     return repositories;
   }
 
-  public RuleQuery setRepositories(@Nullable String[] repositories) {
+  public RuleQuery setRepositories(@Nullable List<String> repositories) {
     this.repositories = repositories;
     return this;
   }
 
   @CheckForNull
-  public String[] getSeverities() {
+  public List<String> getSeverities() {
     return severities;
   }
 
-  public RuleQuery setSeverities(@Nullable String[] severities) {
+  public RuleQuery setSeverities(@Nullable List<String> severities) {
     if (severities != null) {
       for (String severity : severities) {
         Preconditions.checkArgument(Severity.ALL.contains(severity), "Unknown severity: " + severity);
@@ -94,31 +107,31 @@ public class RuleQuery {
   }
 
   @CheckForNull
-  public RuleStatus[] getStatuses() {
+  public List<RuleStatus> getStatuses() {
     return statuses;
   }
 
-  public RuleQuery setStatuses(@Nullable RuleStatus[] statuses) {
+  public RuleQuery setStatuses(@Nullable List<RuleStatus> statuses) {
     this.statuses = statuses;
     return this;
   }
 
   @CheckForNull
-  public String[] getTags() {
+  public List<String> getTags() {
     return tags;
   }
 
-  public RuleQuery setTags(@Nullable String[] tags) {
+  public RuleQuery setTags(@Nullable List<String> tags) {
     this.tags = tags;
     return this;
   }
 
   @CheckForNull
-  public String[] getDebtCharacteristics() {
+  public List<String> getDebtCharacteristics() {
     return debtCharacteristics;
   }
 
-  public RuleQuery setDebtCharacteristics(@Nullable String[] debtCharacteristics) {
+  public RuleQuery setDebtCharacteristics(@Nullable List<String> debtCharacteristics) {
     this.debtCharacteristics = debtCharacteristics;
     return this;
   }
@@ -132,4 +145,22 @@ public class RuleQuery {
     this.hasDebtCharacteristic = hasDebtCharacteristic;
     return this;
   }
+
+  public SortField getSortField() {
+    return sortField;
+  }
+
+  public RuleQuery setSortField(@Nullable SortField sf) {
+    this.sortField = sf;
+    return this;
+  }
+
+  public boolean isAscendingSort() {
+    return ascendingSort;
+  }
+
+  public RuleQuery setAscendingSort(boolean b) {
+    this.ascendingSort = b;
+    return this;
+  }
 }
index ad8853d6599a8408b0947bf15d9c5337e4e7c323..76adf7c81f2736ad1e04616508de791987dab894 100644 (file)
@@ -24,7 +24,6 @@ import org.sonar.api.rule.RuleKey;
 import org.sonar.core.rule.RuleDao;
 import org.sonar.core.rule.RuleDto;
 import org.sonar.server.search.Hit;
-import org.sonar.server.search.QueryOptions;
 import org.sonar.server.search.Results;
 
 import javax.annotation.CheckForNull;
@@ -54,8 +53,12 @@ public class RuleService implements ServerComponent {
     return null;
   }
 
-  public Results search(RuleQuery query, QueryOptions options) {
-    throw new UnsupportedOperationException("TODO");
+  public RuleQuery newRuleQuery() {
+    return new RuleQuery();
+  }
+
+  public Results search(RuleQuery query) {
+    return index.search(query);
   }
 
   public Collection<Hit> search(RuleQuery query) {
index 30dff403069e9cad33724ed70d74eec082df2036..d980b0b41d48f26a57e5c92fc53f06bd02222f5d 100644 (file)
@@ -25,6 +25,7 @@ import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.RequestHandler;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
+import org.sonar.server.rule2.RuleQuery;
 import org.sonar.server.rule2.RuleService;
 
 /**
@@ -50,6 +51,11 @@ public class SearchAction implements RequestHandler {
       .setDescription("UTF-8 search query")
       .setExampleValue("null pointer");
 
+    action
+      .createParam("repositories")
+      .setDescription("Comma-separated list of repositories")
+      .setExampleValue("checkstyle,findbugs");
+
     action
       .createParam("severities")
       .setDescription("Comma-separated list of default severities. Not the same than severity of rules in Quality profiles.")
@@ -80,6 +86,11 @@ public class SearchAction implements RequestHandler {
 
   @Override
   public void handle(Request request, Response response) {
+    RuleQuery query = service.newRuleQuery();
+    query.setQueryText(request.param("q"));
+    query.setSeverities(request.paramAsStrings("severities"));
+    query.setRepositories(request.paramAsStrings("repositories"));
 
+    service.search(query);
   }
 }