Subversion Repositories SmartDukaan

Rev

Rev 23502 | Rev 23526 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21557 ashik.ali 1
package com.spice.profitmandi.common.web.client;
2
 
3
import java.io.BufferedReader;
4
import java.io.IOException;
5
import java.io.InputStream;
6
import java.io.InputStreamReader;
22215 ashik.ali 7
import java.io.UnsupportedEncodingException;
8
import java.util.ArrayList;
9
import java.util.List;
21557 ashik.ali 10
import java.util.Map;
11
import java.util.Set;
12
 
13
import org.apache.http.HttpResponse;
22215 ashik.ali 14
import org.apache.http.NameValuePair;
21557 ashik.ali 15
import org.apache.http.client.ClientProtocolException;
16
import org.apache.http.client.HttpClient;
22215 ashik.ali 17
import org.apache.http.client.entity.UrlEncodedFormEntity;
21557 ashik.ali 18
import org.apache.http.client.methods.HttpGet;
22215 ashik.ali 19
import org.apache.http.client.methods.HttpPost;
20
import org.apache.http.client.methods.HttpUriRequest;
23502 ashik.ali 21
import org.apache.http.conn.HttpHostConnectException;
22
import org.apache.http.entity.ContentType;
23
import org.apache.http.entity.StringEntity;
21557 ashik.ali 24
import org.apache.http.impl.client.HttpClients;
22215 ashik.ali 25
import org.apache.http.message.BasicNameValuePair;
21557 ashik.ali 26
import org.slf4j.Logger;
27
import org.slf4j.LoggerFactory;
28
import org.springframework.http.HttpStatus;
29
import org.springframework.web.util.UriComponentsBuilder;
30
 
31
import com.spice.profitmandi.common.ResponseCodeHolder;
32
import com.spice.profitmandi.common.enumuration.SchemeType;
33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23502 ashik.ali 34
import com.spice.profitmandi.common.util.StringUtils;
21557 ashik.ali 35
 
