package railo.commons.net.http.httpclient4;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import railo.commons.io.IOUtil;
import railo.commons.lang.StringUtil;
import railo.commons.net.http.HTTPResponse;
import railo.commons.net.http.HTTPResponseSupport;
import railo.commons.net.http.Header;
public class HTTPResponse4Impl extends HTTPResponseSupport implements HTTPResponse {
HttpResponse rsp;
HttpUriRequest req;
private URL url;
private HttpContext context;
public HTTPResponse4Impl(URL url,HttpContext context, HttpUriRequest req,HttpResponse rsp) {
this.url=url;
this.context=context;
this.req=req;
this.rsp=rsp;
}
@Override
public String getContentAsString() throws IOException {
return getContentAsString(null);
}
@Override
public String getContentAsString(String charset) throws IOException {
HttpEntity entity = rsp.getEntity();
InputStream is=null;
if(StringUtil.isEmpty(charset,true))charset=getCharset();
try{
return IOUtil.toString(is=entity.getContent(), charset);
}
finally {
IOUtil.closeEL(is);
}
}
@Override
public InputStream getContentAsStream() throws IOException {
HttpEntity e = rsp.getEntity();
if(e==null) return null;
return e.getContent();
}
@Override
public byte[] getContentAsByteArray() throws IOException {
HttpEntity entity = rsp.getEntity();
InputStream is=null;
if(entity==null) return new byte[0];
try{
return IOUtil.toBytes(is=entity.getContent());
}
finally {
IOUtil.closeEL(is);
}
}
@Override
public Header getLastHeader(String name) {
org.apache.http.Header header = rsp.getLastHeader(name);
if(header!=null) return new HeaderWrap(header);
return null;
}
@Override
public Header getLastHeaderIgnoreCase(String name) {
return getLastHeaderIgnoreCase(rsp, name);
}
public static Header getLastHeaderIgnoreCase(HttpResponse rsp,String name) {
org.apache.http.Header header = rsp.getLastHeader(name);
if(header!=null) return new HeaderWrap(header);
org.apache.http.Header[] headers = rsp.getAllHeaders();
for(int i=headers.length-1;i>=0;i--){
if(name.equalsIgnoreCase(headers[i].getName())){
return new HeaderWrap(headers[i]);
}
}
return null;
}
@Override
public URL getURL() {
try {
return req.getURI().toURL();
} catch (MalformedURLException e) {
return url;
}
}
public URL getTargetURL() {
URL start = getURL();
HttpUriRequest req = (HttpUriRequest) context.getAttribute(
ExecutionContext.HTTP_REQUEST);
URI uri = req.getURI();
String path=uri.getPath();
String query=uri.getQuery();
if(!StringUtil.isEmpty(query)) path+="?"+query;
URL _url=start;
try {
_url = new URL(start.getProtocol(),start.getHost(),start.getPort(),path);
}
catch (MalformedURLException e) {}
return _url;
}
@Override
public int getStatusCode() {
return rsp.getStatusLine().getStatusCode();
}
@Override
public String getStatusText() {
return rsp.getStatusLine().getReasonPhrase();
}
@Override
public String getProtocolVersion() {
return rsp.getStatusLine().getProtocolVersion().toString();
}
@Override
public String getStatusLine() {
return rsp.getStatusLine().toString();
}
@Override
public Header[] getAllHeaders() {
org.apache.http.Header[] src = rsp.getAllHeaders();
if(src==null) return new Header[0];
Header[] trg=new Header[src.length];
for(int i=0;i<src.length;i++){
trg[i]=new HeaderWrap(src[i]);
}
return trg;
}
}