package com.allaire.cfx; import java.util.Enumeration; import java.util.Hashtable; import railo.loader.engine.CFMLEngineFactory; import railo.runtime.cfx.QueryWrap; /** * */ public final class DebugResponse implements Response { private StringBuffer write=new StringBuffer(); private StringBuffer writeDebug=new StringBuffer(); private Hashtable variables=new Hashtable(); private Hashtable queries=new Hashtable(); /** * @see com.allaire.cfx.Response#addQuery(java.lang.String, java.lang.String[]) */ public Query addQuery(String name, String[] columns) { QueryWrap query = new QueryWrap(CFMLEngineFactory.getInstance().getCreationUtil().createQuery(columns,0,name),name.toLowerCase()); queries.put(name.toLowerCase(),query); return query; } /** * @see com.allaire.cfx.Response#setVariable(java.lang.String, java.lang.String) */ public void setVariable(String key, String value) { variables.put(key.toLowerCase(),value); } /** * @see com.allaire.cfx.Response#write(java.lang.String) */ public void write(String str) { write.append(str); } /** * @see com.allaire.cfx.Response#writeDebug(java.lang.String) */ public void writeDebug(String str) { writeDebug.append(str); } /** * print out the response */ public void printResults() { System.out.println("[ --- Railo Debug Response --- ]"); System.out.println(); System.out.println("----------------------------"); System.out.println("| Output |"); System.out.println("----------------------------"); System.out.println(write); System.out.println(); System.out.println("----------------------------"); System.out.println("| Debug Output |"); System.out.println("----------------------------"); System.out.println(writeDebug); System.out.println(); System.out.println("----------------------------"); System.out.println("| Variables |"); System.out.println("----------------------------"); Enumeration e = variables.keys(); while(e.hasMoreElements()) { Object key=e.nextElement(); System.out.println("[Variable:"+key+"]"); System.out.println(escapeString(variables.get(key).toString())); } System.out.println(); e = queries.keys(); while(e.hasMoreElements()) { Query query=(Query) queries.get(e.nextElement()); printQuery(query); System.out.println(); } } /** * print out a query * @param query */ public void printQuery(Query query) { if(query!=null) { String[] cols = query.getColumns(); int rows = query.getRowCount(); System.out.println("[Query:"+query.getName()+"]"); for(int i=0;i<cols.length;i++) { if(i>0)System.out.print(", "); System.out.print(cols[i]); } System.out.println(); for(int row=1;row<=rows;row++) { for(int col=1;col<=cols.length;col++) { if(col>1)System.out.print(", "); System.out.print(escapeString(query.getData(row,col))); } System.out.println(); } } } private String escapeString(String string) { int len=string.length(); StringBuffer sb=new StringBuffer(len); for(int i=0;i<len;i++) { char c=string.charAt(i); if(c=='\n')sb.append("\\n"); else if(c=='\t')sb.append("\\t"); else if(c=='\\')sb.append("\\\\"); else if(c=='\b')sb.append("\\b"); else if(c=='\r')sb.append("\\r"); else if(c=='\"')sb.append("\\\""); else sb.append(c); } return "\""+sb.toString()+"\""; } }