Replaced all tabs with spaces in java and pom.xml
[so.git] / cloudify-client / src / main / java / org / onap / so / cloudify / connector / http / HttpClientConnector.java
index 247afb3..e1992d9 100644 (file)
@@ -30,7 +30,6 @@ import java.net.UnknownHostException;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpStatus;
 import org.apache.http.auth.AuthScope;
@@ -55,7 +54,6 @@ import org.onap.so.cloudify.base.client.CloudifyConnectException;
 import org.onap.so.cloudify.base.client.CloudifyRequest;
 import org.onap.so.cloudify.base.client.CloudifyResponse;
 import org.onap.so.cloudify.base.client.CloudifyResponseException;
-
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.annotation.JsonRootName;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -67,183 +65,175 @@ import org.slf4j.LoggerFactory;
 
 public class HttpClientConnector implements CloudifyClientConnector {
 
-       private static ObjectMapper DEFAULT_MAPPER;
-       private static ObjectMapper WRAPPED_MAPPER;
-       
+    private static ObjectMapper DEFAULT_MAPPER;
+    private static ObjectMapper WRAPPED_MAPPER;
+
     private static Logger logger = LoggerFactory.getLogger(HttpClientConnector.class);
 
-       static {
-               DEFAULT_MAPPER = new ObjectMapper();
-
-               DEFAULT_MAPPER.setSerializationInclusion(Include.NON_NULL);
-               DEFAULT_MAPPER.disable(SerializationFeature.INDENT_OUTPUT);
-               DEFAULT_MAPPER.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-               DEFAULT_MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-
-               WRAPPED_MAPPER = new ObjectMapper();
-
-               WRAPPED_MAPPER.setSerializationInclusion(Include.NON_NULL);
-               WRAPPED_MAPPER.disable(SerializationFeature.INDENT_OUTPUT);
-               WRAPPED_MAPPER.enable(SerializationFeature.WRAP_ROOT_VALUE);
-               WRAPPED_MAPPER.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
-               WRAPPED_MAPPER.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-               WRAPPED_MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-       }
-       
-       protected static <T> ObjectMapper getObjectMapper (Class<T> type) {
-               return type.getAnnotation(JsonRootName.class) == null ? DEFAULT_MAPPER : WRAPPED_MAPPER;
-       }
-
-       public <T> CloudifyResponse request(CloudifyRequest<T> request) {
-
-               CloseableHttpClient httpClient = null; //HttpClients.createDefault();
-
-               if (request.isBasicAuth()) {
-                       // Use Basic Auth for this request.
-                       CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-                       credentialsProvider.setCredentials(AuthScope.ANY,
-                                       new UsernamePasswordCredentials (request.getUser(), request.getPassword()));
-
-                       httpClient = HttpClients.custom().setRedirectStrategy(new HttpClientRedirectStrategy()).setDefaultCredentialsProvider(credentialsProvider).build();
-               }
-               else {
-                       // Don't use basic authentication.  The Client will attempt Token-based authentication
-                       httpClient = HttpClients.custom().setRedirectStrategy(new HttpClientRedirectStrategy()).build();
-               }
-               
-               URI uri = null;
-               
-               // Build the URI with query params
-               try {
-                       URIBuilder uriBuilder = new URIBuilder(request.endpoint() + request.path());
-
-                       for(Map.Entry<String, List<Object> > entry : request.queryParams().entrySet()) {
-                               for (Object o : entry.getValue()) {
-                                       uriBuilder.setParameter(entry.getKey(), String.valueOf(o));
-                               }
-                       }
-                       
-                       uri = uriBuilder.build();
-               } catch (URISyntaxException e) {
-                       throw new HttpClientException (e);
-               }
-
-               HttpEntity entity = null;
-               if (request.entity() != null) {
-                       // Special handling for streaming input
-                       if (request.entity().getEntity() instanceof InputStream) {
-                               // Entity is an InputStream
-                               entity = new InputStreamEntity ((InputStream) request.entity().getEntity());
-                       }
-                       else {
-                               // Assume to be JSON.  Flatten the entity to a Json string                                      
-                               try {
-                               // Get appropriate mapper, based on existence of a root element in Entity class
-                                       ObjectMapper mapper = getObjectMapper (request.entity().getEntity().getClass());
-       
-                                       String entityJson = mapper.writeValueAsString (request.entity().getEntity());
-                                       entity = new StringEntity(entityJson, ContentType.create(request.entity().getContentType()));
-                                       
-                                       logger.debug ("Request JSON Body: {}", entityJson.replaceAll("\"password\":\"[^\"]*\"",
-                                               "\"password\":\"***\""));
-       
-                               } catch (JsonProcessingException e) {
-                                       throw new HttpClientException ("Json processing error on request entity", e);
-                               } catch (IOException e) {
-                                       throw new HttpClientException ("Json IO error on request entity", e);
-                               }
-                       }
-               }
-               
-               // Determine the HttpRequest class based on the method
-               HttpUriRequest httpRequest;
-               
-               switch (request.method()) {
-               case POST:
-                       HttpPost post = new HttpPost(uri);
-                       post.setEntity (entity);
-                       httpRequest = post;
-                       break;
-                       
-               case GET:
-                       httpRequest = new HttpGet(uri);
-                       break;
-
-               case PUT:
-                       HttpPut put = new HttpPut(uri);
-                       put.setEntity (entity);
-                       httpRequest = put;
-                       break;
-                       
-               case DELETE:
-                       httpRequest = new HttpDelete(uri);
-                       break;
-                       
-               default:
-                       throw new HttpClientException ("Unrecognized HTTP Method: " + request.method());
-               }
-               
-               for (Entry<String, List<Object>> h : request.headers().entrySet()) {
-                       StringBuilder sb = new StringBuilder();
-                       for (Object v : h.getValue()) {
-                               sb.append(String.valueOf(v));
-                       }
-                       httpRequest.addHeader(h.getKey(), sb.toString());
-               }
-
-               // Get the Response.  But don't get the body entity yet, as this response
-               // will be wrapped in an HttpClientResponse.  The HttpClientResponse
-               // buffers the body in constructor, so can close the response here.
-               HttpClientResponse httpClientResponse = null;
-               CloseableHttpResponse httpResponse = null;
-               
-               // Catch known HttpClient exceptions, and wrap them in OpenStack Client Exceptions
-               // so calling functions can distinguish.  Only RuntimeExceptions are allowed.
-               try {
-                       httpResponse = httpClient.execute(httpRequest);
-
-                       logger.debug ("Response status: {}", httpResponse.getStatusLine().getStatusCode());
-                       
-                       httpClientResponse = new HttpClientResponse (httpResponse);
-
-                       int status = httpResponse.getStatusLine().getStatusCode();
-                       if (status == HttpStatus.SC_OK || status == HttpStatus.SC_CREATED ||
-                               status == HttpStatus.SC_NO_CONTENT || status == HttpStatus.SC_ACCEPTED)
-                       {
-                               return httpClientResponse;
-                       }
-               }
-               catch (HttpResponseException e) {
-                       // What exactly does this mean?  It does not appear to get thrown for
-                       // non-2XX responses as documented.
-                       throw new CloudifyResponseException(e.getMessage(), e.getStatusCode());
-               }
-               catch (UnknownHostException e) {
-                       throw new CloudifyConnectException("Unknown Host: " + e.getMessage());
-               }
-               catch (IOException e) {
-                       // Catch all other IOExceptions and throw as OpenStackConnectException
-                       throw new CloudifyConnectException(e.getMessage());
-               }
-               catch (Exception e) {
-                       // Catchall for anything else, must throw as a RuntimeException
-                       logger.error("Client exception", e);
-                       throw new RuntimeException("Unexpected client exception", e);
-               }
-               finally {
-                       // Have the body.  Close the stream
-                       if (httpResponse != null)
-                               try {
-                                       httpResponse.close();
-                               } catch (IOException e) {
-                                       logger.debug("Unable to close HTTP Response: " + e);
-                               }
-               }
-               
-               // Get here on an error response (4XX-5XX)
-               throw new CloudifyResponseException(httpResponse.getStatusLine().getReasonPhrase(),
-                                                                                       httpResponse.getStatusLine().getStatusCode(),
-                                                                                       httpClientResponse);
-       }
+    static {
+        DEFAULT_MAPPER = new ObjectMapper();
+
+        DEFAULT_MAPPER.setSerializationInclusion(Include.NON_NULL);
+        DEFAULT_MAPPER.disable(SerializationFeature.INDENT_OUTPUT);
+        DEFAULT_MAPPER.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
+        DEFAULT_MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+
+        WRAPPED_MAPPER = new ObjectMapper();
+
+        WRAPPED_MAPPER.setSerializationInclusion(Include.NON_NULL);
+        WRAPPED_MAPPER.disable(SerializationFeature.INDENT_OUTPUT);
+        WRAPPED_MAPPER.enable(SerializationFeature.WRAP_ROOT_VALUE);
+        WRAPPED_MAPPER.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
+        WRAPPED_MAPPER.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
+        WRAPPED_MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+    }
+
+    protected static <T> ObjectMapper getObjectMapper(Class<T> type) {
+        return type.getAnnotation(JsonRootName.class) == null ? DEFAULT_MAPPER : WRAPPED_MAPPER;
+    }
+
+    public <T> CloudifyResponse request(CloudifyRequest<T> request) {
+
+        CloseableHttpClient httpClient = null; // HttpClients.createDefault();
+
+        if (request.isBasicAuth()) {
+            // Use Basic Auth for this request.
+            CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+            credentialsProvider.setCredentials(AuthScope.ANY,
+                    new UsernamePasswordCredentials(request.getUser(), request.getPassword()));
+
+            httpClient = HttpClients.custom().setRedirectStrategy(new HttpClientRedirectStrategy())
+                    .setDefaultCredentialsProvider(credentialsProvider).build();
+        } else {
+            // Don't use basic authentication. The Client will attempt Token-based authentication
+            httpClient = HttpClients.custom().setRedirectStrategy(new HttpClientRedirectStrategy()).build();
+        }
+
+        URI uri = null;
+
+        // Build the URI with query params
+        try {
+            URIBuilder uriBuilder = new URIBuilder(request.endpoint() + request.path());
+
+            for (Map.Entry<String, List<Object>> entry : request.queryParams().entrySet()) {
+                for (Object o : entry.getValue()) {
+                    uriBuilder.setParameter(entry.getKey(), String.valueOf(o));
+                }
+            }
+
+            uri = uriBuilder.build();
+        } catch (URISyntaxException e) {
+            throw new HttpClientException(e);
+        }
+
+        HttpEntity entity = null;
+        if (request.entity() != null) {
+            // Special handling for streaming input
+            if (request.entity().getEntity() instanceof InputStream) {
+                // Entity is an InputStream
+                entity = new InputStreamEntity((InputStream) request.entity().getEntity());
+            } else {
+                // Assume to be JSON. Flatten the entity to a Json string
+                try {
+                    // Get appropriate mapper, based on existence of a root element in Entity class
+                    ObjectMapper mapper = getObjectMapper(request.entity().getEntity().getClass());
+
+                    String entityJson = mapper.writeValueAsString(request.entity().getEntity());
+                    entity = new StringEntity(entityJson, ContentType.create(request.entity().getContentType()));
+
+                    logger.debug("Request JSON Body: {}",
+                            entityJson.replaceAll("\"password\":\"[^\"]*\"", "\"password\":\"***\""));
+
+                } catch (JsonProcessingException e) {
+                    throw new HttpClientException("Json processing error on request entity", e);
+                } catch (IOException e) {
+                    throw new HttpClientException("Json IO error on request entity", e);
+                }
+            }
+        }
+
+        // Determine the HttpRequest class based on the method
+        HttpUriRequest httpRequest;
+
+        switch (request.method()) {
+            case POST:
+                HttpPost post = new HttpPost(uri);
+                post.setEntity(entity);
+                httpRequest = post;
+                break;
+
+            case GET:
+                httpRequest = new HttpGet(uri);
+                break;
+
+            case PUT:
+                HttpPut put = new HttpPut(uri);
+                put.setEntity(entity);
+                httpRequest = put;
+                break;
+
+            case DELETE:
+                httpRequest = new HttpDelete(uri);
+                break;
+
+            default:
+                throw new HttpClientException("Unrecognized HTTP Method: " + request.method());
+        }
+
+        for (Entry<String, List<Object>> h : request.headers().entrySet()) {
+            StringBuilder sb = new StringBuilder();
+            for (Object v : h.getValue()) {
+                sb.append(String.valueOf(v));
+            }
+            httpRequest.addHeader(h.getKey(), sb.toString());
+        }
+
+        // Get the Response. But don't get the body entity yet, as this response
+        // will be wrapped in an HttpClientResponse. The HttpClientResponse
+        // buffers the body in constructor, so can close the response here.
+        HttpClientResponse httpClientResponse = null;
+        CloseableHttpResponse httpResponse = null;
+
+        // Catch known HttpClient exceptions, and wrap them in OpenStack Client Exceptions
+        // so calling functions can distinguish. Only RuntimeExceptions are allowed.
+        try {
+            httpResponse = httpClient.execute(httpRequest);
+
+            logger.debug("Response status: {}", httpResponse.getStatusLine().getStatusCode());
+
+            httpClientResponse = new HttpClientResponse(httpResponse);
+
+            int status = httpResponse.getStatusLine().getStatusCode();
+            if (status == HttpStatus.SC_OK || status == HttpStatus.SC_CREATED || status == HttpStatus.SC_NO_CONTENT
+                    || status == HttpStatus.SC_ACCEPTED) {
+                return httpClientResponse;
+            }
+        } catch (HttpResponseException e) {
+            // What exactly does this mean? It does not appear to get thrown for
+            // non-2XX responses as documented.
+            throw new CloudifyResponseException(e.getMessage(), e.getStatusCode());
+        } catch (UnknownHostException e) {
+            throw new CloudifyConnectException("Unknown Host: " + e.getMessage());
+        } catch (IOException e) {
+            // Catch all other IOExceptions and throw as OpenStackConnectException
+            throw new CloudifyConnectException(e.getMessage());
+        } catch (Exception e) {
+            // Catchall for anything else, must throw as a RuntimeException
+            logger.error("Client exception", e);
+            throw new RuntimeException("Unexpected client exception", e);
+        } finally {
+            // Have the body. Close the stream
+            if (httpResponse != null)
+                try {
+                    httpResponse.close();
+                } catch (IOException e) {
+                    logger.debug("Unable to close HTTP Response: " + e);
+                }
+        }
+
+        // Get here on an error response (4XX-5XX)
+        throw new CloudifyResponseException(httpResponse.getStatusLine().getReasonPhrase(),
+                httpResponse.getStatusLine().getStatusCode(), httpClientResponse);
+    }
 
 }