From e3595ee528b4ddb9d6ff6e26d812c0e293b34a19 Mon Sep 17 00:00:00 2001 From: Michal Kabaj Date: Thu, 28 Nov 2019 12:21:19 +0100 Subject: aaiclient api refactor - Moved aaiclient code from SDK to PRH improvement of logic fragmentation Issue-ID: DCAEGEN2-1955 Signed-off-by: Michal Kabaj Change-Id: I11d5b92014cdeb036699099113f64fc320cb4dd1 --- .../adapter/aai/api/AaiClientConfiguration.java | 88 ++++++++++++++++++++++ .../prh/adapter/aai/api/AaiHttpClient.java | 32 ++++++++ .../aai/api/get/AaiGetServiceInstanceClient.java | 73 ++++++++++++++++++ .../prh/adapter/aai/api/get/AaiHttpGetClient.java | 58 ++++++++++++++ .../adapter/aai/api/patch/AaiHttpPatchClient.java | 71 +++++++++++++++++ .../prh/adapter/aai/api/put/AaiHttpPutClient.java | 57 ++++++++++++++ .../services/prh/adapter/aai/impl/AaiRequests.java | 85 +++++++++++++++++++++ .../prh/adapter/aai/main/AaiHttpClientFactory.java | 71 +++++++++++++++++ .../services/prh/adapter/aai/model/AaiModel.java | 27 +++++++ .../aai/model/AaiServiceInstanceQueryModel.java | 31 ++++++++ .../prh/adapter/aai/model/ClientModel.java | 24 ++++++ .../services/prh/adapter/aai/model/DmaapModel.java | 24 ++++++ .../prh/adapter/aai/model/JsonBodyBuilder.java | 34 +++++++++ .../services/prh/model/AaiJsonBodyBuilderImpl.java | 5 +- .../services/prh/model/ConsumerDmaapModel.java | 6 +- .../services/prh/model/bbs/LogicalLink.java | 2 +- 16 files changed, 681 insertions(+), 7 deletions(-) create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java create mode 100644 prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java (limited to 'prh-commons/src/main/java/org') diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java new file mode 100644 index 00000000..53e76892 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java @@ -0,0 +1,88 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2018-2019 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.prh.adapter.aai.api; + +import java.io.Serializable; +import java.util.Map; +import org.immutables.gson.Gson; +import org.immutables.value.Value; + +@Value.Immutable(prehash = true) +@Value.Style(builder = "new") +@Gson.TypeAdapters +public abstract class AaiClientConfiguration implements Serializable { + + private static final String PNF_PATH = "/network/pnfs/pnf"; + private static final String SERVICE_INSTANCE_PATH = "/business/customers/customer/${customer}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${serviceInstanceId}"; + + private static final long serialVersionUID = 1L; + + @Value.Parameter + @Value.Default + public String baseUrl() { + return ""; + } + + /** + * Please use baseUrl() instead + */ + @Deprecated + @Value.Default + public String pnfUrl() { + return baseUrl() + PNF_PATH; + } + + @Value.Parameter + public abstract String aaiUserName(); + + @Value.Parameter + public abstract String aaiUserPassword(); + + @Value.Parameter + public abstract Boolean aaiIgnoreSslCertificateErrors(); + + /** + * Please use baseUrl() instead + */ + @Deprecated + @Value.Default + public String aaiServiceInstancePath() { + return SERVICE_INSTANCE_PATH; + } + + @Value.Parameter + public abstract Map aaiHeaders(); + + @Value.Parameter + public abstract String trustStorePath(); + + @Value.Parameter + public abstract String trustStorePasswordPath(); + + @Value.Parameter + public abstract String keyStorePath(); + + @Value.Parameter + public abstract String keyStorePasswordPath(); + + @Value.Parameter + public abstract Boolean enableAaiCertAuth(); +} \ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java new file mode 100644 index 00000000..b72be561 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java @@ -0,0 +1,32 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2018-2019 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.prh.adapter.aai.api; + +import java.util.function.Function; +import reactor.core.publisher.Mono; + +public interface AaiHttpClient { + Mono getAaiResponse(T aaiModel); + + default AaiHttpClient map(final Function fn) { + return aaiModel -> AaiHttpClient.this.getAaiResponse(aaiModel).map(fn); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java new file mode 100644 index 00000000..e6490c62 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java @@ -0,0 +1,73 @@ +/* + * ============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.prh.adapter.aai.api.get; + +import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiGetRequest; +import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext; + +import io.vavr.collection.HashMap; +import io.vavr.collection.Map; +import org.apache.commons.text.StringSubstitutor; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient; +import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiServiceInstanceQueryModel; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.uri.URI; +import reactor.core.publisher.Mono; + +public class AaiGetServiceInstanceClient implements + AaiHttpClient { + + private static final String CUSTOMER = "customer"; + private static final String SERVICE_TYPE = "serviceType"; + private static final String SERVICE_INSTANCE_ID = "serviceInstanceId"; + + private final RxHttpClient httpClient; + private final AaiClientConfiguration configuration; + + public AaiGetServiceInstanceClient(final AaiClientConfiguration configuration, + final RxHttpClient httpClient) { + this.configuration = configuration; + this.httpClient = httpClient; + } + + @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()); + + final HttpRequest getRequest = createAaiGetRequest(getUri(replaced), + createRequestDiagnosticContext(), configuration.aaiHeaders()); + + return httpClient.call(getRequest); + } + + private String getUri(final String endpoint) { + return new URI.URIBuilder().path(configuration.baseUrl() + endpoint).build().toString(); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java new file mode 100644 index 00000000..62c2ef50 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java @@ -0,0 +1,58 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2018-2019 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.prh.adapter.aai.api.get; + +import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiGetRequest; +import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext; + +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient; +import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.uri.URI; +import reactor.core.publisher.Mono; + +public final class AaiHttpGetClient implements AaiHttpClient { + + private final RxHttpClient httpClient; + private final AaiClientConfiguration configuration; + + + public AaiHttpGetClient(AaiClientConfiguration configuration, RxHttpClient httpClient) { + this.configuration = configuration; + this.httpClient = httpClient; + } + + @Override + public Mono getAaiResponse(AaiModel aaiModel) { + final HttpRequest getRequest = createAaiGetRequest(getUri(aaiModel.getCorrelationId()), + createRequestDiagnosticContext(), configuration.aaiHeaders()); + + return httpClient.call(getRequest); + } + + + private String getUri(String pnfName) { + return new URI.URIBuilder().path(configuration.pnfUrl() + "/" + pnfName).build().toString(); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java new file mode 100644 index 00000000..cf65547f --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java @@ -0,0 +1,71 @@ +/*- + * ============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.prh.adapter.aai.api.patch; + +import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiPatchRequest; +import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext; + +import io.vavr.collection.HashMap; +import io.vavr.collection.Map; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient; +import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel; +import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.uri.URI; +import reactor.core.publisher.Mono; + +public final class AaiHttpPatchClient implements AaiHttpClient { + + private final static Map CONTENT_TYPE = HashMap.of("Content-Type", "application/merge-patch+json"); + + private RxHttpClient httpClient; + private final AaiClientConfiguration configuration; + private final JsonBodyBuilder jsonBodyBuilder; + + + public AaiHttpPatchClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder, + RxHttpClient httpClient) { + this.configuration = configuration; + this.jsonBodyBuilder = jsonBodyBuilder; + this.httpClient = httpClient; + } + + public Mono getAaiResponse(AaiModel aaiModel) { + final Map headers = CONTENT_TYPE.merge(HashMap.ofAll(configuration.aaiHeaders())); + + final HttpRequest aaiPatchRequest = createAaiPatchRequest( + getUri(aaiModel.getCorrelationId()), + createRequestDiagnosticContext(), + headers.toJavaMap(), + jsonBodyBuilder, + aaiModel); + + return httpClient.call(aaiPatchRequest); + } + + private String getUri(String pnfName) { + return new URI.URIBuilder() + .path(configuration.pnfUrl() + "/" + pnfName).build().toString(); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java new file mode 100644 index 00000000..590c7c0d --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 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.prh.adapter.aai.api.put; + +import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiPutRequest; +import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext; + +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient; +import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel; +import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient; +import reactor.core.publisher.Mono; + +public class AaiHttpPutClient implements AaiHttpClient { + + private RxHttpClient httpClient; + private final AaiClientConfiguration configuration; + private final JsonBodyBuilder jsonBodyBuilder; + private final String uri; + + public AaiHttpPutClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder, String uri, + RxHttpClient httpClient) { + this.configuration = configuration; + this.jsonBodyBuilder = jsonBodyBuilder; + this.uri = uri; + this.httpClient = httpClient; + } + + @Override + public Mono getAaiResponse(AaiModel aaiModel) { + final HttpRequest aaiPutRequest = createAaiPutRequest(uri, createRequestDiagnosticContext(), + configuration.aaiHeaders(), jsonBodyBuilder, aaiModel); + return httpClient.call(aaiPutRequest); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java new file mode 100644 index 00000000..01e13da7 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java @@ -0,0 +1,85 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2018-2019 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.prh.adapter.aai.impl; + +import io.vavr.collection.HashMap; +import java.util.Map; +import org.onap.dcaegen2.services.prh.adapter.aai.model.ClientModel; +import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.ImmutableHttpRequest; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RequestBody; +import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; + + +public final class AaiRequests { + + private AaiRequests(){} + + public static HttpRequest createAaiPatchRequest(String url, + RequestDiagnosticContext context, + Map customHeaders, + JsonBodyBuilder jsonBodyBuilder, + ClientModel clientModel) { + + return buildAaiRequestWithBody(url, context, customHeaders, + jsonBodyBuilder, clientModel, HttpMethod.PATCH); + } + + public static HttpRequest createAaiPutRequest(String url, + RequestDiagnosticContext context, + Map customHeaders, + JsonBodyBuilder jsonBodyBuilder, + ClientModel clientModel) { + + return buildAaiRequestWithBody(url, context, customHeaders, + jsonBodyBuilder, clientModel, HttpMethod.PUT); + } + + private static HttpRequest buildAaiRequestWithBody(String url, + RequestDiagnosticContext context, + Map customHeaders, + JsonBodyBuilder jsonBodyBuilder, + ClientModel clientModel, + HttpMethod method) { + + String jsonBody = jsonBodyBuilder.createJsonBody(clientModel); + + return ImmutableHttpRequest.builder() + .url(url) + .customHeaders(HashMap.ofAll(customHeaders)) + .diagnosticContext(context) + .body(RequestBody.fromString(jsonBody)) + .method(method) + .build(); + } + + public static HttpRequest createAaiGetRequest(String url, + RequestDiagnosticContext context, + Map customHeaders) { + return ImmutableHttpRequest.builder() + .method(HttpMethod.GET) + .url(url) + .customHeaders(HashMap.ofAll(customHeaders)) + .diagnosticContext(context) + .build(); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java new file mode 100644 index 00000000..69b5cf83 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2018-2019 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.prh.adapter.aai.main; + +import java.nio.file.Paths; +import java.util.UUID; +import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClientFactory; +import org.onap.dcaegen2.services.sdk.rest.services.model.logging.ImmutableRequestDiagnosticContext; +import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; +import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeys; +import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeysStore; +import org.onap.dcaegen2.services.sdk.security.ssl.Passwords; +import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AaiHttpClientFactory { + + private static final Logger LOGGER = LoggerFactory.getLogger(AaiHttpClientFactory.class); + + private final AaiClientConfiguration configuration; + + public AaiHttpClientFactory(AaiClientConfiguration configuration) { + this.configuration = configuration; + } + + public RxHttpClient build() { + LOGGER.debug("Setting ssl context"); + + if (configuration.enableAaiCertAuth()) { + return RxHttpClientFactory.create(createSslKeys()); + } else { + return RxHttpClientFactory.createInsecure(); + } + } + + private SecurityKeys createSslKeys() { + return ImmutableSecurityKeys.builder() + .keyStore(ImmutableSecurityKeysStore.of(Paths.get(configuration.keyStorePath()))) + .keyStorePassword(Passwords.fromPath(Paths.get(configuration.keyStorePasswordPath()))) + .trustStore(ImmutableSecurityKeysStore.of(Paths.get(configuration.trustStorePath()))) + .trustStorePassword(Passwords.fromPath(Paths.get(configuration.trustStorePasswordPath()))) + .build(); + } + + public static RequestDiagnosticContext createRequestDiagnosticContext() { + return ImmutableRequestDiagnosticContext.builder() + .invocationId(UUID.randomUUID()).requestId(UUID.randomUUID()).build(); + } + +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java new file mode 100644 index 00000000..0d99abbd --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java @@ -0,0 +1,27 @@ +/* + * ============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.prh.adapter.aai.model; + +@FunctionalInterface +public interface AaiModel extends ClientModel { + + String getCorrelationId(); +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java new file mode 100644 index 00000000..bc87a865 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java @@ -0,0 +1,31 @@ +/* + * ============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.prh.adapter.aai.model; + +import org.immutables.value.Value; + +@Value.Style(stagedBuilder = true) +@Value.Immutable +public interface AaiServiceInstanceQueryModel extends ClientModel { + String customerId(); + String serviceType(); + String serviceInstanceId(); +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java new file mode 100644 index 00000000..4c1d2e1e --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java @@ -0,0 +1,24 @@ +/* + * ============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.prh.adapter.aai.model; + +public interface ClientModel { +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java new file mode 100644 index 00000000..99c9e2a6 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java @@ -0,0 +1,24 @@ +/* + * ============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.prh.adapter.aai.model; + +public interface DmaapModel extends ClientModel { +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java new file mode 100644 index 00000000..c13798f9 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java @@ -0,0 +1,34 @@ +/* + * ============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.prh.adapter.aai.model; + +@FunctionalInterface +public interface JsonBodyBuilder { + + /** + * Method for serialization object by GSON. + * + * @param t - object which will be serialized + * @return string from serialization + */ + + String createJsonBody(T t); +} \ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java index 7ff9b8b6..c53da879 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java @@ -22,10 +22,9 @@ package org.onap.dcaegen2.services.prh.model; import com.google.gson.GsonBuilder; import com.google.gson.TypeAdapterFactory; -import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder; -import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.JsonBodyBuilder; - import java.util.ServiceLoader; +import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder; +import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder; import org.springframework.util.StringUtils; diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java index d492e6d7..7afb7f10 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java @@ -22,11 +22,11 @@ package org.onap.dcaegen2.services.prh.model; import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; -import org.springframework.lang.Nullable; import org.immutables.gson.Gson; import org.immutables.value.Value; -import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiModel; -import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.DmaapModel; +import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel; +import org.onap.dcaegen2.services.prh.adapter.aai.model.DmaapModel; +import org.springframework.lang.Nullable; /** * @author Przemysław Wąsala on 5/8/18 diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java index 61946158..ffef0923 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java @@ -22,9 +22,9 @@ package org.onap.dcaegen2.services.prh.model.bbs; import com.google.gson.annotations.SerializedName; import org.immutables.gson.Gson; import org.immutables.value.Value; +import org.onap.dcaegen2.services.prh.adapter.aai.model.ClientModel; import org.onap.dcaegen2.services.prh.model.ImmutableRelationship; import org.onap.dcaegen2.services.prh.model.Relationship; -import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.ClientModel; import org.springframework.lang.Nullable; @Value.Immutable -- cgit 1.2.3-korg