/** * */ package com.trendrr.strest; import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jboss.netty.handler.codec.http.HttpMessage; import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.handler.codec.http.HttpResponse; import org.jboss.netty.handler.codec.http.HttpVersion; import com.trendrr.strest.server.v2.models.StrestHeader.TxnAccept; import com.trendrr.strest.server.v2.models.StrestPacketBase; import com.trendrr.strest.server.v2.models.StrestRequest; import com.trendrr.strest.server.v2.models.StrestResponse; import com.trendrr.strest.server.v2.models.http.StrestHttpResponse; import com.trendrr.strest.server.v2.models.json.StrestJsonResponse; /** * @author Dustin Norlander * @created Jan 13, 2011 * */ public class StrestUtil { protected static Log log = LogFactory.getLog(StrestUtil.class); private static AtomicLong txn = new AtomicLong(0l); public static String generateTxnId() { return "str" + Long.toHexString(txn.incrementAndGet()) + "st"; } public static void validateRequest(StrestRequest packet) throws StrestException { if (packet.getProtocolName() == null) { throw StrestHttpException.BAD_REQUEST("Invalid packet, protocol is required"); } if (packet.getProtocolVersion() == 0) { throw StrestHttpException.BAD_REQUEST("Invalid packet, bad protocol version"); } if (packet.getMethod() == null) { throw StrestHttpException.BAD_REQUEST("Invalid packet, method is required"); } if (packet.getUri() == null) { throw StrestHttpException.BAD_REQUEST("Invalid packet, uri is required"); } } /** * easy check to make sure client can handle multiple returns. * @param request * @return */ public static boolean isTxnMulti(StrestRequest request) { TxnAccept val = request.getTxnAccept(); if (val == null || val == TxnAccept.SINGLE) { return false; } return true; } // public static String txnId(HttpMessage message) { // return message.getHeader(StrestUtil.HEADERS.TXN_ID); // } public static boolean isStrest(StrestRequest request) { return "STREST".equalsIgnoreCase(request.getProtocolName()); } public static String toString(StrestResponse response) { if (response instanceof StrestHttpResponse) { StringBuilder str = new StringBuilder(); str.append(response.getProtocolVersion()); str.append(" "); str.append(response.getStatusCode()); str.append(" "); str.append(response.getStatusMessage()); str.append("\n"); for (String hdr : ((StrestHttpResponse)response).getResponse().getHeaderNames()) { str.append(hdr); str.append(" : "); str.append(response.getHeader(hdr)); str.append("\n"); } str.append("\n\r\n\r"); str.append(response.getContent().toString()); return str.toString(); } else if (response instanceof StrestJsonResponse) { return ((StrestJsonResponse)response).getMap().toJSONString(); } return response.toString(); } }