@@ -55,6 +55,7 @@ import org.sonarqube.ws.Ce; | |||
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; | |||
@@ -201,7 +202,7 @@ public class ReportPublisher implements Startable { | |||
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()) |
@@ -0,0 +1,42 @@ | |||
/* | |||
* 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; | |||
} | |||
} |
@@ -19,10 +19,13 @@ | |||
*/ | |||
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); | |||
} | |||
@@ -31,4 +34,9 @@ public class GetRequest extends BaseRequest<GetRequest> { | |||
public Method getMethod() { | |||
return Method.GET; | |||
} | |||
@Override | |||
Function<Request.Builder, Request.Builder> addVerbToBuilder() { | |||
return Request.Builder::get; | |||
} | |||
} |
@@ -109,8 +109,8 @@ public class HttpConnector implements WsConnector { | |||
@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); | |||
@@ -118,12 +118,13 @@ public class HttpConnector implements WsConnector { | |||
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) { |
@@ -0,0 +1,36 @@ | |||
/* | |||
* 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(); | |||
} |
@@ -51,6 +51,6 @@ public interface WsRequest { | |||
Headers getHeaders(); | |||
enum Method { | |||
GET, POST, PATCH | |||
GET, POST, PATCH, DELETE | |||
} | |||
} |
@@ -0,0 +1,40 @@ | |||
/* | |||
* 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(); | |||
} | |||
} |
@@ -0,0 +1,40 @@ | |||
/* | |||
* 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(); | |||
} | |||
} |
@@ -140,10 +140,10 @@ public class ServiceTester<T extends BaseService> extends ExternalResource { | |||
@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); | |||
} | |||
@@ -189,7 +189,7 @@ public class ServiceTester<T extends BaseService> extends ExternalResource { | |||
} | |||
@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); |