package org.jboss.resteasy.plugins.server.netty;
import org.jboss.resteasy.core.SynchronousDispatcher;
import org.jboss.resteasy.core.SynchronousExecutionContext;
import org.jboss.resteasy.plugins.providers.FormUrlEncodedProvider;
import org.jboss.resteasy.plugins.server.BaseHttpRequest;
import org.jboss.resteasy.specimpl.ResteasyHttpHeaders;
import org.jboss.resteasy.spi.NotImplementedYetException;
import org.jboss.resteasy.spi.ResteasyAsynchronousContext;
import org.jboss.resteasy.spi.ResteasyUriInfo;
import org.jboss.resteasy.util.Encode;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Abstraction for an inbound http request on the server, or a response from a server to a client
* <p/>
* We have this abstraction so that we can reuse marshalling objects in a client framework and serverside framework
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @author Norman Maurer
* @version $Revision: 1 $
*/
public class NettyHttpRequest extends BaseHttpRequest
{
protected ResteasyHttpHeaders httpHeaders;
protected SynchronousDispatcher dispatcher;
protected String httpMethod;
protected InputStream inputStream;
protected Map<String, Object> attributes = new HashMap<String, Object>();
protected NettyHttpResponse httpResponse;
private final boolean is100ContinueExpected;
public NettyHttpRequest(ResteasyHttpHeaders httpHeaders, ResteasyUriInfo uri, String httpMethod, SynchronousDispatcher dispatcher, NettyHttpResponse httpResponse, boolean is100ContinueExpected)
{
super(uri);
this.is100ContinueExpected = is100ContinueExpected;
this.httpResponse = httpResponse;
this.dispatcher = dispatcher;
this.httpHeaders = httpHeaders;
this.httpMethod = httpMethod;
}
@Override
public MultivaluedMap<String, String> getMutableHeaders()
{
return httpHeaders.getMutableHeaders();
}
@Override
public void setHttpMethod(String method)
{
this.httpMethod = method;
}
@Override
public Enumeration<String> getAttributeNames()
{
Enumeration<String> en = new Enumeration<String>()
{
private Iterator<String> it = attributes.keySet().iterator();
@Override
public boolean hasMoreElements()
{
return it.hasNext();
}
@Override
public String nextElement()
{
return it.next();
}
};
return en;
}
@Override
public ResteasyAsynchronousContext getAsyncContext()
{
return new SynchronousExecutionContext(dispatcher, this, httpResponse);
}
@Override
public Object getAttribute(String attribute)
{
return attributes.get(attribute);
}
@Override
public void setAttribute(String name, Object value)
{
attributes.put(name, value);
}
@Override
public void removeAttribute(String name)
{
attributes.remove(name);
}
@Override
public HttpHeaders getHttpHeaders()
{
return httpHeaders;
}
@Override
public InputStream getInputStream()
{
return inputStream;
}
@Override
public void setInputStream(InputStream stream)
{
this.inputStream = stream;
}
@Override
public String getHttpMethod()
{
return httpMethod;
}
public NettyHttpResponse getResponse()
{
return httpResponse;
}
public boolean isKeepAlive()
{
return httpResponse.isKeepAlive();
}
public boolean is100ContinueExpected()
{
return is100ContinueExpected;
}
@Override
public void forward(String path)
{
throw new NotImplementedYetException();
}
@Override
public boolean wasForwarded()
{
return false;
}
}