/**
* Implements the CFML Function dump
*/
package railo.runtime.functions.other;
import java.io.IOException;
import java.util.Set;
import railo.commons.io.IOUtil;
import railo.commons.io.res.Resource;
import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.StringUtil;
import railo.runtime.PageContext;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.dump.DumpTable;
import railo.runtime.dump.DumpUtil;
import railo.runtime.dump.DumpWriter;
import railo.runtime.dump.HTMLDumpWriter;
import railo.runtime.dump.SimpleDumpData;
import railo.runtime.exp.NativeException;
import railo.runtime.exp.PageException;
import railo.runtime.ext.function.Function;
import railo.runtime.type.util.ListUtil;
public final class Dump implements Function {
private static final int OUTPUT_TYPE_NONE = 0;
private static final int OUTPUT_TYPE_BROWSER = 1;
private static final int OUTPUT_TYPE_CONSOLE = 2;
private static final int OUTPUT_TYPE_RESOURCE = 3;
//private static final int FORMAT_TYPE_HTML = 0;
//private static final int FORMAT_TYPE_TEXT = 1;
public static String call(PageContext pc , Object object) throws PageException {
return call(pc, object,null,true,9999,null,null,null,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label) throws PageException {
return call(pc, object,label,true,9999,null,null,null,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand) throws PageException {
return call(pc, object,label,expand,9999,null,null,null,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel) throws PageException {
return call(pc, object,label,expand,maxLevel,null,null,null,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show) throws PageException {
return call(pc, object,label,expand,maxLevel,show,null,null,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show, String hide) throws PageException {
return call(pc, object,label,expand,maxLevel,show,hide,null,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show, String hide,String output) throws PageException {
return call(pc , object, label,expand,maxLevel, show, hide,output,null,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show, String hide,String output,String format) throws PageException {
return call(pc , object, label,expand,maxLevel, show, hide,output,format,9999,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show, String hide,String output,String format,double keys) throws PageException {
return call(pc , object, label,expand,maxLevel, show, hide,output,format,keys,true,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show, String hide,String output,String format,double keys,boolean metainfo) throws PageException {
return call(pc , object, label,expand,maxLevel, show, hide,output,format,keys,metainfo,true);
}
public static String call(PageContext pc , Object object, String label,boolean expand,double maxLevel, String show, String hide,String output,String format,double keys,boolean metainfo, boolean showUDFs) throws PageException {
if(show!=null && "all".equalsIgnoreCase(show.trim()))show=null;
if(hide!=null && "all".equalsIgnoreCase(hide.trim()))hide=null;
//String context = getContext();
//PageContext pcc = pc;
try {
// output
int defType=HTMLDumpWriter.DEFAULT_RICH;
int outputType=OUTPUT_TYPE_NONE;
Resource outputRes=null;
if(!StringUtil.isEmpty(output,true)){
output=output.trim();
if("browser".equalsIgnoreCase(output)){
outputType=OUTPUT_TYPE_BROWSER;
defType=HTMLDumpWriter.DEFAULT_RICH;
}
else if("console".equalsIgnoreCase(output)){
outputType=OUTPUT_TYPE_CONSOLE;
defType=HTMLDumpWriter.DEFAULT_PLAIN;
}
else {
outputType=OUTPUT_TYPE_RESOURCE;
defType=HTMLDumpWriter.DEFAULT_RICH;
outputRes=ResourceUtil.toResourceNotExisting(pc, output);
}
}
// format
DumpWriter writer=pc.getConfig().getDumpWriter(format,defType);
Set setShow=(show!=null)?ListUtil.listToSet(show.toLowerCase(),",",true):null;
Set setHide=(hide!=null)?ListUtil.listToSet(hide.toLowerCase(),",",true):null;
DumpProperties properties=new DumpProperties((int)maxLevel,setShow,setHide,(int)keys,metainfo,showUDFs);
DumpData dd = DumpUtil.toDumpData(object, pc,(int)maxLevel,properties);
if(!StringUtil.isEmpty(label)) {
DumpTable table=new DumpTable("#ffffff","#cccccc","#000000");
table.appendRow(1,new SimpleDumpData(label));
//table.appendRow(1,new SimpleDumpData(getContext()));
table.appendRow(0,dd);
dd=table;
}
boolean isText="text".equalsIgnoreCase(format);//formatType==FORMAT_TYPE_TEXT
if(OUTPUT_TYPE_BROWSER==outputType || outputType==OUTPUT_TYPE_NONE) {
if(isText) pc.forceWrite("<pre>");
pc.forceWrite(writer.toString(pc,dd,expand));
if(isText) pc.forceWrite("</pre>");
}
else if(OUTPUT_TYPE_CONSOLE==outputType)
System.out.println(writer.toString(pc,dd,expand));
else if(OUTPUT_TYPE_RESOURCE==outputType)
IOUtil.write(
outputRes,
writer.toString(pc,dd,expand)+
"\n************************************************************************************\n",
pc.getConfig().getResourceCharset(), true);
}
catch (IOException e) {
throw new NativeException(e);
}
return "";
}
public static String getContext() {
//Throwable cause = t.getCause();
StackTraceElement[] traces = new Exception("Stack trace").getStackTrace();
int line=0;
String template;
StackTraceElement trace=null;
for(int i=0;i<traces.length;i++) {
trace=traces[i];
template=trace.getFileName();
if((line=trace.getLineNumber())<=0 || template==null || ResourceUtil.getExtension(template,"").equals("java")) continue;
return template+":"+line;
}
return null;
}
}