/** * */ package com.trendrr.strest.server.v2.models.http; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; 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.HttpHeaders; import org.jboss.netty.handler.codec.http.HttpMessage; import org.jboss.netty.handler.codec.http.HttpVersion; import com.trendrr.oss.DynMap; import com.trendrr.strest.server.v2.models.StrestPacketBase; import com.trendrr.strest.server.v2.models.StrestHeader.Name; /** * @author Dustin Norlander * @created May 1, 2012 * */ public class StrestHttpBase implements StrestPacketBase { protected static Log log = LogFactory.getLog(StrestHttpBase.class); protected HttpMessage message; /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#addHeader(java.lang.String, java.lang.String) */ @Override public void addHeader(String header, String value) { if (header == null || value == null) return; message.addHeader(header, value); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#addHeader(com.trendrr.strest.server.v2.models.StrestHeader.Name, java.lang.String) */ @Override public void addHeader(Name header, String value) { this.addHeader(header.getHttpName(), value); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#getHeader(com.trendrr.strest.server.v2.models.StrestHeader.Name) */ @Override public String getHeader(Name header) { return message.getHeader(header.getHttpName()); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#getHeader(java.lang.String) */ @Override public String getHeader(String header) { return message.getHeader(header); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#setStrestProtocolVersion(float) */ @Override public void setProtocol(String name, float version) { String tmp[] = Float.toString(version).split("\\."); int major = Integer.parseInt(tmp[0]); int minor = 0; if (tmp.length >0) { minor = Integer.parseInt(tmp[1]); } this.message.setProtocolVersion(new HttpVersion(name, major, minor, true)); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#getStrestProtocolVersion() */ @Override public float getProtocolVersion() { HttpVersion version= this.message.getProtocolVersion(); if (version == null) { return 0; } return Float.parseFloat(this.message.getProtocolVersion().getMajorVersion() + "." + this.message.getProtocolVersion().getMinorVersion()); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#getProtocolName() */ @Override public String getProtocolName() { HttpVersion version= this.message.getProtocolVersion(); if (version == null) { return "STREST"; } return version.getProtocolName(); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#setTxnId(java.lang.String) */ @Override public void setTxnId(String id) { this.addHeader(Name.TXN_ID, id); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#getTxnId() */ @Override public String getTxnId() { return this.getHeader(Name.TXN_ID); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#setContent(com.trendrr.oss.DynMap) */ @Override public void setContent(DynMap content) { try { this.setContent("application/json", content.toJSONString().getBytes("utf8")); } catch (UnsupportedEncodingException e) { log.error("Caught", e); } } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#setContent(java.lang.String, java.lang.String) */ @Override public void setContent(String contentType, byte[] bytes) { this.message.setContent(ChannelBuffers.wrappedBuffer(bytes)); this.message.setHeader("Content-Type", contentType); this.message.setHeader(HttpHeaders.Names.CONTENT_LENGTH, bytes.length); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#setContent(java.lang.String, java.lang.String) */ @Override public void setContent(String contentType, String utf8Str) { try { this.setContent(contentType, utf8Str.getBytes("utf8")); } catch (UnsupportedEncodingException e) { log.error("Caught", e); } } /** * Returns the content as a byte array. */ @Override public Object getContent() { int length = this.message.getContent().readableBytes(); byte[] bytes = new byte[length]; this.message.getContent().getBytes(0, bytes); return bytes; } public String getContentAsString() { try { return new String((byte[])this.getContent(), "utf8"); } catch (Exception x) { return null; } } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#cleanup() */ @Override public void cleanup() { this.message = null; } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestPacketBase#toByteArray() */ @Override public byte[] toByteArray() { return null; } }