001    package railo.runtime.dump;
002    
003    import java.io.IOException;
004    import java.io.StringWriter;
005    import java.io.Writer;
006    
007    import railo.commons.lang.StringUtil;
008    import railo.runtime.PageContext;
009    import railo.runtime.engine.ThreadLocalPageContext;
010    
011    public class TextDumpWriter implements DumpWriter {
012    
013            //private static int count=0;
014    
015            public void writeOut(PageContext pc,DumpData data, Writer writer, boolean expand) throws IOException {
016                    writeOut(pc,data, writer, expand, 0);
017            }
018            private void writeOut(PageContext pc,DumpData data, Writer writer, boolean expand, int level) throws IOException {
019                    
020                    if(data==null) return;
021                    if(!(data instanceof DumpTable)) {
022                            writer.write(StringUtil.escapeHTML(data.toString()));
023                            return;
024                    }
025                    DumpTable table=(DumpTable) data;
026                    
027                    DumpRow[] rows = table.getRows();
028                    int cols=0;
029                    for(int i=0;i<rows.length;i++)if(rows[i].getItems().length>cols)cols=rows[i].getItems().length;
030                    
031                    
032                    // header
033                    if(!StringUtil.isEmpty(table.getTitle(),true)) {
034                            
035                            String contextPath="";
036                            pc = ThreadLocalPageContext.get(pc);
037                            if(pc!=null){
038                                    contextPath=pc. getHttpServletRequest().getContextPath();
039                                    if(contextPath==null)contextPath="";
040                            }
041                            String header=table.getTitle()+ (StringUtil.isEmpty(table.getComment())?"":"\n"+table.getComment());
042                            writer.write(header+"\n");
043                            if(level>0)writer.write(StringUtil.repeatString("    ", level));
044                    }
045                    
046                    // items
047                    DumpData value;
048                    for(int i=0;i<rows.length;i++) {
049                            DumpData[] items=rows[i].getItems();
050                            //int comperator=1;
051                            for(int y=0;y<cols;y++) {
052                                    if(y<=items.length-1) value=items[y];
053                                    else value=new SimpleDumpData("");
054                                    //comperator*=2;
055                                    if(value==null)value=new SimpleDumpData("null");
056                                    writeOut(pc,value, writer,expand,level+1);
057                                    writer.write(" ");
058                            }
059                            writer.write("\n");
060                            if(level>0)writer.write(StringUtil.repeatString("    ", level));
061                    }
062            }
063    
064            @Override
065            public String toString(PageContext pc,DumpData data, boolean expand) {
066                    StringWriter sw=new StringWriter();
067                    try {
068                            writeOut(pc,data, sw,expand);
069                    } 
070                    catch (IOException e) {
071                            return "";
072                    }
073                    return sw.toString();
074            }
075    
076    }