/**
*
*/
package com.grendelscan.commons.http.apache_overrides.requests;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.commons.lang.NotImplementedException;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.RequestLine;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.message.BasicRequestLine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.grendelscan.commons.http.wrappers.HttpRequestWrapper;
/**
* @author david
*
*/
public class GenericRequestWithBody extends HttpEntityEnclosingRequestBase
{
private static final Logger LOGGER = LoggerFactory.getLogger(GenericRequestWithBody.class);
private String method;
private String stringURI;
private HttpRequestWrapper wrapper;
public GenericRequestWithBody(String method, String stringURI, HttpRequestWrapper wrapper)
{
this.method = method;
this.wrapper = wrapper;
this.stringURI = stringURI;
}
/* (non-Javadoc)
* @see org.apache.http.client.methods.HttpRequestBase#getMethod()
*/
@Override
public String getMethod()
{
return method;
}
@Override
public URI getURI()
{
URI u = null;
try
{
u = new URI(stringURI);
}
catch (URISyntaxException e)
{
LOGGER.error("Illegal URI in request. This method should only be called for the caching client: " + stringURI, e);
}
return u;
}
public final String getStringURI()
{
return stringURI;
}
@Override
public RequestLine getRequestLine()
{
return new BasicRequestLine(method, stringURI, getProtocolVersion());
}
@Override
public void addHeader(Header header)
{
wrapper.getHeaders().addHeader(header);
super.addHeader(header);
}
@Override
public void addHeader(String name, String value)
{
wrapper.getHeaders().addHeader(name, value);
super.addHeader(name, value);
}
@Override
public void setHeader(Header header)
{
wrapper.getHeaders().updateHeader(header);
super.setHeader(header);
}
@Override
public void setHeader(String name, String value)
{
wrapper.getHeaders().updateHeader(name, value);
super.setHeader(name, value);
}
@Override
public void setHeaders(Header[] headers)
{
wrapper.getHeaders().setHeaders(headers);
super.setHeaders(headers);
}
@Override
public void removeHeader(Header header)
{
wrapper.getHeaders().removeHeader(header);
super.removeHeader(header);
}
@Override
public void removeHeaders(String name)
{
wrapper.getHeaders().removeHeaders(name);
super.removeHeaders(name);
}
@Override
public void setEntity(@SuppressWarnings("unused") HttpEntity entity)
{
throw new NotImplementedException("Don't set the entity");
}
@Override
public void setURI(@SuppressWarnings("unused") URI uri)
{
throw new NotImplementedException("Don't use real URIs here");
}
@Override
public HttpEntity getEntity()
{
byte body[] = wrapper.getBody();
if (body == null)
{
return null;
}
return new ByteArrayEntity(body);
}
}