import org.sonarqube.ws.MediaTypes;
import org.sonarqube.ws.client.HttpException;
import org.sonarqube.ws.client.PostRequest;
+import org.sonarqube.ws.client.RequestWithPayload.Part;
import org.sonarqube.ws.client.WsResponse;
import static java.net.URLEncoder.encode;
String upload(File report) {
LOG.debug("Upload report");
long startTime = System.currentTimeMillis();
- PostRequest.Part filePart = new PostRequest.Part(MediaTypes.ZIP, report);
+ Part filePart = new Part(MediaTypes.ZIP, report);
PostRequest post = new PostRequest("api/ce/submit")
.setMediaType(MediaTypes.PROTOBUF)
.setParam("projectKey", moduleHierarchy.root().key())
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2023 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.client;
+
+import java.util.function.Function;
+import okhttp3.Request;
+
+/**
+ * @since 5.3
+ */
+public class DeleteRequest extends RequestWithoutPayload<DeleteRequest> {
+ public DeleteRequest(String path) {
+ super(path);
+ }
+
+ @Override
+ public Method getMethod() {
+ return Method.DELETE;
+ }
+
+ @Override
+ Function<Request.Builder, Request.Builder> addVerbToBuilder() {
+ return Request.Builder::delete;
+ }
+}
*/
package org.sonarqube.ws.client;
+import java.util.function.Function;
+import okhttp3.Request;
+
/**
* @since 5.3
*/
-public class GetRequest extends BaseRequest<GetRequest> {
+public class GetRequest extends RequestWithoutPayload<GetRequest> {
public GetRequest(String path) {
super(path);
}
public Method getMethod() {
return Method.GET;
}
+
+ @Override
+ Function<Request.Builder, Request.Builder> addVerbToBuilder() {
+ return Request.Builder::get;
+ }
}
@Override
public WsResponse call(WsRequest httpRequest) {
- if (httpRequest instanceof GetRequest) {
- return get((GetRequest) httpRequest);
+ if (httpRequest instanceof RequestWithoutPayload) {
+ return executeRequest((RequestWithoutPayload) httpRequest);
}
if (httpRequest instanceof RequestWithPayload) {
return executeRequest((RequestWithPayload) httpRequest);
throw new IllegalArgumentException(format("Unsupported implementation: %s", httpRequest.getClass()));
}
- private WsResponse get(GetRequest getRequest) {
- HttpUrl.Builder urlBuilder = prepareUrlBuilder(getRequest);
- completeUrlQueryParameters(getRequest, urlBuilder);
+ private WsResponse executeRequest(RequestWithoutPayload<?> request) {
+ HttpUrl.Builder urlBuilder = prepareUrlBuilder(request);
+ completeUrlQueryParameters(request, urlBuilder);
- Request.Builder okRequestBuilder = prepareOkRequestBuilder(getRequest, urlBuilder).get();
- return new OkHttpResponse(doCall(prepareOkHttpClient(okHttpClient, getRequest), okRequestBuilder.build()));
+ Request.Builder okRequestBuilder = prepareOkRequestBuilder(request, urlBuilder);
+ okRequestBuilder = request.addVerbToBuilder().apply(okRequestBuilder);
+ return new OkHttpResponse(doCall(prepareOkHttpClient(okHttpClient, request), okRequestBuilder.build()));
}
private WsResponse executeRequest(RequestWithPayload<?> request) {
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2023 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.client;
+
+import java.util.function.Function;
+import okhttp3.Request;
+
+/**
+ * @since 5.3
+ */
+public abstract class RequestWithoutPayload<T extends BaseRequest<RequestWithoutPayload<T>>> extends BaseRequest<RequestWithoutPayload<T>> {
+
+ protected RequestWithoutPayload(String path) {
+ super(path);
+ }
+
+ abstract Function<Request.Builder, Request.Builder> addVerbToBuilder();
+
+}
Headers getHeaders();
enum Method {
- GET, POST, PATCH
+ GET, POST, PATCH, DELETE
}
}
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2023 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.client;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class DeleteRequestTest {
+
+ private DeleteRequest deleteRequest = new DeleteRequest("path");
+
+ @Test
+ public void getMethod_shouldReturnDelete() {
+ assertThat(deleteRequest.getMethod()).isEqualTo(WsRequest.Method.DELETE);
+ }
+
+
+ @Test
+ public void addVerbToBuilder_shouldReturnNonNullResult() {
+ assertThat(deleteRequest.addVerbToBuilder()).isNotNull();
+ }
+}
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2023 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.client;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class GetRequestTest {
+
+ private GetRequest getRequest = new GetRequest("path");
+
+ @Test
+ public void getMethod_shouldReturnGet() {
+ assertThat(getRequest.getMethod()).isEqualTo(WsRequest.Method.GET);
+ }
+
+ @Test
+ public void addVerbToBuilder_shouldReturnNonNullResult() {
+ assertThat(getRequest.addVerbToBuilder()).isNotNull();
+ }
+
+}
@CheckForNull
public GetRequest getGetRequest() {
assertSingleGetCall();
- return getCalls.iterator().next().getRequest();
+ return (GetRequest) getCalls.iterator().next().getRequest();
}
- public RequestAssert<GetRequest> assertThat(GetRequest getRequest) {
+ public RequestAssert<?> assertThat(GetRequest getRequest) {
return new RequestAssert<>(getRequest);
}
}
@Immutable
- public static final class GetCall extends CallWithParser<GetRequest> {
+ public static final class GetCall extends CallWithParser<RequestWithoutPayload<GetRequest>> {
public GetCall(GetRequest getRequest, @Nullable Parser<?> parser) {
super(getRequest, parser);