]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8004 WS settings/set fix BaseRequest
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 1 Sep 2016 14:06:04 +0000 (16:06 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 1 Sep 2016 14:06:04 +0000 (16:06 +0200)
sonar-ws/src/main/java/org/sonarqube/ws/client/BaseRequest.java
sonar-ws/src/test/java/org/sonarqube/ws/client/BaseRequestTest.java

index 57846b6f2c28be167954cb44a0084ee70e6b8ea7..5357d581a7d39ebe4c67674eb44e16ce75c63f71 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -68,24 +69,48 @@ abstract class BaseRequest<SELF extends BaseRequest> implements WsRequest {
     return (SELF) this;
   }
 
-  /**
-   * To set a multi value parameters, provide a Collection with the values
-   */
-  public SELF setParam(String key, @Nullable Object value) {
+  public SELF setParam(String key, @Nullable String value) {
+    return setSingleValueParam(key, value);
+  }
+
+  public SELF setParam(String key, @Nullable Integer value) {
+    return setSingleValueParam(key, value);
+  }
+
+  public SELF setParam(String key, @Nullable Long value) {
+    return setSingleValueParam(key, value);
+  }
+
+  public SELF setParam(String key, @Nullable Float value) {
+    return setSingleValueParam(key, value);
+  }
+
+  public SELF setParam(String key, @Nullable Boolean value) {
+    return setSingleValueParam(key, value);
+  }
+
+  private SELF setSingleValueParam(String key, @Nullable Object value) {
     checkArgument(!isNullOrEmpty(key), "a WS parameter key cannot be null");
     if (value == null) {
       return (SELF) this;
     }
+    parameters.setValue(key, value.toString());
+
+    return (SELF) this;
+  }
 
-    if (value instanceof Collection) {
-      Collection<Object> values = (Collection<Object>) value;
-      if (values.isEmpty()) {
-        return (SELF) this;
-      }
-      parameters.setValues(key, values.stream().map(Object::toString).collect(Collectors.toList()));
-    } else {
-      parameters.setValue(key, value.toString());
+  public SELF setParam(String key, @Nullable Collection<? extends Object> values) {
+    checkArgument(!isNullOrEmpty(key), "a WS parameter key cannot be null");
+    if (values == null || values.isEmpty()) {
+      return (SELF) this;
     }
+
+    parameters.setValues(key, values.stream()
+      .filter(Objects::nonNull)
+      .map(Object::toString)
+      .filter(value -> !value.isEmpty())
+      .collect(Collectors.toList()));
+
     return (SELF) this;
   }
 
index 1abb05f2db39beb11f88c098a0ebc2e7771ab430..ce2f0ad45f9279e9c9a3850429692449b221a99f 100644 (file)
@@ -28,6 +28,7 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.sonarqube.ws.MediaTypes;
 
+import static com.google.common.collect.Lists.newArrayList;
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.data.MapEntry.entry;
@@ -76,9 +77,16 @@ public class BaseRequestTest {
       entry("keyC", ImmutableList.of("c1", "c2", "c3")));
   }
 
+  @Test
+  public void skip_null_value_in_multi_param() {
+    underTest.setParam("key", newArrayList("v1", null, "v3"));
+
+  }
+
   @Test
   public void null_param_value() {
-    underTest.setParam("key", null);
+    Boolean nullBool = null;
+    underTest.setParam("key", nullBool);
     assertThat(underTest.getParams()).isEmpty();
   }