Package com.nabalive.framework.web

Source Code of com.nabalive.framework.web.Response

package com.nabalive.framework.web;

import com.thoughtworks.xstream.XStream;
import org.codehaus.jackson.map.ObjectMapper;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBufferOutputStream;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpHeaders;
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.util.CharsetUtil;

import java.io.IOException;
import java.nio.charset.Charset;

import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive;
import static org.jboss.netty.handler.codec.http.HttpHeaders.setContentLength;
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.OK;
import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;

/**
* Created by IntelliJ IDEA.
* User: Julien Cheype
* Date: 10/24/11
*/
public class Response {
    private final static ObjectMapper mapper = new ObjectMapper();
    private final static XStream xstreamXML = new XStream();

//    static{
//        SimpleModule simpleModule = new SimpleModule("SimpleModule",
//            new Version(1,0,0,null));
//        simpleModule.addSerializer(new ObjectIdSerializer());
//        mapper.registerModule(simpleModule);
//    }

    public final ChannelHandlerContext ctx;
    public final HttpRequest request;


    public Response(ChannelHandlerContext ctx, HttpRequest request) {
        this.request = request;
        this.ctx = ctx;
    }

    public void write(byte[] data) {
        final ChannelBuffer buffer = ChannelBuffers.copiedBuffer(data);
        write(buffer);
    }

    public void write(ChannelBuffer buffer) {
        HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
        response.setHeader(HttpHeaders.Names.SERVER, "nuvoos server");

        setContentLength(response, buffer.readableBytes());
        response.setContent(buffer);

        if (isKeepAlive(request)) {
            response.setHeader(HttpHeaders.Names.CONNECTION, "Keep-Alive");
        }

        final ChannelFuture future = ctx.getChannel().write(response);
        if (!isKeepAlive(request)) {
            future.addListener(ChannelFutureListener.CLOSE);
        }
    }

    public void write(String data, Charset charset) {
        write(data.getBytes(charset));
    }

    public void write(String data) {
        write(data, CharsetUtil.UTF_8);
    }

    public void write(HttpResponse response) {
        if (isKeepAlive(request)) {
            response.setHeader(HttpHeaders.Names.CONNECTION, "Keep-Alive");
        }
        setContentLength(response, response.getContent().readableBytes());

        ChannelFuture future = ctx.getChannel().write(response);
        if (!isKeepAlive(request)) {
            future.addListener(ChannelFutureListener.CLOSE);
        }
    }

    public void writeJSON(Object object) throws IOException {
        ChannelBuffer channelBuffer = ChannelBuffers.dynamicBuffer();
        ChannelBufferOutputStream outputStream = new ChannelBufferOutputStream(channelBuffer);
        mapper.writeValue(outputStream, object);
        outputStream.close();
        write(channelBuffer);
    }

    public void writeXML(Object object) {
        ChannelBuffer channelBuffer = ChannelBuffers.dynamicBuffer();
        ChannelBufferOutputStream outputStream = new ChannelBufferOutputStream(channelBuffer);
        xstreamXML.toXML(object, outputStream);
        write(channelBuffer);
    }
}
TOP

Related Classes of com.nabalive.framework.web.Response

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.