package org.caudexorigo.jersey;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.glassfish.jersey.server.ContainerException;
import org.glassfish.jersey.server.ContainerResponse;
import org.glassfish.jersey.server.spi.ContainerResponseWriter;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBufferOutputStream;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
public class JerseyNettyResponseWriter implements ContainerResponseWriter
{
private final HttpResponse response;
public JerseyNettyResponseWriter(HttpResponse response)
{
super();
this.response = response;
}
@Override
public void commit()
{
// TODO Auto-generated method stub
}
@Override
public boolean enableResponseBuffering()
{
return true;
}
@Override
public void failure(Throwable error)
{
throw new RuntimeException(error);
}
@Override
public void setSuspendTimeout(long timeOut, TimeUnit timeUnit) throws IllegalStateException
{
// TODO Auto-generated method stub
}
@Override
public boolean suspend(long timeOut, TimeUnit timeUnit, TimeoutHandler timeoutHandler)
{
// TODO Auto-generated method stub
return false;
}
@Override
public OutputStream writeResponseStatusAndHeaders(long contentLength, ContainerResponse containerResponse) throws ContainerException
{
response.setStatus(HttpResponseStatus.valueOf(containerResponse.getStatus()));
for (Map.Entry<String, List<Object>> e : containerResponse.getHeaders().entrySet())
{
List<String> values = new ArrayList<String>();
for (Object v : e.getValue())
values.add(containerResponse.getHeaderString((v.toString())));
response.setHeader(e.getKey(), values);
}
ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
response.setContent(buffer);
return new ChannelBufferOutputStream(buffer);
}
}