aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2014-05-20 17:36:55 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2014-05-20 21:22:56 +0200
commit6af08cecc609d8cfd7e59338398a37cc954828b7 (patch)
treeef3ff1cba93c8e4d84e866897c66981d248fcd39 /sonar-plugin-api
parent4c3a69653fcc9293f62f7382d51303e2e7f55338 (diff)
downloadsonarqube-6af08cecc609d8cfd7e59338398a37cc954828b7.tar.gz
sonarqube-6af08cecc609d8cfd7e59338398a37cc954828b7.zip
SONAR-5007 improve conversion fk of ES doc to WS response
Diffstat (limited to 'sonar-plugin-api')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java26
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java68
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java11
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java16
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();