001 package com.allaire.cfx; 002 003 import java.util.Enumeration; 004 import java.util.Hashtable; 005 006 import railo.loader.engine.CFMLEngineFactory; 007 import railo.runtime.cfx.QueryWrap; 008 009 010 011 /** 012 * 013 */ 014 public final class DebugResponse implements Response { 015 016 private StringBuffer write=new StringBuffer(); 017 private StringBuffer writeDebug=new StringBuffer(); 018 private Hashtable variables=new Hashtable(); 019 private Hashtable queries=new Hashtable(); 020 021 022 /** 023 * @see com.allaire.cfx.Response#addQuery(java.lang.String, java.lang.String[]) 024 */ 025 public Query addQuery(String name, String[] columns) { 026 QueryWrap query = new QueryWrap(CFMLEngineFactory.getInstance().getCreationUtil().createQuery(columns,0,name),name.toLowerCase()); 027 queries.put(name.toLowerCase(),query); 028 return query; 029 } 030 031 /** 032 * @see com.allaire.cfx.Response#setVariable(java.lang.String, java.lang.String) 033 */ 034 public void setVariable(String key, String value) { 035 variables.put(key.toLowerCase(),value); 036 } 037 038 /** 039 * @see com.allaire.cfx.Response#write(java.lang.String) 040 */ 041 public void write(String str) { 042 write.append(str); 043 } 044 045 /** 046 * @see com.allaire.cfx.Response#writeDebug(java.lang.String) 047 */ 048 public void writeDebug(String str) { 049 writeDebug.append(str); 050 } 051 052 /** 053 * print out the response 054 */ 055 public void printResults() { 056 System.out.println("[ --- Railo Debug Response --- ]"); 057 System.out.println(); 058 059 System.out.println("----------------------------"); 060 System.out.println("| Output |"); 061 System.out.println("----------------------------"); 062 System.out.println(write); 063 System.out.println(); 064 065 System.out.println("----------------------------"); 066 System.out.println("| Debug Output |"); 067 System.out.println("----------------------------"); 068 System.out.println(writeDebug); 069 System.out.println(); 070 071 System.out.println("----------------------------"); 072 System.out.println("| Variables |"); 073 System.out.println("----------------------------"); 074 075 Enumeration e = variables.keys(); 076 while(e.hasMoreElements()) { 077 Object key=e.nextElement(); 078 System.out.println("[Variable:"+key+"]"); 079 System.out.println(escapeString(variables.get(key).toString())); 080 } 081 System.out.println(); 082 083 e = queries.keys(); 084 while(e.hasMoreElements()) { 085 Query query=(Query) queries.get(e.nextElement()); 086 printQuery(query); 087 System.out.println(); 088 } 089 090 } 091 092 /** 093 * print out a query 094 * @param query 095 */ 096 public void printQuery(Query query) { 097 if(query!=null) { 098 String[] cols = query.getColumns(); 099 int rows = query.getRowCount(); 100 System.out.println("[Query:"+query.getName()+"]"); 101 for(int i=0;i<cols.length;i++) { 102 if(i>0)System.out.print(", "); 103 System.out.print(cols[i]); 104 } 105 System.out.println(); 106 107 for(int row=1;row<=rows;row++) { 108 for(int col=1;col<=cols.length;col++) { 109 if(col>1)System.out.print(", "); 110 System.out.print(escapeString(query.getData(row,col))); 111 } 112 System.out.println(); 113 } 114 } 115 } 116 117 private String escapeString(String string) { 118 int len=string.length(); 119 StringBuffer sb=new StringBuffer(len); 120 for(int i=0;i<len;i++) { 121 char c=string.charAt(i); 122 if(c=='\n')sb.append("\\n"); 123 else if(c=='\t')sb.append("\\t"); 124 else if(c=='\\')sb.append("\\\\"); 125 else if(c=='\b')sb.append("\\b"); 126 else if(c=='\r')sb.append("\\r"); 127 else if(c=='\"')sb.append("\\\""); 128 else sb.append(c); 129 } 130 131 132 133 return "\""+sb.toString()+"\""; 134 } 135 136 137 }