1 package com.atlassian.sal.core.net;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.Map;
6 import java.util.HashMap;
7
8 import org.apache.commons.httpclient.HttpMethod;
9 import org.apache.commons.httpclient.Header;
10 import com.atlassian.sal.api.net.ResponseException;
11 import com.atlassian.sal.api.net.Response;
12
13 public class HttpClientResponse implements Response
14 {
15
16 private final HttpMethod method;
17
18 public HttpClientResponse(HttpMethod method)
19 {
20 this.method = method;
21 }
22
23 public String getResponseBodyAsString() throws ResponseException
24 {
25 try
26 {
27 return method.getResponseBodyAsString();
28 } catch (IOException e)
29 {
30 throw new ResponseException(e.getMessage(), e);
31 }
32 }
33
34 public InputStream getResponseBodyAsStream() throws ResponseException
35 {
36 try
37 {
38 return method.getResponseBodyAsStream();
39 } catch (IOException e)
40 {
41 throw new ResponseException(e.getMessage(), e);
42 }
43 }
44
45 public <T> T getEntity(Class<T> entityClass) throws ResponseException
46 {
47 throw new UnsupportedOperationException("This SAL request does not support object marshalling. Use the RequestFactory component instead.");
48 }
49
50 public int getStatusCode()
51 {
52 return method.getStatusCode();
53 }
54
55 public String getStatusText()
56 {
57 return method.getStatusText();
58 }
59
60 public boolean isSuccessful()
61 {
62 int codeOrder = method.getStatusCode() / 100;
63 return codeOrder == 2 || codeOrder == 3;
64 }
65
66 public String getHeader(String name)
67 {
68 final Header header = method.getResponseHeader(name);
69 return header == null ? null : header.getValue();
70 }
71
72 public Map<String, String> getHeaders()
73 {
74 Map<String, String> map = new HashMap<String, String>();
75 for (Header header : method.getResponseHeaders())
76 {
77 map.put(header.getName(), header.getValue());
78 }
79 return map;
80 }
81 }