From 7759206f0298179cd684c39814b13b6c1b000675 Mon Sep 17 00:00:00 2001 From: wejs Date: Tue, 22 May 2018 17:14:25 +0200 Subject: Refactor DmaapProducerClient Java Optional with functional chain of execution Change-Id: Iebc03fc1fedab2e8f3dff0d823998ce3c2370440 Issue-ID: DCAEGEN2-396 Signed-off-by: wejs --- .../ExtendedDmaapProducerHttpClientImpl.java | 94 +++++++++------------- 1 file changed, 37 insertions(+), 57 deletions(-) diff --git a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/ExtendedDmaapProducerHttpClientImpl.java b/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/ExtendedDmaapProducerHttpClientImpl.java index 156c1891..bea36201 100644 --- a/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/ExtendedDmaapProducerHttpClientImpl.java +++ b/prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/prh/service/producer/ExtendedDmaapProducerHttpClientImpl.java @@ -20,8 +20,13 @@ package org.onap.dcaegen2.services.prh.service.producer; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Optional; import org.apache.http.HttpEntity; -import org.apache.http.client.ResponseHandler; +import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.utils.URIBuilder; @@ -36,12 +41,6 @@ import org.onap.dcaegen2.services.prh.service.HttpUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Optional; - public class ExtendedDmaapProducerHttpClientImpl { private static Logger logger = LoggerFactory.getLogger(ExtendedDmaapProducerHttpClientImpl.class); @@ -52,6 +51,7 @@ public class ExtendedDmaapProducerHttpClientImpl { private final Integer dmaapPortNumber; private final String dmaapTopicName; private final String dmaapContentType; + private ConsumerDmaapModel consumerDmaapModel; public ExtendedDmaapProducerHttpClientImpl(DmaapPublisherConfiguration configuration) { @@ -64,75 +64,56 @@ public class ExtendedDmaapProducerHttpClientImpl { } public Optional getHttpProducerResponse(ConsumerDmaapModel consumerDmaapModel) { - Optional extendedDetails = Optional.empty(); - Optional request = createRequest(consumerDmaapModel); + this.consumerDmaapModel = consumerDmaapModel; try { - extendedDetails = closeableHttpClient.execute(request.get(), dmaapProducerResponseHandler()); - } catch (IOException | NullPointerException e) { + return createRequest() + .flatMap(this::executeHttpClient); + } catch (NullPointerException | URISyntaxException e) { logger.warn("Exception while executing HTTP request: ", e); } - return extendedDetails; - } - - private Optional createStringEntity(Optional jsonBody) { - return Optional.of(parseJson(jsonBody).get()); + return Optional.empty(); } - private Optional parseJson(Optional jsonBody) { - Optional stringEntity = Optional.empty(); + private Optional executeHttpClient(HttpRequestBase httpRequestBase) { try { - stringEntity = Optional.of(new StringEntity(jsonBody.get())); - } catch (UnsupportedEncodingException e) { - logger.warn("Exception while parsing JSON: ", e); + return closeableHttpClient.execute(httpRequestBase, this::getDmaapProducerResponseHandler); + } catch (IOException e) { + logger.warn("Exception while executing HTTP request: ", e); } - return stringEntity; + return Optional.empty(); } - private Optional createRequest(ConsumerDmaapModel consumerDmaapModel) { - Optional request = Optional.empty(); - final URI extendedURI = createDmaapPublisherExtendedURI(); - - if ("application/json".equals(dmaapContentType)) { - request = Optional.ofNullable(createRequest(extendedURI, consumerDmaapModel)); - request.get().addHeader("Content-type", dmaapContentType); - } - - return request; + private Optional createRequest() throws URISyntaxException { + return "application/json".equals(dmaapContentType) + ? createDmaapPublisherExtendedURI().map(this::createHttpPostRequest) + : Optional.empty(); } - private URI createDmaapPublisherExtendedURI() { - URI extendedURI = null; - final URIBuilder uriBuilder = new URIBuilder() + private Optional createDmaapPublisherExtendedURI() throws URISyntaxException { + return Optional.ofNullable(new URIBuilder() .setScheme(dmaapProtocol) .setHost(dmaapHostName) .setPort(dmaapPortNumber) - .setPath(dmaapTopicName); - try { - extendedURI = uriBuilder.build(); - logger.trace("Building extended URI: {}", extendedURI); - } catch (URISyntaxException e) { - logger.warn("Exception while building extended URI: ", e); - } - return extendedURI; + .setPath(dmaapTopicName).build()); } - private HttpRequestBase createRequest(URI extendedURI, ConsumerDmaapModel consumerDmaapModel) { - if (extendedURI != null) { - return createHttpPost(extendedURI, Optional.ofNullable(CommonFunctions.createJsonBody(consumerDmaapModel))); - } else { - return null; - } - } - - private HttpPost createHttpPost(URI extendedURI, Optional jsonBody) { + private HttpPost createHttpPostRequest(URI extendedURI) { HttpPost post = new HttpPost(extendedURI); - Optional stringEntity = createStringEntity(jsonBody); - post.setEntity(stringEntity.get()); + post.addHeader("Content-type", dmaapContentType); + createStringEntity().ifPresent(post::setEntity); return post; } - private ResponseHandler> dmaapProducerResponseHandler() { - return httpResponse -> { + private Optional createStringEntity() { + try { + return Optional.of(new StringEntity(CommonFunctions.createJsonBody(consumerDmaapModel))); + } catch (UnsupportedEncodingException | IllegalArgumentException e) { + logger.warn("Exception while parsing JSON: ", e); + } + return Optional.empty(); + } + + private Optional getDmaapProducerResponseHandler(HttpResponse httpResponse) throws IOException { final int responseCode = httpResponse.getStatusLine().getStatusCode(); final HttpEntity responseEntity = httpResponse.getEntity(); @@ -144,6 +125,5 @@ public class ExtendedDmaapProducerHttpClientImpl { logger.warn("HTTP response not successful : {}", response); return Optional.of("" + responseCode); } - }; } } -- cgit 1.2.3-korg