/**
*
*/
package com.trendrr.strest.server.v2.models.http;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.netty.handler.codec.http.HttpMethod;
import org.jboss.netty.handler.codec.http.HttpRequest;
import com.trendrr.oss.DynMap;
import com.trendrr.oss.DynMapFactory;
import com.trendrr.strest.server.connections.StrestConnectionChannel;
import com.trendrr.strest.server.connections.StrestNettyConnectionChannel;
import com.trendrr.strest.server.v2.models.StrestRequest;
import com.trendrr.strest.server.v2.models.StrestHeader.Method;
import com.trendrr.strest.server.v2.models.StrestHeader.Name;
import com.trendrr.strest.server.v2.models.StrestHeader.TxnAccept;
/**
* @author Dustin Norlander
* @created May 1, 2012
*
*/
public class StrestHttpRequest extends StrestHttpBase implements StrestRequest {
protected static Log log = LogFactory.getLog(StrestHttpRequest.class);
protected StrestConnectionChannel channel;
public StrestHttpRequest(HttpRequest request) {
this.message = request;
}
public HttpRequest getRequest() {
return (HttpRequest)this.message;
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#getConnectionChannel()
*/
@Override
public StrestConnectionChannel getConnectionChannel() {
return this.channel;
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#setConnectionChannel(com.trendrr.strest.server.connections.StrestConnectionChannel)
*/
@Override
public void setConnectionChannel(StrestConnectionChannel channel) {
this.channel = channel;
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#setMethod(com.trendrr.strest.server.v2.models.StrestHeader.Method)
*/
@Override
public void setMethod(Method method) {
this.getRequest().setMethod(HttpMethod.valueOf(method.toString()));
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#getMethod()
*/
@Override
public Method getMethod() {
return Method.instance(this.getRequest().getMethod().toString());
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#setUri(java.lang.String)
*/
@Override
public void setUri(String uri) {
this.getRequest().setUri(uri);
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#getUri()
*/
@Override
public String getUri() {
return this.getRequest().getUri();
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#setTxnAccept(com.trendrr.strest.server.v2.models.StrestHeader.TxnAccept)
*/
@Override
public void setTxnAccept(TxnAccept accept) {
this.addHeader(Name.TXN_ACCEPT, accept.getHttp());
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#getTxnAccept()
*/
@Override
public TxnAccept getTxnAccept() {
return TxnAccept.instance(this.getHeader(Name.TXN_ACCEPT));
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#setParams(com.trendrr.oss.DynMap)
*/
@Override
public void setParams(DynMap params) {
String encodedParams = params.toURLString();
if (encodedParams == null || encodedParams.isEmpty()) {
return;
}
String uri = this.getUri();
if (!uri.contains("?")) {
uri = uri + "?";
} else {
uri = uri + "&";
}
this.setUri(uri + encodedParams);
}
protected DynMap params = null;
protected DynMap paramsPOST = null;
protected DynMap paramsGET = null;
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestRequest#getParams()
*/
@Override
public DynMap getParams() {
if (params == null) {
params = new DynMap();
params.putAll(this.getParamsGET());
params.putAll(this.getParamsPOST());
}
return params;
}
public DynMap getParamsPOST() {
if (paramsPOST != null) {
return this.paramsPOST;
}
//parse any post params
String contentType = this.getHeader(Name.CONTENT_TYPE);
if(contentType != null){
String pms = this.getContentAsString();
if(pms != null){
if (contentType.contains("form-urlencoded")) {
this.paramsPOST = DynMapFactory.instanceFromURLEncoded(pms);
}else if (contentType.contains("json")){
this.paramsPOST = DynMapFactory.instanceFromJSON(pms);
}
}
}
if (this.paramsPOST == null)
this.paramsPOST = new DynMap();
return this.paramsPOST;
}
public DynMap getParamsGET() {
if (this.paramsGET == null) {
this.paramsGET = DynMapFactory.instanceFromURL(this.getUri());
}
return this.paramsGET;
}
/* (non-Javadoc)
* @see com.trendrr.strest.server.v2.models.StrestPacketBase#cleanup()
*/
@Override
public void cleanup() {
super.cleanup();
this.channel = null;
}
}