/** * */ package com.trendrr.oss.strest.models.json; import java.io.DataInputStream; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.trendrr.oss.DynMap; import com.trendrr.oss.strest.models.StrestHeader; import com.trendrr.oss.strest.models.StrestHeader.ContentEncoding; import com.trendrr.oss.strest.models.StrestResponse; import com.trendrr.oss.strest.models.StrestHeader.TxnStatus; /** * @author Dustin Norlander * @created Apr 26, 2012 * */ public class StrestJsonResponse extends StrestJsonBase implements StrestResponse { /** * @param map */ public StrestJsonResponse(DynMap map) { super(map); } public StrestJsonResponse() { super(); } /** * creates a new json response from the passed in response. * @param response */ public StrestJsonResponse(StrestResponse response) throws Exception { super(); if (response.getContentEncoding() == ContentEncoding.JSON && response.getContentLength() > 0) { byte[] json = new byte[response.getContentLength()]; DataInputStream dataIs = new DataInputStream(response.getContent()); dataIs.readFully(json); this.map.putAll(DynMap.instance(new String(json, "utf8"))); } else { this.setContent(response.getContentEncoding(), response.getContentLength(), response.getContent()); } this.setProtocol(response.getProtocolName(), response.getProtocolVersion()); this.setStatus(response.getStatusCode(), response.getStatusMessage()); this.setTxnId(response.getTxnId()); this.setTxnStatus(response.getTxnStatus()); } protected static Log log = LogFactory.getLog(StrestJsonResponse.class); /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestResponse#setStatus(int, java.lang.String) */ @Override public void setStatus(int code, String message) { this.map.putWithDot("status.code", code); this.map.putWithDot("status.message", message); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestResponse#getStatusCode() */ @Override public int getStatusCode() { return this.map.getInteger("status.code"); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestResponse#getStatusMessage() */ @Override public String getStatusMessage() { return this.map.getString("status.message"); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestResponse#setTxnStatus(com.trendrr.strest.server.v2.models.StrestHeader.TxnStatus) */ @Override public void setTxnStatus(TxnStatus status) { this.addHeader(StrestHeader.Name.TXN_STATUS, status.getJson()); } /* (non-Javadoc) * @see com.trendrr.strest.server.v2.models.StrestResponse#getTxnStatus() */ @Override public TxnStatus getTxnStatus() { return TxnStatus.instance(this.getHeader(StrestHeader.Name.TXN_STATUS)); } /* (non-Javadoc) * @see com.trendrr.oss.strest.models.StrestPacketBase#setParams(com.trendrr.oss.DynMap) */ @Override public void setParams(DynMap params) { this.map.putAll(params); } /* (non-Javadoc) * @see com.trendrr.oss.strest.models.StrestPacketBase#getParams() */ @Override public DynMap getParams() { return this.map; } }