aboutsummaryrefslogtreecommitdiffstats
path: root/prh-aai-client/src/main/java
diff options
context:
space:
mode:
authorpwielebs <piotr.wielebski@nokia.com>2018-07-12 10:16:00 +0200
committerwasala <przemyslaw.wasala@nokia.com>2018-08-07 10:27:50 +0200
commit2cd0124def5b2267028e71220201efebf46fdcd4 (patch)
treefc5242000c1775d5656781f0c02dbf071ccf0b08 /prh-aai-client/src/main/java
parentfeeef5bf392e1639a13866a727933f960c70905c (diff)
Adding AAI reactive webClient
Change-Id: Iedf88dfe12f41f0d994bcfc7c94e21ddf945a001 Issue-ID: DCAEGEN2-609 Signed-off-by: pwielebs <piotr.wielebski@nokia.com>
Diffstat (limited to 'prh-aai-client/src/main/java')
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/config/AaiClientConfiguration.java2
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiRequestException.java31
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiClientImpl.java2
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiConsumerClient.java2
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java2
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiReactiveWebClient.java83
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/AaiProducerReactiveHttpClient.java94
7 files changed, 212 insertions, 4 deletions
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/config/AaiClientConfiguration.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/config/AaiClientConfiguration.java
index c9d7820c..50259bae 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/config/AaiClientConfiguration.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/config/AaiClientConfiguration.java
@@ -41,7 +41,7 @@ public abstract class AaiClientConfiguration implements Serializable {
public abstract String aaiHost();
@Value.Parameter
- public abstract Integer aaiHostPortNumber();
+ public abstract Integer aaiPort();
@Value.Parameter
public abstract String aaiProtocol();
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiRequestException.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiRequestException.java
new file mode 100644
index 00000000..33654c73
--- /dev/null
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiRequestException.java
@@ -0,0 +1,31 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * 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.exceptions;
+
+public class AaiRequestException extends Exception {
+ public AaiRequestException() {
+ super();
+ }
+
+ public AaiRequestException(String message) {
+ super(message);
+ }
+}
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiClientImpl.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiClientImpl.java
index f9252578..d9ba7c8e 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiClientImpl.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiClientImpl.java
@@ -79,7 +79,7 @@ public class AaiClientImpl implements AaiClient {
if (aaiUserName != null) {
final String aaiHost = aaiClientConfig.aaiHost();
- final Integer aaiHostPortNumber = aaiClientConfig.aaiHostPortNumber();
+ final Integer aaiHostPortNumber = aaiClientConfig.aaiPort();
final String aaiUserPassword = aaiClientConfig.aaiUserPassword();
final AuthScope aaiHostPortAuthScope = new AuthScope(aaiHost, aaiHostPortNumber);
final Credentials aaiCredentials = new UsernamePasswordCredentials(aaiUserName, aaiUserPassword);
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiConsumerClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiConsumerClient.java
index 7c86d0e3..3cd95f53 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiConsumerClient.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiConsumerClient.java
@@ -61,7 +61,7 @@ public class AaiConsumerClient {
closeableHttpClient = new AaiClientImpl(aaiClientConfiguration).getAaiHttpClient();
aaiHost = aaiClientConfiguration.aaiHost();
aaiProtocol = aaiClientConfiguration.aaiProtocol();
- aaiHostPortNumber = aaiClientConfiguration.aaiHostPortNumber();
+ aaiHostPortNumber = aaiClientConfiguration.aaiPort();
aaiPath = aaiClientConfiguration.aaiBasePath() + aaiClientConfiguration.aaiPnfPath();
aaiHeaders = aaiClientConfiguration.aaiHeaders();
}
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java
index 0c3f5803..b5368c6d 100644
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java
@@ -67,7 +67,7 @@ public class AaiProducerClient implements AaiExtendedHttpClient {
closeableHttpClient = new AaiClientImpl(aaiClientConfiguration).getAaiHttpClient();
aaiHost = aaiClientConfiguration.aaiHost();
aaiProtocol = aaiClientConfiguration.aaiProtocol();
- aaiHostPortNumber = aaiClientConfiguration.aaiHostPortNumber();
+ aaiHostPortNumber = aaiClientConfiguration.aaiPort();
aaiPath = aaiClientConfiguration.aaiBasePath() + aaiClientConfiguration.aaiPnfPath();
aaiHeaders = aaiClientConfiguration.aaiHeaders();
aaiUserName = aaiClientConfiguration.aaiUserName();
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiReactiveWebClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiReactiveWebClient.java
new file mode 100644
index 00000000..f3b511a7
--- /dev/null
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiReactiveWebClient.java
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * 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.service;
+
+import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;
+
+import java.util.Map;
+import org.onap.dcaegen2.services.prh.config.AaiClientConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
+
+
+public class AaiReactiveWebClient {
+
+ private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private String aaiUserName;
+ private String aaiUserPassword;
+ private Map<String, String> aaiHeaders;
+
+ /**
+ * Creating AaiReactiveWebClient
+ * @param configuration - configuration object
+ * @return AaiReactiveWebClient
+ */
+ public AaiReactiveWebClient fromConfiguration(AaiClientConfiguration configuration) {
+ this.aaiUserName = configuration.aaiUserName();
+ this.aaiUserPassword = configuration.aaiUserPassword();
+ this.aaiHeaders = configuration.aaiHeaders();
+ return this;
+ }
+
+ /**
+ * Construct Reactive WebClient with appropriate settings.
+ *
+ * @return WebClient
+ */
+ public WebClient build() {
+ return WebClient.builder()
+ .defaultHeaders(httpHeaders -> httpHeaders.setAll(aaiHeaders))
+ .filter(basicAuthentication(aaiUserName, aaiUserPassword))
+ .filter(logRequest())
+ .filter(logResponse())
+ .build();
+ }
+
+ private ExchangeFilterFunction logRequest() {
+ return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
+ logger.info("Request: {} {}", clientRequest.method(), clientRequest.url());
+ clientRequest.headers()
+ .forEach((name, values) -> values.forEach(value -> logger.info("{}={}",name, value)));
+ return Mono.just(clientRequest);
+ });
+ }
+
+ private ExchangeFilterFunction logResponse() {
+ return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
+ logger.info("Response Status {}", clientResponse.statusCode());
+ return Mono.just(clientResponse);
+ });
+ }
+}
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/AaiProducerReactiveHttpClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/AaiProducerReactiveHttpClient.java
new file mode 100644
index 00000000..55475902
--- /dev/null
+++ b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/AaiProducerReactiveHttpClient.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * 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.service.producer;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.http.client.utils.URIBuilder;
+import org.onap.dcaegen2.services.prh.config.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.exceptions.AaiRequestException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
+
+
+public class AaiProducerReactiveHttpClient {
+
+ private WebClient webClient;
+ private final String aaiHost;
+ private final String aaiProtocol;
+ private final Integer aaiHostPortNumber;
+ private final String aaiBasePath;
+
+
+ /**
+ * Constructor
+ *
+ * @param configuration - AAI producer configuration object
+ */
+ public AaiProducerReactiveHttpClient(AaiClientConfiguration configuration) {
+ this.aaiHost = configuration.aaiHost();
+ this.aaiProtocol = configuration.aaiProtocol();
+ this.aaiHostPortNumber = configuration.aaiPort();
+ this.aaiBasePath = configuration.aaiBasePath();
+ }
+
+ /**
+ * Function for calling AAI Http producer - patch request to AAI database
+ *
+ * @param consumerDmaapModelMono - object which will be sent to AAI database
+ * @return status code of operation
+ */
+ public Mono<Integer> getAaiProducerResponse(Mono<ConsumerDmaapModel> consumerDmaapModelMono) {
+ return consumerDmaapModelMono.flatMap(this::patchAaiRequest);
+ }
+
+ public AaiProducerReactiveHttpClient createAaiWebClient(WebClient webClient) {
+ this.webClient = webClient;
+ return this;
+ }
+
+ private Mono<Integer> patchAaiRequest(ConsumerDmaapModel dmaapModel) {
+ try {
+ return webClient.patch()
+ .uri(getUri(dmaapModel.getPnfName()))
+ .body(BodyInserters.fromObject(dmaapModel))
+ .retrieve()
+ .onStatus(HttpStatus::is4xxClientError, clientResponse -> Mono.error(new AaiRequestException("HTTP 400")))
+ .onStatus(HttpStatus::is5xxServerError, clientResponse -> Mono.error(new AaiRequestException("HTTP 500")))
+ .bodyToMono(Integer.class);
+ } catch (URISyntaxException e) {
+ return Mono.error(e);
+ }
+ }
+
+ URI getUri(String pnfName) throws URISyntaxException {
+ return new URIBuilder()
+ .setScheme(aaiProtocol)
+ .setHost(aaiHost)
+ .setPort(aaiHostPortNumber)
+ .setPath(aaiBasePath + "/" + pnfName)
+ .build();
+ }
+}