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 }