package org.jboss.pitbull.internal.client;
import org.jboss.pitbull.ContentOutputStream;
import org.jboss.pitbull.client.ClientInvocation;
import org.jboss.pitbull.client.ClientResponse;
import org.jboss.pitbull.internal.NotImplementedYetException;
import org.jboss.pitbull.internal.nio.http.HttpRequestHeader;
import java.io.IOException;
import java.util.concurrent.Future;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class ClientInvocationImpl implements ClientInvocation
{
protected ClientConnectionImpl connection;
protected HttpRequestHeader requestHeader = new HttpRequestHeader();
protected ClientContentOutputStream output;
public ClientInvocationImpl(ClientConnectionImpl connection, String path)
{
this.connection = connection;
requestHeader.getHeaders().setHeader("Host", connection.getHostHeader());
requestHeader.setUri(path);
requestHeader.setHttpVersion("HTTP/1.1");
}
@Override
public ClientInvocation header(String name, String value)
{
requestHeader.getHeaders().addHeader(name, value);
return this;
}
@Override
public ClientInvocation get()
{
requestHeader.setMethod("GET");
return this;
}
@Override
public ClientInvocation put()
{
requestHeader.setMethod("PUT");
return this;
}
@Override
public ClientInvocation post()
{
requestHeader.setMethod("POST");
return this;
}
@Override
public ClientInvocation delete()
{
requestHeader.setMethod("DELETE");
return this;
}
@Override
public ClientInvocation method(String method)
{
requestHeader.setMethod(method);
return this;
}
@Override
public ContentOutputStream getRequestBody()
{
if (output == null)
{
output = new ClientContentOutputStream(requestHeader, connection.channel, 8192);
}
return output;
}
@Override
public ClientResponse invoke() throws IOException
{
getRequestBody().close();
ClientResponseImpl impl = new ClientResponseImpl(connection);
impl.awaitHttpResponse();
return impl;
}
@Override
public Future<ClientResponse> submit() throws IOException
{
throw new NotImplementedYetException();
}
}