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    }