Package com.trendrr.strest.server

Source Code of com.trendrr.strest.server.ResponseBuilder

/**
*
*/
package com.trendrr.strest.server;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.concurrent.atomic.AtomicLong;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.handler.codec.http.DefaultHttpRequest;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpHeaders;
import org.jboss.netty.handler.codec.http.HttpMethod;
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;

import com.trendrr.oss.DynMap;
import com.trendrr.strest.ContentTypes;
import com.trendrr.strest.StrestUtil;


/**
* @author Dustin Norlander
* @created Jan 26, 2011
*
*/
public class ResponseBuilder {

  protected Log log = LogFactory.getLog(ResponseBuilder.class);

  HttpResponse response;
 
  public static void main(String...strings) {
    ResponseBuilder b = new ResponseBuilder();
  }
 
  public static ResponseBuilder instance() {
    return new ResponseBuilder();
  }
 
  public static ResponseBuilder instance(HttpRequest request) {
    return new ResponseBuilder(request);
  }
 
  public static ResponseBuilder instance(HttpResponse response) {
    return new ResponseBuilder(response);
  }
 
  /**
   * Creates a response builder
   * txn-status is complete by default
   */
  public ResponseBuilder() {
    response = new DefaultHttpResponse(
        new HttpVersion("STREST", 0, 1, true), HttpResponseStatus.OK);
    this.txnStatus(StrestUtil.HEADERS.TXN_STATUS_VALUES.COMPLETE);
  }
 
 
  /**
   * creates a new response builder based on the txn id of the request.
   * @param request
   */
  public ResponseBuilder(HttpRequest request) {
    response = new DefaultHttpResponse(
        request.getProtocolVersion(), HttpResponseStatus.OK);
    this.txnId(request.getHeader(StrestUtil.HEADERS.TXN_ID));
   
  }
 
  /**
   * creates a new response builder that acts on the given response.
   * @param response
   */
  public ResponseBuilder(HttpResponse response) {
    this.response = response;
  }
 
  public ResponseBuilder txnStatus(String status) {
    response.setHeader(StrestUtil.HEADERS.TXN_STATUS, status);
    return this;
  }
 
  /**
   * sets the txn status to complete
   * @return
   */
  public ResponseBuilder txnStatusComplete() {
    response.setHeader(StrestUtil.HEADERS.TXN_STATUS, StrestUtil.HEADERS.TXN_STATUS_VALUES.COMPLETE);
    return this;
  }
 
  /**
   * sets txn status to continue
   * @return
   */
  public ResponseBuilder txnStatusContinue() {
    response.setHeader(StrestUtil.HEADERS.TXN_STATUS, StrestUtil.HEADERS.TXN_STATUS_VALUES.CONTINUE);
    return this;
  }
 
  /**
   * Sets the status to 302, and the Location to the url.  This is a standard (sort of) redirect.
   *
   * This could be problematic for STREST clients, it is up to them to implement
   * redirects (or not).
   *
   * @param url
   * @return
   */
  public ResponseBuilder redirect(String url) {
    this.response.setStatus(HttpResponseStatus.FOUND);
    this.response.setHeader("Location", url);
    return this;
  }
 
  /**
   * Sets the status of the header.
   *
   * @param status
   * @return
   */
  public ResponseBuilder status(HttpResponseStatus status) {
    this.response.setStatus(status);
    return this;
  }
 
  /**
   * Sets the status of the header.
   *
   * @param status
   * @return
   */
  public ResponseBuilder status(int code, String message) {
    this.response.setStatus(new HttpResponseStatus(code, message));
    return this;
  }
 
  /**
   * Set the Strest-Txn-Id header.
   * @param id
   * @return
   */
  public ResponseBuilder txnId(String id) {
    if (id != null)
      response.setHeader(StrestUtil.HEADERS.TXN_ID, id);
    return this;
  }
 
 
  public ResponseBuilder header(String header, Object value) {
    response.setHeader(header, value);
    return this;
  }
 
  public ResponseBuilder content(String mimeType, byte[] bytes) {
    response.setContent(ChannelBuffers.wrappedBuffer(bytes));
    response.setHeader("Content-Type", mimeType);
    response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, bytes.length);
    return this;
  }
 
  /**
   * encodes the text as utf8 and swallows and logs a warning for any character encoding exceptions
   * @param mimeType
   * @param content
   * @return
   */
  public ResponseBuilder contentUTF8(String mimeType, String content) {
    try {
      this.content(mimeType, content.getBytes("utf8"));
    } catch (UnsupportedEncodingException e) {
      log.warn("Swallowed", e);
    }
    return this;
  }
  /**
   * same as above but sets mimetype to text/plain
   * @param content
   * @return
   */
  public ResponseBuilder contentUTF8(String content) {
    this.contentUTF8(ContentTypes.TEXT, content);
    return this;
  }
 
  public ResponseBuilder contentJSON(DynMap mp) {
    return this.contentUTF8(ContentTypes.JSON, mp.toJSONString());
  }
 
  public HttpResponse getResponse() {
    return this.response;
  }
 
  public void setResponse(HttpResponse response) {
    this.response = response;
  }
 
  public String getTxnStatus() {
    return response.getHeader(StrestUtil.HEADERS.TXN_STATUS);
  }
 
}
TOP

Related Classes of com.trendrr.strest.server.ResponseBuilder

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.