001    package railo.commons.net.http.httpclient4;
002    
003    import java.io.IOException;
004    import java.io.InputStream;
005    import java.net.MalformedURLException;
006    import java.net.URI;
007    import java.net.URL;
008    
009    import org.apache.http.HttpEntity;
010    import org.apache.http.HttpResponse;
011    import org.apache.http.client.methods.HttpUriRequest;
012    import org.apache.http.protocol.ExecutionContext;
013    import org.apache.http.protocol.HttpContext;
014    
015    import railo.commons.io.IOUtil;
016    import railo.commons.lang.StringUtil;
017    import railo.commons.net.http.HTTPResponse;
018    import railo.commons.net.http.HTTPResponseSupport;
019    import railo.commons.net.http.Header;
020    
021    public class HTTPResponse4Impl extends HTTPResponseSupport implements HTTPResponse {
022    
023            HttpResponse rsp;
024            HttpUriRequest req;
025            private URL url;
026            private HttpContext context; 
027    
028            public HTTPResponse4Impl(URL url,HttpContext context, HttpUriRequest req,HttpResponse rsp) {
029                    this.url=url;
030                    this.context=context;
031                    this.req=req;
032                    this.rsp=rsp;
033            }
034            
035            @Override
036            public String getContentAsString() throws IOException {
037                    return getContentAsString(null);
038            }
039            
040    
041            @Override
042            public String getContentAsString(String charset) throws IOException {
043                    HttpEntity entity = rsp.getEntity();
044                    InputStream is=null;
045                    if(StringUtil.isEmpty(charset,true))charset=getCharset();
046                    try{
047                            return IOUtil.toString(is=entity.getContent(), charset);
048                    }
049                    finally {
050                            IOUtil.closeEL(is);
051                    }
052            }
053            
054            @Override
055            public InputStream getContentAsStream() throws IOException {
056                    HttpEntity e = rsp.getEntity();
057                    if(e==null) return  null;
058                    return e.getContent();
059            }
060            
061            @Override
062            public byte[] getContentAsByteArray() throws IOException {
063                    HttpEntity entity = rsp.getEntity();
064                    InputStream is=null;
065                    if(entity==null) return new byte[0];
066                    try{
067                            return IOUtil.toBytes(is=entity.getContent());
068                    }
069                    finally {
070                            IOUtil.closeEL(is);
071                    }
072            }
073    
074            @Override
075            public Header getLastHeader(String name) {
076                    org.apache.http.Header header = rsp.getLastHeader(name);
077                    if(header!=null) return new HeaderWrap(header);
078                    return null;
079            }
080            
081            @Override
082            public Header getLastHeaderIgnoreCase(String name) {
083                    return getLastHeaderIgnoreCase(rsp, name);
084            }
085            public static Header getLastHeaderIgnoreCase(HttpResponse rsp,String name) {
086                    org.apache.http.Header header = rsp.getLastHeader(name);
087                    if(header!=null) return new HeaderWrap(header);
088                    
089                    org.apache.http.Header[] headers = rsp.getAllHeaders();
090                    for(int i=headers.length-1;i>=0;i--){
091                            if(name.equalsIgnoreCase(headers[i].getName())){
092                                    return new HeaderWrap(headers[i]);
093                            }
094                    }
095                    return null;
096            }
097    
098            @Override
099            public URL getURL() {
100                    try {
101                            return req.getURI().toURL();
102                    } catch (MalformedURLException e) {
103                            return url;
104                    }
105            }
106            
107            public URL getTargetURL() {
108                    URL start = getURL();   
109                    
110                    HttpUriRequest req = (HttpUriRequest) context.getAttribute(
111                            ExecutionContext.HTTP_REQUEST);
112                            URI uri = req.getURI();
113                            String path=uri.getPath();
114                            String query=uri.getQuery();
115                            if(!StringUtil.isEmpty(query)) path+="?"+query;
116                            
117                            URL _url=start;
118                            try {
119                                    _url = new URL(start.getProtocol(),start.getHost(),start.getPort(),path);
120                            } 
121                            catch (MalformedURLException e) {}
122                    
123                    
124                    return _url;
125            }
126            
127            
128    
129    
130            @Override
131            public int getStatusCode() {
132                    return rsp.getStatusLine().getStatusCode();
133            }
134            
135            @Override
136            public String getStatusText() {
137                    return rsp.getStatusLine().getReasonPhrase();
138            }
139    
140            @Override
141            public String getProtocolVersion() {
142                    return rsp.getStatusLine().getProtocolVersion().toString();
143            }
144    
145            @Override
146            public String getStatusLine() {
147                    return rsp.getStatusLine().toString();
148            }
149    
150            @Override
151            public Header[] getAllHeaders() {
152                    org.apache.http.Header[] src = rsp.getAllHeaders();
153                    if(src==null) return new Header[0];
154                    Header[] trg=new Header[src.length];
155                    for(int i=0;i<src.length;i++){
156                            trg[i]=new HeaderWrap(src[i]);
157                    }
158                    return trg;
159            }
160    }