001    package railo.commons.net.http.httpclient3;
002    
003    import java.io.IOException;
004    import java.io.InputStream;
005    import java.net.MalformedURLException;
006    import java.net.URL;
007    
008    import org.apache.commons.httpclient.HostConfiguration;
009    import org.apache.commons.httpclient.HttpMethod;
010    
011    import railo.commons.io.IOUtil;
012    import railo.commons.lang.StringUtil;
013    import railo.commons.net.http.HTTPResponseSupport;
014    import railo.commons.net.http.Header;
015    
016    public class HTTPResponse3Impl extends HTTPResponseSupport  {
017    
018            private HttpMethod rsp;
019            private URL url;
020    
021            public HTTPResponse3Impl(HttpMethod rsp, URL url) {
022                    this.rsp=rsp;
023                    this.url=url;
024            }
025    
026            @Override
027            public String getContentAsString() throws IOException {
028                    return getContentAsString(getCharset());
029            }
030    
031            @Override
032            public String getContentAsString(String charset) throws IOException {
033                    InputStream is=null;
034                    try{
035                            is=getContentAsStream();
036                            return IOUtil.toString(is,charset);
037                    }
038                    finally {
039                            IOUtil.closeEL(is);
040                    }
041            }
042    
043            @Override
044            public InputStream getContentAsStream() throws IOException {
045                    return rsp.getResponseBodyAsStream();
046            }
047    
048            @Override
049            public byte[] getContentAsByteArray() throws IOException {
050                    InputStream is=null;
051                    try{
052                            return IOUtil.toBytes(is=getContentAsStream());
053                    }
054                    finally {
055                            IOUtil.closeEL(is);
056                    }
057            }
058    
059            @Override
060            public Header getLastHeader(String name) {
061                    return new HeaderWrap(rsp.getResponseHeader(name));
062            }
063    
064            @Override
065            public Header getLastHeaderIgnoreCase(String name) {
066                    org.apache.commons.httpclient.Header[] headers = rsp.getResponseHeaders();
067                    for(int i=headers.length-1;i>=0;i--){
068                            if(headers[i].getName().equalsIgnoreCase(name)) return new HeaderWrap(headers[i]);
069                    }
070                    return null;
071            }
072    
073            @Override
074            public URL getURL() {
075                    HostConfiguration config = rsp.getHostConfiguration();
076                    
077                    try {
078                            String qs = rsp.getQueryString();
079                            if(StringUtil.isEmpty(qs))
080                                    return new URL(config.getProtocol().getScheme(),config.getHost(),config.getPort(),rsp.getPath());
081                            return new URL(config.getProtocol().getScheme(),config.getHost(),config.getPort(),rsp.getPath()+"?"+qs);
082                    } catch (MalformedURLException e) {
083                    }
084                    
085                    return url;
086            }
087    
088            @Override
089            public int getStatusCode() {
090                    return rsp.getStatusCode();
091            }
092    
093            @Override
094            public String getStatusText() {
095                    return rsp.getStatusText();
096            }
097    
098            @Override
099            public String getProtocolVersion() {
100                    return rsp.getStatusLine().getHttpVersion();
101            }
102    
103            @Override
104            public String getStatusLine() {
105                    return rsp.getStatusLine().toString();
106            }
107    
108            @Override
109            public Header[] getAllHeaders() {
110                    org.apache.commons.httpclient.Header[] src = rsp.getResponseHeaders();
111                    if(src==null) return new Header[0];
112                    Header[] trg=new Header[src.length];
113                    for(int i=0;i<src.length;i++){
114                            trg[i]=new HeaderWrap(src[i]);
115                    }
116                    return trg;
117            }
118    
119    
120    }