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() {
}
@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);
}
@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;
}
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;
+ }
}
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;
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) {
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;
/**
.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.")
@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);
}
}