aboutsummaryrefslogtreecommitdiffstats
path: root/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api
diff options
context:
space:
mode:
Diffstat (limited to 'prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api')
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java88
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java32
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java73
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java58
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java71
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java57
6 files changed, 379 insertions, 0 deletions
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<String, String> 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<T, U> {
+ Mono<U> getAaiResponse(T aaiModel);
+
+ default <S> AaiHttpClient<T, S> map(final Function<U,S> 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<AaiServiceInstanceQueryModel, HttpResponse> {
+
+ 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<HttpResponse> getAaiResponse(AaiServiceInstanceQueryModel aaiModel) {
+ final Map<String, String> 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<AaiModel, HttpResponse> {
+
+ private final RxHttpClient httpClient;
+ private final AaiClientConfiguration configuration;
+
+
+ public AaiHttpGetClient(AaiClientConfiguration configuration, RxHttpClient httpClient) {
+ this.configuration = configuration;
+ this.httpClient = httpClient;
+ }
+
+ @Override
+ public Mono<HttpResponse> 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<AaiModel, HttpResponse> {
+
+ private final static Map<String, String> 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<HttpResponse> getAaiResponse(AaiModel aaiModel) {
+ final Map<String, String> 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<AaiModel, HttpResponse> {
+
+ 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<HttpResponse> getAaiResponse(AaiModel aaiModel) {
+ final HttpRequest aaiPutRequest = createAaiPutRequest(uri, createRequestDiagnosticContext(),
+ configuration.aaiHeaders(), jsonBodyBuilder, aaiModel);
+ return httpClient.call(aaiPutRequest);
+ }
+}