From 318c2405310ad369983c169e3b7b4443b2049253 Mon Sep 17 00:00:00 2001 From: andrzejszukuc Date: Thu, 28 Mar 2019 06:16:08 +0100 Subject: Modified CloudHttpClient in order to be more generic New AaiClients and AaiModels have been added Change-Id: I80151e8296482e39f7f36123210861702c205b7b Signed-off-by: andrzejszukuc Issue-ID: DCAEGEN2-1059 --- rest-services/aai-client/pom.xml | 5 ++ .../aai/client/config/AaiClientConfiguration.java | 3 + .../aai/client/service/http/AaiHttpClient.java | 11 +++- .../http/get/AaiGetServiceInstanceClient.java | 77 ++++++++++++++++++++++ .../client/service/http/get/AaiHttpGetClient.java | 7 +- .../service/http/patch/AaiHttpPatchClient.java | 22 +++++-- .../client/service/http/put/AaiHttpPutClient.java | 12 ++-- 7 files changed, 119 insertions(+), 18 deletions(-) create mode 100644 rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java (limited to 'rest-services/aai-client') diff --git a/rest-services/aai-client/pom.xml b/rest-services/aai-client/pom.xml index 037f183d..641fc4a4 100644 --- a/rest-services/aai-client/pom.xml +++ b/rest-services/aai-client/pom.xml @@ -29,6 +29,11 @@ ${project.version} + + org.apache.commons + commons-text + + org.junit.jupiter junit-jupiter-engine diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/config/AaiClientConfiguration.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/config/AaiClientConfiguration.java index 30bf2538..3a6dbc46 100644 --- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/config/AaiClientConfiguration.java +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/config/AaiClientConfiguration.java @@ -58,6 +58,9 @@ public abstract class AaiClientConfiguration implements Serializable { @Value.Parameter public abstract String aaiPnfPath(); + @Value.Parameter + public abstract String aaiServiceInstancePath(); + @Value.Parameter public abstract Map aaiHeaders(); diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AaiHttpClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AaiHttpClient.java index c88ca0ea..317fab2c 100644 --- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AaiHttpClient.java +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AaiHttpClient.java @@ -20,9 +20,14 @@ package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http; -import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel; import reactor.core.publisher.Mono; -public interface AaiHttpClient { - Mono getAaiResponse(AaiModel aaiModel); +import java.util.function.Function; + +public interface AaiHttpClient { + Mono getAaiResponse(T aaiModel); + + default AaiHttpClient map(final Function fn) { + return aaiModel -> AaiHttpClient.this.getAaiResponse(aaiModel).map(fn); + } } diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java new file mode 100644 index 00000000..f8300eb2 --- /dev/null +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java @@ -0,0 +1,77 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.get; + +import io.vavr.collection.HashMap; +import io.vavr.collection.Map; +import org.apache.commons.text.StringSubstitutor; +import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration; +import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AaiHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; +import org.onap.dcaegen2.services.sdk.rest.services.model.AaiServiceInstanceQueryModel; +import org.onap.dcaegen2.services.sdk.rest.services.uri.URI; +import reactor.core.publisher.Mono; + +import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext; + +public class AaiGetServiceInstanceClient implements + AaiHttpClient { + + //variables for query "/business/customers/customer/${customer}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${serviceInstanceId}" + public static final String CUSTOMER = "customer"; + public static final String SERVICE_TYPE = "serviceType"; + public static final String SERVICE_INSTANCE_ID = "serviceInstanceId"; + + private CloudHttpClient httpGetClient; + private final AaiClientConfiguration configuration; + + public AaiGetServiceInstanceClient(final AaiClientConfiguration configuration, final CloudHttpClient httpGetClient) { + this.configuration = configuration; + this.httpGetClient = httpGetClient; + } + + @Override + public Mono getAaiResponse(AaiServiceInstanceQueryModel aaiModel) { + final Map mapping = HashMap.of( + CUSTOMER, aaiModel.customerId(), + SERVICE_TYPE, aaiModel.serviceType(), + SERVICE_INSTANCE_ID, aaiModel.serviceInstanceId()); + + final StringSubstitutor substitutor = new StringSubstitutor(mapping.toJavaMap()); + final String replaced = substitutor.replace(configuration.aaiServiceInstancePath()); + + return httpGetClient.get( + getUri(replaced), + createRequestDiagnosticContext(), + configuration.aaiHeaders()); + } + + private String getUri(final String endpoint) { + return new URI.URIBuilder() + .scheme(configuration.aaiProtocol()) + .host(configuration.aaiHost()) + .port(configuration.aaiPort()) + .path(configuration.aaiBasePath() + "/" + endpoint) + .build() + .toString(); + } +} \ No newline at end of file diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java index dad1c1f1..1c3f20a6 100644 --- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java @@ -23,13 +23,14 @@ package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.get import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration; import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AaiHttpClient; import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel; import org.onap.dcaegen2.services.sdk.rest.services.uri.URI; import reactor.core.publisher.Mono; import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext; -public final class AaiHttpGetClient implements AaiHttpClient { +public final class AaiHttpGetClient implements AaiHttpClient { private CloudHttpClient httpGetClient; private final AaiClientConfiguration configuration; @@ -41,8 +42,8 @@ public final class AaiHttpGetClient implements AaiHttpClient { } @Override - public Mono getAaiResponse(AaiModel aaiModel) { - return httpGetClient.get(getUri(aaiModel.getCorrelationId()), createRequestDiagnosticContext(), configuration.aaiHeaders(), String.class); + public Mono getAaiResponse(AaiModel aaiModel) { + return httpGetClient.get(getUri(aaiModel.getCorrelationId()), createRequestDiagnosticContext(), configuration.aaiHeaders()); } private String getUri(String pnfName) { diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java index 18511008..f92dba99 100644 --- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java @@ -20,18 +20,22 @@ package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.patch; +import io.vavr.collection.HashMap; +import io.vavr.collection.Map; import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration; import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AaiHttpClient; import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel; import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder; import org.onap.dcaegen2.services.sdk.rest.services.uri.URI; import reactor.core.publisher.Mono; -import reactor.netty.http.client.HttpClientResponse; + import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext; -public final class AaiHttpPatchClient implements AaiHttpClient { +public final class AaiHttpPatchClient implements AaiHttpClient { + private final static Map CONTENT_TYPE = HashMap.of("Content-Type", "application/merge-patch+json"); private CloudHttpClient httpPatchClient; private final AaiClientConfiguration configuration; @@ -44,9 +48,15 @@ public final class AaiHttpPatchClient implements AaiHttpClient getAaiResponse(AaiModel aaiModel) { - return httpPatchClient - .patch(getUri(aaiModel.getCorrelationId()), createRequestDiagnosticContext(), configuration.aaiHeaders(), jsonBodyBuilder, aaiModel); + public Mono getAaiResponse(AaiModel aaiModel) { + final Map headers = CONTENT_TYPE.merge(HashMap.ofAll(configuration.aaiHeaders())); + + return httpPatchClient.patch( + getUri(aaiModel.getCorrelationId()), + createRequestDiagnosticContext(), + headers.toJavaMap(), + jsonBodyBuilder, + aaiModel); } private String getUri(String pnfName) { @@ -57,4 +67,4 @@ public final class AaiHttpPatchClient implements AaiHttpClient { +import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext; + +public class AaiHttpPutClient implements AaiHttpClient { private CloudHttpClient httpPutClient; private final AaiClientConfiguration configuration; @@ -46,8 +46,8 @@ public class AaiHttpPutClient implements AaiHttpClient { } @Override - public Mono getAaiResponse(AaiModel aaiModel) { + public Mono getAaiResponse(AaiModel aaiModel) { return httpPutClient - .put(uri, createRequestDiagnosticContext(), configuration.aaiHeaders(), jsonBodyBuilder, aaiModel); + .put(uri, createRequestDiagnosticContext(), configuration.aaiHeaders(), jsonBodyBuilder, aaiModel); } } -- cgit 1.2.3-korg