Bug 1029: Remove dead code: samples/clustersession
[controller.git] / opendaylight / commons / httpclient / src / main / java / org / opendaylight / controller / commons / httpclient / HTTPClient.java
1 /*
2  * Copyright IBM Corporation, 2013.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.commons.httpclient;\r
9 \r
10 import java.util.ArrayList;\r
11 import java.util.HashMap;\r
12 import java.util.Iterator;\r
13 import java.util.List;\r
14 \r
15 import org.apache.http.Header;\r
16 import org.apache.http.HeaderIterator;\r
17 import org.apache.http.HttpEntity;\r
18 import org.apache.http.client.ClientProtocolException;\r
19 import org.apache.http.client.config.RequestConfig;\r
20 import org.apache.http.client.methods.CloseableHttpResponse;\r
21 import org.apache.http.client.methods.HttpDelete;\r
22 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;\r
23 import org.apache.http.client.methods.HttpGet;\r
24 import org.apache.http.client.methods.HttpPost;\r
25 import org.apache.http.client.methods.HttpPut;\r
26 import org.apache.http.client.methods.HttpRequestBase;\r
27 import org.apache.http.entity.StringEntity;\r
28 import org.apache.http.impl.client.CloseableHttpClient;\r
29 import org.apache.http.impl.client.HttpClients;\r
30 import org.apache.http.util.EntityUtils;\r
31 \r
32 public class HTTPClient {\r
33     static public HTTPResponse sendRequest(HTTPRequest request) throws Exception {\r
34 \r
35         CloseableHttpClient httpclient = HttpClients.createDefault();\r
36         if (httpclient == null)\r
37             throw new ClientProtocolException("Couldn't create an HTTP client");\r
38         RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(request.getTimeout())\r
39             .setConnectTimeout(request.getTimeout()).build();\r
40         HttpRequestBase httprequest;\r
41         String method = request.getMethod();\r
42 \r
43         if (method.equalsIgnoreCase("GET")) {\r
44             httprequest = new HttpGet(request.getUri());\r
45         } else if (method.equalsIgnoreCase("POST")) {\r
46             httprequest = new HttpPost(request.getUri());\r
47             if (request.getEntity() != null) {\r
48                 StringEntity sentEntity = new StringEntity(request.getEntity());\r
49                 sentEntity.setContentType(request.getContentType());\r
50                 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);\r
51             }\r
52         } else if (method.equalsIgnoreCase("PUT")) {\r
53             httprequest = new HttpPut(request.getUri());\r
54             if (request.getEntity() != null) {\r
55                 StringEntity sentEntity = new StringEntity(request.getEntity());\r
56                 sentEntity.setContentType(request.getContentType());\r
57                 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);\r
58             }\r
59         } else if (method.equalsIgnoreCase("DELETE")) {\r
60             httprequest = new HttpDelete(request.getUri());\r
61         } else {\r
62             httpclient.close();\r
63             throw new IllegalArgumentException("This profile class only supports GET, POST, PUT, and DELETE methods");\r
64         }\r
65         httprequest.setConfig(requestConfig);\r
66 \r
67         // add request headers\r
68         Iterator<String> headerIterator = request.getHeaders().keySet().iterator();\r
69         while (headerIterator.hasNext()) {\r
70             String header = headerIterator.next();\r
71             Iterator<String> valueIterator = request.getHeaders().get(header).iterator();\r
72             while (valueIterator.hasNext()) {\r
73                 httprequest.addHeader(header, valueIterator.next());\r
74             }\r
75         }\r
76 \r
77         CloseableHttpResponse response = httpclient.execute(httprequest);\r
78         try {\r
79             HttpEntity receivedEntity = response.getEntity();\r
80             int httpResponseCode = response.getStatusLine().getStatusCode();\r
81             HTTPResponse ans = new HTTPResponse();\r
82             HashMap<String, List<String>> headerMap = new HashMap<String, List<String>>();\r
83 \r
84             // copy response headers\r
85             HeaderIterator it = response.headerIterator();\r
86             while (it.hasNext()) {\r
87                 Header h = it.nextHeader();\r
88                 String name = h.getName();\r
89                 String value = h.getValue();\r
90                 if (headerMap.containsKey(name))\r
91                     headerMap.get(name).add(value);\r
92                 else {\r
93                     List<String> list = new ArrayList<String>();\r
94                     list.add(value);\r
95                     headerMap.put(name, list);\r
96                 }\r
97             }\r
98             ans.setHeaders(headerMap);\r
99 \r
100             if (httpResponseCode > 299) {\r
101                 ans.setStatus(httpResponseCode);\r
102                 ans.setEntity(response.getStatusLine().getReasonPhrase());\r
103                 return ans;\r
104             }\r
105             ans.setStatus(response.getStatusLine().getStatusCode());\r
106             if (receivedEntity != null)\r
107                 ans.setEntity(EntityUtils.toString(receivedEntity));\r
108             else\r
109                 ans.setEntity(null);\r
110             return ans;\r
111         } finally {\r
112             response.close();\r
113         }\r
114     }\r
115 }\r