package railo.runtime.type.trace; import railo.commons.io.res.util.ResourceUtil; import railo.runtime.PageContext; import railo.runtime.debug.Debugger; import railo.runtime.engine.ThreadLocalPageContext; import railo.runtime.type.Array; import railo.runtime.type.Query; import railo.runtime.type.Struct; import railo.runtime.type.UDFPlus; import railo.runtime.type.dt.DateTime; public class TraceObjectSupport implements TraceObject { protected Object o; protected Debugger debugger; protected int type; protected String category; protected String text; public TraceObjectSupport(Debugger debugger,Object o,int type,String category,String text) { this.o=o; //this.log=log; this.type=type; this.category=category; this.text=text; this.debugger=debugger; } @Override public String toString() { return o.toString(); } public boolean equals(Object obj) { return o.equals(obj); } protected void log() { try{log(debugger,type,category,text,null,null);}catch(Throwable t){} } protected void log(Object varName) { try{log(debugger,type,category,text,varName.toString(),null);}catch(Throwable t){} } protected void log(Object varName,Object varValue) { try{log(debugger,type,category,text,varName.toString(),varValue.toString());}catch(Throwable t){} } public synchronized static void log(Debugger debugger,int type,String category,String text,String varName,String varValue) { Throwable t=new Exception("Stack trace"); Throwable cause = t.getCause(); while(cause!=null){ t=cause; cause = t.getCause(); } StackTraceElement[] traces = t.getStackTrace(); int line=0; String template=null; StackTraceElement trace=null; for(int i=0;i<traces.length;i++) { trace=traces[i]; template=trace.getFileName(); if(trace.getLineNumber()<=0 || template==null || ResourceUtil.getExtension(template,"").equals("java") || template.endsWith("Dump.cfc") || template.endsWith("dump.cfm"))// MUST bad impl continue; line=trace.getLineNumber(); break; } //print.e(t); if(line==0) return; /*String type=traces[2].getMethodName(); int row=qry.addRow(); qry.setAtEL(LABEL, row, label); qry.setAtEL(ACTION, row, type(type)); qry.setAtEL(PARAMS, row, addional); */ String action=type(traces[2].getMethodName()); if(debugger!=null)debugger.addTrace(type, category, text, template,line,action, varName, varValue); } protected static String type(String type) { if(type.equals("appendEL")) return "append"; if(type.equals("setEL")) return "set"; if(type.equals("removeEL")) return "remove"; if(type.equals("keys")) return "list"; if(type.equals("toDumpData")) return "dump"; return type; } protected PageContext pc() { return ThreadLocalPageContext.get(); } public static TraceObject toTraceObject(Debugger debugger,Object obj, int type, String category, String text) { if(obj instanceof TraceObject) return (TraceObject) obj; else if(obj instanceof UDFPlus) return new TOUDF(debugger,(UDFPlus) obj,type,category,text); else if(obj instanceof Query) return new TOQuery(debugger,(Query) obj,type,category,text); else if(obj instanceof Array) return new TOArray(debugger,(Array) obj,type,category,text); else if(obj instanceof Struct) return new TOStruct(debugger,(Struct) obj,type,category,text); else if(obj instanceof DateTime) return new TODateTime(debugger,(DateTime) obj,type,category,text); return new TOObjects(debugger,obj,type,category,text); } }