import java.util.Map;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
+import org.onap.dcaegen2.services.sdk.rest.services.model.ClientModel;
+import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
+import reactor.netty.ByteBufFlux;
import reactor.netty.http.client.HttpClient;
import reactor.netty.http.client.HttpClientRequest;
import reactor.netty.http.client.HttpClientResponse;
return get(url, context, Collections.EMPTY_MAP, bodyClass);
}
- public <T> Mono<T> get(String url, RequestDiagnosticContext context, Map<String, String> customHeaders, Class<T> bodyClass) {
- final HttpClient clientWithHeaders = httpClient
- .doOnRequest((req, conn) -> logRequest(context, req))
- .doOnResponse((rsp, conn) -> logResponse(context, rsp))
- .headers(hdrs -> context.remoteCallHttpHeaders().forEach((BiConsumer<String, String>) hdrs::set))
- .headers(hdrs -> customHeaders.forEach(hdrs::set));
+ public <T> Mono<T> get(String url, RequestDiagnosticContext context, Map<String, String> customHeaders,
+ Class<T> bodyClass) {
+ final HttpClient clientWithHeaders = getHttpClientWithHeaders(context, customHeaders);
return callHttpGet(clientWithHeaders, url, bodyClass);
}
return callHttpGet(httpClient, url, bodyClass);
}
+ public Mono<Integer> post(String url, RequestDiagnosticContext context, Map<String, String> customHeaders,
+ JsonBodyBuilder jsonBodyBuilder, ClientModel clientModel) {
+ final HttpClient clientWithHeaders = getHttpClientWithHeaders(context, customHeaders);
+ return callHttpPost(clientWithHeaders, url, jsonBodyBuilder, clientModel);
+ }
+
+ public Mono<Integer> patch(String url, RequestDiagnosticContext context, Map<String, String> customHeaders,
+ JsonBodyBuilder jsonBodyBuilder, ClientModel clientModel) {
+ final HttpClient clientWithHeaders = getHttpClientWithHeaders(context, customHeaders);
+ return callHttpPatch(clientWithHeaders, url, jsonBodyBuilder, clientModel);
+ }
+
+ private HttpClient getHttpClientWithHeaders(RequestDiagnosticContext context, Map<String, String> customHeaders) {
+ final HttpClient clientWithHeaders = httpClient
+ .doOnRequest((req, conn) -> logRequest(context, req))
+ .doOnResponse((rsp, conn) -> logResponse(context, rsp))
+ .headers(hdrs -> context.remoteCallHttpHeaders().forEach((BiConsumer<String, String>) hdrs::set))
+ .headers(hdrs -> customHeaders.forEach(hdrs::set));
+ return clientWithHeaders;
+ }
+
private <T> Mono<T> callHttpGet(HttpClient client, String url, Class<T> bodyClass) {
return client.get()
.uri(url)
.map(body -> parseJson(body, bodyClass));
}
+ private <T extends ClientModel> Mono<Integer> callHttpPost(HttpClient client, String url,
+ JsonBodyBuilder<T> jsonBodyBuilder, T clientModel) {
+ return client.baseUrl(url).post()
+ .send(ByteBufFlux.fromString(Mono.just(jsonBodyBuilder.createJsonBody(clientModel))))
+ .responseSingle((httpClientResponse, byteBufMono) -> Mono.just(httpClientResponse.status().code()));
+ }
+
+ private <T extends ClientModel> Mono<Integer> callHttpPatch(HttpClient client, String url,
+ JsonBodyBuilder<T> jsonBodyBuilder, T clientModel) {
+ return client.baseUrl(url).patch()
+ .send(ByteBufFlux.fromString(Mono.just(jsonBodyBuilder.createJsonBody(clientModel))))
+ .responseSingle((httpClientResponse, byteBufMono) -> Mono.just(httpClientResponse.status().code()));
+ }
+
private Exception createException(String url, HttpClientResponse response) {
return new IOException(String.format("Request failed for URL '%s'. Response code: %s",
url,