From 2d2eee8841f2946d0c493af74a62986470c51356 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Wed, 30 Apr 2014 11:03:32 +0200 Subject: [PATCH] Continue draft of new WS /api/rules --- .../org/sonar/server/rule2/RuleIndex.java | 5 ++ .../org/sonar/server/rule2/RuleQuery.java | 67 ++++++++++++++----- .../org/sonar/server/rule2/RuleService.java | 9 ++- .../sonar/server/rule2/ws/SearchAction.java | 11 +++ 4 files changed, 71 insertions(+), 21 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java index 229d65bc2b0..be2b188bcb5 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java @@ -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 { } return null; } + + public Results search(RuleQuery query) { + throw new UnsupportedOperationException("TODO"); + } } diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleQuery.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleQuery.java index 156b4503d94..3b6e261c80c 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleQuery.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleQuery.java @@ -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 languages; + private List repositories; + private List severities; + private List statuses; + private List tags; + private List 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 getLanguages() { return languages; } - public RuleQuery setLanguages(@Nullable String[] languages) { + public RuleQuery setLanguages(@Nullable List languages) { this.languages = languages; return this; } @CheckForNull - public String[] getRepositories() { + public List getRepositories() { return repositories; } - public RuleQuery setRepositories(@Nullable String[] repositories) { + public RuleQuery setRepositories(@Nullable List repositories) { this.repositories = repositories; return this; } @CheckForNull - public String[] getSeverities() { + public List getSeverities() { return severities; } - public RuleQuery setSeverities(@Nullable String[] severities) { + public RuleQuery setSeverities(@Nullable List 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 getStatuses() { return statuses; } - public RuleQuery setStatuses(@Nullable RuleStatus[] statuses) { + public RuleQuery setStatuses(@Nullable List statuses) { this.statuses = statuses; return this; } @CheckForNull - public String[] getTags() { + public List getTags() { return tags; } - public RuleQuery setTags(@Nullable String[] tags) { + public RuleQuery setTags(@Nullable List tags) { this.tags = tags; return this; } @CheckForNull - public String[] getDebtCharacteristics() { + public List getDebtCharacteristics() { return debtCharacteristics; } - public RuleQuery setDebtCharacteristics(@Nullable String[] debtCharacteristics) { + public RuleQuery setDebtCharacteristics(@Nullable List 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; + } } diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java index ad8853d6599..76adf7c81f2 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java @@ -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 search(RuleQuery query) { diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java index 30dff403069..d980b0b41d4 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java @@ -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); } } -- 2.39.5