package xin.glue.ui.common.component; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.posdata.glue.context.PosContext; import com.posdata.glue.dao.vo.PosRowSet; import com.posdata.glue.web.control.PosWebConstants; import common.Logger; import kr.co.comsquare.rwXmlLib.RwXml; public class PosTrustForm { protected HttpServletRequest request; protected HttpServletResponse response; private Map property = new HashMap(); private boolean doGetAllow = false; // private Logger logger = new Loger(); public PosTrustForm setDoGetAllow(boolean doGetAllow) { this.doGetAllow = doGetAllow; return this; } public PosTrustForm(HttpServletRequest request) { this(request, null); } public PosTrustForm(HttpServletRequest request, HttpServletResponse response) { super(); this.request = request; this.response = response; } public PosTrustForm addProperty(String name, String value) { property.put(name, value); return this; } public String toString() { if (!(doGetAllow || request.getQueryString() == null)) return null; StringBuffer buffer = new StringBuffer(); RwXml rx = new RwXml(); rx.setEncoding("UTF-8"); int rootNodeID = RwXml.rootNodeID; int resNode = rx.add(rootNodeID, "resData", ""); if ("true".equalsIgnoreCase(request.getParameter("SystemProperty")) && property.size() > 0) setXml(rx, property, resNode, "Property"); if (request != null) { try { PosContext ctx = (PosContext)request.getAttribute(PosWebConstants.CONTEXT); if (ctx == null) { String service = request.getParameter("ServiceName"); String message = "Context is null, because Service [" + service + "] did not execute or has a problem."; throw new Exception(message); // logger.logInfo(""); } Throwable ex = ctx.getException(); //if (ex != null) { // throw new Exception(ex.getMessage()); //} String[] resultKeys = (String[]) ctx.get("ResultKeyList"); if (resultKeys != null && resultKeys.length > 0) { int length = resultKeys.length; for (int i = 0; i < length; i++) { Object data = ctx.get(resultKeys[i]); int voNode = rx.add(resNode, resultKeys[i] + "_VO", ""); setXml(rx, data, voNode, resultKeys[i] + "_Row"); } } else { throw new Exception("Context do not have [ResultKeyList]."); } ex = ctx.getException(); if (ex != null) { rx.add(resNode, "errorData", ""); } } catch (Exception ex) { buffer.append(ex.toString()); rx.add(resNode, "errorData", ex.getMessage()); ex.printStackTrace(); } } buffer.append(rx.xmlFlush()); buffer.append(rx.xmlEndFlush()); return buffer.toString(); } protected void setXml(RwXml rx, Object data, int voNode, String resultKey) { if (data instanceof PosRowSet) setXml(rx, (PosRowSet)data, voNode, resultKey); else if (data instanceof List) setXml(rx, (List)data, voNode, resultKey); else if (data instanceof Map) setXml(rx, (Map)data, voNode, resultKey); else if (data != null) rx.add(voNode, resultKey, data.toString()); } private void setXml(RwXml rx, Map mapData, int voNode, String resultKey) { Set keySet = mapData.keySet(); Iterator keyItr = keySet.iterator(); Object key = null; int rowNode = rx.add(voNode, resultKey, ""); while (keyItr.hasNext()) { key = keyItr.next(); Object keyData = mapData.get(key); if (keyData == null) rx.add(rowNode, key.toString(), ""); else rx.add(rowNode, key.toString(), keyData.toString().replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">")); } } private void setXml(RwXml rx, PosRowSet rowSet, int voNode, String resultKey) { rowSet.reset(); while (rowSet.hasNext()) { setXml(rx, rowSet.next().getAttributes(), voNode, resultKey); } } private void setXml(RwXml rx, List listSet, int voNode, String resultKey) { int listSize = listSet.size(); for (int i = 0; i < listSize; i++) { setXml(rx, listSet.get(i), voNode, resultKey); } } }