aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sonar-ws/build.gradle1
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/MediaTypes.java69
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/WsUtils.java52
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/BaseRequest.java18
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/BaseService.java6
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java6
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/LocalWsConnector.java2
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java3
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/OkHttpClientBuilder.java2
-rw-r--r--sonar-ws/src/test/java/org/sonarqube/ws/client/BaseRequestTest.java8
-rw-r--r--sonar-ws/src/test/java/org/sonarqube/ws/client/LocalWsConnectorTest.java6
-rw-r--r--sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java2
12 files changed, 111 insertions, 64 deletions
diff --git a/sonar-ws/build.gradle b/sonar-ws/build.gradle
index 6f8aa851426..c5b91876379 100644
--- a/sonar-ws/build.gradle
+++ b/sonar-ws/build.gradle
@@ -12,7 +12,6 @@ configurations {
dependencies {
// please keep list ordered
- compile 'com.google.guava:guava'
compile 'com.google.protobuf:protobuf-java'
compile 'com.squareup.okhttp3:okhttp'
compile 'commons-io:commons-io'
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/MediaTypes.java b/sonar-ws/src/main/java/org/sonarqube/ws/MediaTypes.java
index f59f4c2b54c..6ac901845a1 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/MediaTypes.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/MediaTypes.java
@@ -19,12 +19,13 @@
*/
package org.sonarqube.ws;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableMap;
+import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
+import static org.sonarqube.ws.WsUtils.isNullOrEmpty;
+
/**
* @since 5.3
*/
@@ -40,36 +41,38 @@ public final class MediaTypes {
public static final String DEFAULT = "application/octet-stream";
public static final String SVG = "image/svg+xml";
- private static final Map<String, String> MAP = new ImmutableMap.Builder<String, String>()
- .put("js", JAVASCRIPT)
- .put("json", JSON)
- .put("zip", ZIP)
- .put("tgz", "application/tgz")
- .put("ps", "application/postscript")
- .put("jnlp", "application/jnlp")
- .put("jar", "application/java-archive")
- .put("xls", "application/vnd.ms-excel")
- .put("ppt", "application/vnd.ms-powerpoint")
- .put("tar", "application/x-tar")
- .put("xml", XML)
- .put("dtd", "application/xml-dtd")
- .put("xslt", "application/xslt+xml")
- .put("bmp", "image/bmp")
- .put("gif", "image/gif")
- .put("jpg", "image/jpeg")
- .put("jpeg", "image/jpeg")
- .put("tiff", "image/tiff")
- .put("png", "image/png")
- .put("svg", SVG)
- .put("ico", "image/x-icon")
- .put("txt", TXT)
- .put("csv", "text/csv")
- .put("properties", TXT)
- .put("rtf", "text/rtf")
- .put("html", HTML)
- .put("css", "text/css")
- .put("tsv", "text/tab-separated-values")
- .build();
+ private static final Map<String, String> MAP = new HashMap<>();
+
+ static {
+ MAP.put("js", JAVASCRIPT);
+ MAP.put("json", JSON);
+ MAP.put("zip", ZIP);
+ MAP.put("tgz", "application/tgz");
+ MAP.put("ps", "application/postscript");
+ MAP.put("jnlp", "application/jnlp");
+ MAP.put("jar", "application/java-archive");
+ MAP.put("xls", "application/vnd.ms-excel");
+ MAP.put("ppt", "application/vnd.ms-powerpoint");
+ MAP.put("tar", "application/x-tar");
+ MAP.put("xml", XML);
+ MAP.put("dtd", "application/xml-dtd");
+ MAP.put("xslt", "application/xslt+xml");
+ MAP.put("bmp", "image/bmp");
+ MAP.put("gif", "image/gif");
+ MAP.put("jpg", "image/jpeg");
+ MAP.put("jpeg", "image/jpeg");
+ MAP.put("tiff", "image/tiff");
+ MAP.put("png", "image/png");
+ MAP.put("svg", SVG);
+ MAP.put("ico", "image/x-icon");
+ MAP.put("txt", TXT);
+ MAP.put("csv", "text/csv");
+ MAP.put("properties", TXT);
+ MAP.put("rtf", "text/rtf");
+ MAP.put("html", HTML);
+ MAP.put("css", "text/css");
+ MAP.put("tsv", "text/tab-separated-values");
+ }
private MediaTypes() {
// only static methods
@@ -78,7 +81,7 @@ public final class MediaTypes {
public static String getByFilename(String filename) {
String extension = FilenameUtils.getExtension(filename);
String mime = null;
- if (!Strings.isNullOrEmpty(extension)) {
+ if (!isNullOrEmpty(extension)) {
mime = MAP.get(extension.toLowerCase(Locale.ENGLISH));
}
return mime != null ? mime : DEFAULT;
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/WsUtils.java b/sonar-ws/src/main/java/org/sonarqube/ws/WsUtils.java
new file mode 100644
index 00000000000..5a332795bae
--- /dev/null
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/WsUtils.java
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonarqube.ws;
+
+import javax.annotation.Nullable;
+
+import static java.lang.String.format;
+
+public class WsUtils {
+
+ private WsUtils() {
+ // Only static methods here
+ }
+
+ public static void checkArgument(boolean expression) {
+ if (!expression) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ public static void checkArgument(boolean expression, String message, Object... args) {
+ if (!expression) {
+ throw new IllegalArgumentException(format(message, args));
+ }
+ }
+
+ public static boolean isNullOrEmpty(@Nullable String string) {
+ return string == null || string.length() == 0;
+ }
+
+ public static String nullToEmpty(@Nullable String string) {
+ return string == null ? "" : string;
+ }
+}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseRequest.java
index deb84746b60..c1d40bb5dcf 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseRequest.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseRequest.java
@@ -19,8 +19,7 @@
*/
package org.sonarqube.ws.client;
-import com.google.common.collect.LinkedListMultimap;
-import com.google.common.collect.ListMultimap;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -36,11 +35,11 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonarqube.ws.MediaTypes;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static java.util.Collections.singletonList;
+import static java.util.Collections.emptyList;
import static java.util.Collections.unmodifiableSet;
import static java.util.Objects.requireNonNull;
+import static org.sonarqube.ws.WsUtils.checkArgument;
+import static org.sonarqube.ws.WsUtils.isNullOrEmpty;
abstract class BaseRequest<SELF extends BaseRequest> implements WsRequest {
@@ -163,7 +162,7 @@ abstract class BaseRequest<SELF extends BaseRequest> implements WsRequest {
private static class DefaultParameters implements Parameters {
// preserve insertion order
- private final ListMultimap<String, String> keyValues = LinkedListMultimap.create();
+ private final Map<String, List<String>> keyValues = new LinkedHashMap<>();
@Override
@CheckForNull
@@ -173,7 +172,7 @@ abstract class BaseRequest<SELF extends BaseRequest> implements WsRequest {
@Override
public List<String> getValues(String key) {
- return keyValues.get(key);
+ return keyValues.containsKey(key) ? keyValues.get(key) : emptyList();
}
@Override
@@ -185,7 +184,7 @@ abstract class BaseRequest<SELF extends BaseRequest> implements WsRequest {
checkArgument(!isNullOrEmpty(key));
checkArgument(value != null);
- keyValues.putAll(key, singletonList(value));
+ keyValues.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
return this;
}
@@ -193,8 +192,7 @@ abstract class BaseRequest<SELF extends BaseRequest> implements WsRequest {
checkArgument(!isNullOrEmpty(key));
checkArgument(values != null && !values.isEmpty());
- this.keyValues.putAll(key, values.stream().map(Object::toString).filter(Objects::nonNull).collect(Collectors.toList()));
-
+ keyValues.computeIfAbsent(key, k -> new ArrayList<>()).addAll(values.stream().map(Object::toString).filter(Objects::nonNull).collect(Collectors.toList()));
return this;
}
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseService.java
index c13afae671f..b3abea01c2c 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseService.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/BaseService.java
@@ -28,8 +28,8 @@ import javax.annotation.Nullable;
import org.apache.commons.io.IOUtils;
import org.sonarqube.ws.MediaTypes;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.sonarqube.ws.WsUtils.checkArgument;
+import static org.sonarqube.ws.WsUtils.isNullOrEmpty;
public abstract class BaseService {
@@ -37,7 +37,7 @@ public abstract class BaseService {
protected final String controller;
public BaseService(WsConnector wsConnector, String controllerPath) {
- checkArgument(!isNullOrEmpty(controllerPath));
+ checkArgument(!isNullOrEmpty(controllerPath), "Controller path cannot be empty");
this.wsConnector = wsConnector;
this.controller = controllerPath;
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java
index adc676b1577..45533360e70 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java
@@ -37,15 +37,15 @@ import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static com.google.common.base.Strings.nullToEmpty;
import static java.lang.String.format;
import static java.net.HttpURLConnection.HTTP_MOVED_PERM;
import static java.net.HttpURLConnection.HTTP_MOVED_TEMP;
import static java.nio.charset.StandardCharsets.UTF_8;
import static okhttp3.internal.http.StatusLine.HTTP_PERM_REDIRECT;
import static okhttp3.internal.http.StatusLine.HTTP_TEMP_REDIRECT;
+import static org.sonarqube.ws.WsUtils.checkArgument;
+import static org.sonarqube.ws.WsUtils.isNullOrEmpty;
+import static org.sonarqube.ws.WsUtils.nullToEmpty;
/**
* Connect to any SonarQube server available through HTTP or HTTPS.
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/LocalWsConnector.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/LocalWsConnector.java
index 1e80650ded8..8db51502c6f 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/LocalWsConnector.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/LocalWsConnector.java
@@ -19,7 +19,6 @@
*/
package org.sonarqube.ws.client;
-import com.google.common.annotations.VisibleForTesting;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -41,7 +40,6 @@ class LocalWsConnector implements WsConnector {
this.localConnector = localConnector;
}
- @VisibleForTesting
LocalConnector localConnector() {
return localConnector;
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java
index 2252dd3c4f1..9cb8785417a 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java
@@ -19,7 +19,6 @@
*/
package org.sonarqube.ws.client;
-import com.google.common.base.Throwables;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -78,7 +77,7 @@ public class MockWsResponse extends BaseResponse {
try {
return setContent(IOUtils.toByteArray(is));
} catch (IOException e) {
- throw Throwables.propagate(e);
+ throw new IllegalArgumentException(e);
}
}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/OkHttpClientBuilder.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/OkHttpClientBuilder.java
index 1ed791cd267..03ebe015237 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/OkHttpClientBuilder.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/OkHttpClientBuilder.java
@@ -47,9 +47,9 @@ import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
-import static com.google.common.base.Strings.nullToEmpty;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Arrays.asList;
+import static org.sonarqube.ws.WsUtils.nullToEmpty;
/**
* Helper to build an instance of {@link okhttp3.OkHttpClient} that
diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/BaseRequestTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/BaseRequestTest.java
index e2f6891eb9f..e07dfbc1255 100644
--- a/sonar-ws/src/test/java/org/sonarqube/ws/client/BaseRequestTest.java
+++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/BaseRequestTest.java
@@ -19,7 +19,6 @@
*/
package org.sonarqube.ws.client;
-import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.List;
import org.assertj.core.data.MapEntry;
@@ -28,7 +27,6 @@ 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.Arrays.asList;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -70,17 +68,17 @@ public class BaseRequestTest {
assertParameters(entry("keyB", "b"), entry("keyA", "a"));
assertMultiValueParameters(entry("keyB", singletonList("b")), entry("keyA", singletonList("a")));
- underTest.setParam("keyC", ImmutableList.of("c1", "c2", "c3"));
+ underTest.setParam("keyC", asList("c1", "c2", "c3"));
assertParameters(entry("keyB", "b"), entry("keyA", "a"), entry("keyC", "c1"));
assertMultiValueParameters(
entry("keyB", singletonList("b")),
entry("keyA", singletonList("a")),
- entry("keyC", ImmutableList.of("c1", "c2", "c3")));
+ entry("keyC", asList("c1", "c2", "c3")));
}
@Test
public void skip_null_value_in_multi_param() {
- underTest.setParam("key", newArrayList("v1", null, "", "v3"));
+ underTest.setParam("key", asList("v1", null, "", "v3"));
assertMultiValueParameters(entry("key", asList("v1", "", "v3")));
}
diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/LocalWsConnectorTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/LocalWsConnectorTest.java
index a43f941e637..649d910339e 100644
--- a/sonar-ws/src/test/java/org/sonarqube/ws/client/LocalWsConnectorTest.java
+++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/LocalWsConnectorTest.java
@@ -19,9 +19,9 @@
*/
package org.sonarqube.ws.client;
-import com.google.common.collect.ImmutableMap;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.IOUtils;
@@ -57,7 +57,9 @@ public class LocalWsConnectorTest {
WsResponse wsResponse = underTest.call(wsRequest);
- verifyRequested("POST", "api/issues/search", MediaTypes.JSON, ImmutableMap.of("foo", "bar"));
+ Map<String, String> expectedParams = new HashMap<>();
+ expectedParams.put("foo", "bar");
+ verifyRequested("POST", "api/issues/search", MediaTypes.JSON, expectedParams);
assertThat(wsResponse.code()).isEqualTo(400);
assertThat(wsResponse.content()).isEqualTo("{}");
assertThat(IOUtils.toString(wsResponse.contentReader())).isEqualTo("{}");
diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java
index e32a4e1a405..4fbecc55ce1 100644
--- a/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java
+++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java
@@ -19,7 +19,6 @@
*/
package org.sonarqube.ws.client;
-import com.google.common.base.Joiner;
import com.google.protobuf.Parser;
import java.util.ArrayList;
import java.util.List;
@@ -89,7 +88,6 @@ import static org.mockito.Mockito.spy;
*
*/
public class ServiceTester<T extends BaseService> extends ExternalResource {
- private static final Joiner COMMA_JOINER = Joiner.on(",");
private final T underTest;
private final List<GetCall> getCalls = new ArrayList<>();