36
public class RestClient {
37
 
38
	private static final Logger LOGGER = LoggerFactory.getLogger(RestClient.class);
39
 
40
	private HttpClient httpClient;
41
	private SchemeType scheme;
42
	private String hostName;
43
	private int port;
44
	private final String url;
22215 ashik.ali 45
	//private HttpHeaders headers;
21557 ashik.ali 46
	public RestClient(SchemeType scheme, String hostName, int port){
47
		this.scheme = scheme;
48
		this.hostName = hostName;
49
		this.port = port;
23502 ashik.ali 50
		this.url = scheme.getValue() == null ? SchemeType.HTTP.toString() : scheme.getValue()  + hostName + ":" + port + "/";
22215 ashik.ali 51
		//this.headers = new HttpHeaders();
21557 ashik.ali 52
		this.httpClient = HttpClients.createDefault();
22215 ashik.ali 53
		//headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);
21557 ashik.ali 54
	}
55
	public SchemeType getScheme() {
56
		return scheme;
57
	}
58
	public String getHostName() {
59
		return hostName;
60
	}
61
	public int getPort() {
62
		return port;
63
	}
64
	public String getUrl() {
65
		return url;
66
	}
22215 ashik.ali 67
	public String get(String uri, Map<String, String> params, Map<String, String> headers)
23502 ashik.ali 68
		throws ProfitMandiBusinessException, HttpHostConnectException{
21557 ashik.ali 69
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
70
		Set<String> keys = params.keySet();
71
		for(String key : keys){
22341 amit.gupta 72
			builder.queryParam(key, params.get(key));
21557 ashik.ali 73
		}
22345 amit.gupta 74
		HttpGet request = new HttpGet(builder.build().encode().toUri());
22215 ashik.ali 75
		for(Map.Entry<String, String> entry : headers.entrySet()){
22339 amit.gupta 76
			request.setHeader(entry.getKey(), entry.getValue());
22215 ashik.ali 77
		}
78
		return this.execute(request);
79
	}
22233 amit.gupta 80
 
81
	public String get(String uri, Map<String, String> params)
23502 ashik.ali 82
			throws ProfitMandiBusinessException, HttpHostConnectException{
22233 amit.gupta 83
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
23509 amit.gupta 84
		if(params != null) {
85
			Set<String> keys = params.keySet();
86
			for(String key : keys){
87
				builder.queryParam(key, params.get(key));
88
			}
22233 amit.gupta 89
		}
22343 amit.gupta 90
		HttpGet request = new HttpGet(builder.build().encode().toUri());
22233 amit.gupta 91
		return this.execute(request);
92
	}
22215 ashik.ali 93
 
94
	public String execute(HttpUriRequest request)
23502 ashik.ali 95
			throws ProfitMandiBusinessException, HttpHostConnectException{
22215 ashik.ali 96
		LOGGER.info("Connecting to server at url {}",request.getURI());
21557 ashik.ali 97
		try {
98
			HttpResponse response = httpClient.execute(request);
99
			String responseString = this.toString(response.getEntity().getContent());
22877 amit.gupta 100
			LOGGER.info("Got response from server with responseCode {}", response.getStatusLine().getStatusCode());
21557 ashik.ali 101
			if(response.getStatusLine().getStatusCode() == HttpStatus.OK.value()){
102
				return responseString;
103
			}else{
22215 ashik.ali 104
				throw new ProfitMandiBusinessException("", "", "GE_1005");
21557 ashik.ali 105
			}
23502 ashik.ali 106
		}catch(HttpHostConnectException httpHostConnectException) {
107
			LOGGER.error("Connection Timeout Exception", httpHostConnectException);
108
			throw httpHostConnectException;
21557 ashik.ali 109
		} catch (ClientProtocolException e) {
22215 ashik.ali 110
			LOGGER.error("Client Error : ",e);
111
			throw new RuntimeException(ResponseCodeHolder.getMessage("GE_1006"));
21557 ashik.ali 112
		} catch (IOException e) {
22215 ashik.ali 113
			LOGGER.error("IO Error : ", e);
114
			throw new RuntimeException(ResponseCodeHolder.getMessage("GE_1006"));
23502 ashik.ali 115
		} 
21557 ashik.ali 116
	}
22215 ashik.ali 117
 
118
	public String post(String uri, Map<String, String> params, Map<String, String> headers)
23502 ashik.ali 119
			throws ProfitMandiBusinessException, HttpHostConnectException{
22215 ashik.ali 120
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
121
		List<NameValuePair> bodyParameters = new ArrayList<NameValuePair>();
122
		for(Map.Entry<String, String> entry : params.entrySet()){
123
			bodyParameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
124
		}
125
 
126
		LOGGER.info("Body Parameters {}", params);
22343 amit.gupta 127
		HttpPost request = new HttpPost(builder.build().encode().toUri());
22215 ashik.ali 128
		for(Map.Entry<String, String> entry : headers.entrySet()){
129
			request.setHeader(entry.getKey(), entry.getValue());
130
		}
131
 
132
		try{
133
			request.setEntity(new UrlEncodedFormEntity(bodyParameters));
134
		}catch (UnsupportedEncodingException unsupportedEncodingException) {
135
			LOGGER.error("Encoding error : ", unsupportedEncodingException);
136
			throw new RuntimeException(ResponseCodeHolder.getMessage("GE_1006"));
137
		}
138
 
139
 
140
		return this.execute(request);
141
 
142
	}
143
 
23502 ashik.ali 144
	public String postJson(String uri, Map<String, String> params, Map<String, String> headers)
145
			throws ProfitMandiBusinessException, HttpHostConnectException{
146
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
147
		List<NameValuePair> bodyParameters = new ArrayList<NameValuePair>();
148
		for(Map.Entry<String, String> entry : params.entrySet()){
149
			bodyParameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
150
		}
151
 
152
		String jsonString = null;
153
		try {
154
			jsonString = StringUtils.toString(params);
155
		} catch (Exception e) {
156
			e.printStackTrace();
157
		}
158
 
159
 
160
		StringEntity requestEntity = new StringEntity(
161
			    jsonString,
162
			    ContentType.APPLICATION_JSON);
163
 
164
		LOGGER.info("Body {}", jsonString);
165
		HttpPost request = new HttpPost(builder.build().encode().toUri());
166
		for(Map.Entry<String, String> entry : headers.entrySet()){
167
			request.setHeader(entry.getKey(), entry.getValue());
168
		}
169
 
170
		request.setEntity(requestEntity);
171
 
172
 
173
 
174
		return this.execute(request);
175
 
176
	}
177
 
21557 ashik.ali 178
	private String toString(InputStream inputStream){
179
		BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
180
		StringBuilder responseString = new StringBuilder();
181
		String line = null;
182
		try {
183
			while((line = reader.readLine()) != null){
184
				responseString.append(line);
185
			}
186
			inputStream.close();
187
		} catch (IOException e) {
188
			throw new RuntimeException();
189
		}
190
		return responseString.toString();
191
	}
192
}