diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2014-05-20 17:36:55 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2014-05-20 21:22:56 +0200 |
commit | 6af08cecc609d8cfd7e59338398a37cc954828b7 (patch) | |
tree | ef3ff1cba93c8e4d84e866897c66981d248fcd39 /sonar-plugin-api | |
parent | 4c3a69653fcc9293f62f7382d51303e2e7f55338 (diff) | |
download | sonarqube-6af08cecc609d8cfd7e59338398a37cc954828b7.tar.gz sonarqube-6af08cecc609d8cfd7e59338398a37cc954828b7.zip |
SONAR-5007 improve conversion fk of ES doc to WS response
Diffstat (limited to 'sonar-plugin-api')
4 files changed, 90 insertions, 31 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java index 792fa6837da..9d969a68ce7 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java @@ -93,6 +93,10 @@ public abstract class Request { return Long.parseLong(s); } + public <E extends Enum<E>> E mandatoryParamAsEnum(String key, Class<E> enumClass) { + return Enum.valueOf(enumClass, mandatoryParam(key)); + } + public List<String> mandatoryParamAsStrings(String key) { List<String> values = paramAsStrings(key); if (values == null) { @@ -131,6 +135,22 @@ public abstract class Request { } @CheckForNull + public <E extends Enum<E>> List<E> paramAsEnums(String key, Class<E> enumClass) { + WebService.Param definition = action.param(key); + String value = readParamOrDefaultValue(key, definition); + if (value == null) { + return null; + } + Iterable<String> values = Splitter.on(',').omitEmptyStrings().trimResults().split(value); + List<E> result = Lists.newArrayList(); + for (String s : values) { + validate(s, definition); + result.add(Enum.valueOf(enumClass, s)); + } + return result; + } + + @CheckForNull private String readParamOrDefaultValue(String key, @Nullable WebService.Param definition) { if (definition == null) { String message = String.format("BUG - parameter '%s' is undefined for action '%s'", key, action.key()); @@ -212,4 +232,10 @@ public abstract class Request { String s = param(key); return s == null ? null : Long.parseLong(s); } + + @CheckForNull + public <E extends Enum<E>> E paramAsEnum(String key, Class<E> enumClass) { + String s = param(key); + return s == null ? null : Enum.valueOf(enumClass, s); + } } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java index 5e464a4200f..9508fd1d179 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java @@ -32,10 +32,12 @@ import org.sonar.api.ServerExtension; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; - import java.io.IOException; import java.net.URL; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Defines a web service. Note that contrary to the deprecated {@link org.sonar.api.web.Webservice} @@ -465,33 +467,27 @@ public interface WebService extends ServerExtension { /** * Exhaustive list of possible values when it makes sense, for example * list of severities. + * <p/> + * Note that the parameter supports values with type Iterable, for example : + * <pre> + * setPossibleValues(Arrays.asList("one", "two"), "three", "four"); + * </pre> * * @since 4.4 */ public NewParam setPossibleValues(@Nullable Object... values) { - return setPossibleValues(values == null ? (Collection) null : Arrays.asList(values)); - } - - /** - * @since 4.4 - */ - public NewParam setBooleanPossibleValues() { - return setPossibleValues("true", "false"); - } - - /** - * Exhaustive list of possible values when it makes sense, for example - * list of severities. - * - * @since 4.4 - */ - public NewParam setPossibleValues(@Nullable Collection values) { if (values == null) { this.possibleValues = null; } else { this.possibleValues = Sets.newLinkedHashSet(); for (Object value : values) { - this.possibleValues.add(value.toString()); + if (value instanceof Iterable) { + for (Object o : (Iterable) value) { + this.possibleValues.add(o.toString()); + } + } else { + this.possibleValues.add(value.toString()); + } } } return this; @@ -500,11 +496,43 @@ public interface WebService extends ServerExtension { /** * @since 4.4 */ + public NewParam setBooleanPossibleValues() { + return setPossibleValues("true", "false"); + } + + /** + * @since 4.4 + */ public NewParam setDefaultValue(@Nullable String s) { this.defaultValue = s; return this; } + @CheckForNull + public String description() { + return description; + } + + @CheckForNull + public String exampleValue() { + return exampleValue; + } + + @CheckForNull + public String defaultValue() { + return defaultValue; + } + + @CheckForNull + public boolean isRequired() { + return required; + } + + @CheckForNull + public Set<String> possibleValues() { + return possibleValues; + } + @Override public String toString() { return key; diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java index 6387ecc42f0..5450a63e22a 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java @@ -327,17 +327,6 @@ public class JsonWriter { /** * @throws org.sonar.api.utils.text.WriterException on any failure */ - public JsonWriter prop(String name, @Nullable Object value) { - if(value != null) { - return name(name).value(value.toString()); - } else { - return this; - } - } - - /** - * @throws org.sonar.api.utils.text.WriterException on any failure - */ public JsonWriter prop(String name, boolean value) { return name(name).value(value); } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java index ac46d611fc9..76421b05c18 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java @@ -22,6 +22,7 @@ package org.sonar.api.server.ws; import com.google.common.collect.Maps; import org.junit.Before; import org.junit.Test; +import org.sonar.api.rule.RuleStatus; import javax.annotation.Nullable; import java.util.Map; @@ -68,10 +69,12 @@ public class RequestTest { action.createParam("a_string"); action.createParam("a_boolean"); action.createParam("a_number"); + action.createParam("a_enum"); action.createParam("a_required_string").setRequired(true); action.createParam("a_required_boolean").setRequired(true); action.createParam("a_required_number").setRequired(true); + action.createParam("a_required_enum").setRequired(true); action.createParam("has_default_string").setDefaultValue("the_default_string"); action.createParam("has_default_number").setDefaultValue("10"); @@ -107,11 +110,13 @@ public class RequestTest { request.setParam("a_required_string", "foo"); request.setParam("a_required_number", "42"); request.setParam("a_required_boolean", "true"); + request.setParam("a_required_enum", "BETA"); assertThat(request.mandatoryParam("a_required_string")).isEqualTo("foo"); assertThat(request.mandatoryParamAsBoolean("a_required_boolean")).isTrue(); assertThat(request.mandatoryParamAsInt("a_required_number")).isEqualTo(42); assertThat(request.mandatoryParamAsLong("a_required_number")).isEqualTo(42L); + assertThat(request.mandatoryParamAsEnum("a_required_enum", RuleStatus.class)).isEqualTo(RuleStatus.BETA); } @Test @@ -161,6 +166,17 @@ public class RequestTest { } @Test + public void param_as_enum() throws Exception { + assertThat(request.setParam("a_enum", "BETA").paramAsEnum("a_enum", RuleStatus.class)).isEqualTo(RuleStatus.BETA); + } + + @Test + public void param_as_enums() throws Exception { + assertThat(request.setParam("a_enum", "BETA,READY").paramAsEnums("a_enum", RuleStatus.class)).containsOnly( + RuleStatus.BETA, RuleStatus.READY); + } + + @Test public void param_as_strings() throws Exception { assertThat(request.paramAsStrings("a_string")).isNull(); assertThat(request.setParam("a_string", "").paramAsStrings("a_string")).isEmpty(); |