001 /** 002 * Implements the Cold Fusion Function writeoutput 003 */ 004 package railo.runtime.functions.other; 005 006 007 import java.io.PrintStream; 008 009 import railo.commons.lang.ExceptionUtil; 010 import railo.commons.lang.StringUtil; 011 import railo.runtime.PageContext; 012 import railo.runtime.exp.PageException; 013 import railo.runtime.ext.function.Function; 014 import railo.runtime.functions.dynamicEvaluation.Serialize; 015 import railo.runtime.op.Caster; 016 import railo.runtime.op.Decision; 017 018 public final class SystemOutput implements Function { 019 public static boolean call(PageContext pc , Object obj) throws PageException { 020 return call(pc, obj, false,false); 021 } 022 public static boolean call(PageContext pc , Object obj, boolean addNewLine) throws PageException { 023 return call(pc, obj, addNewLine, false); 024 } 025 public static boolean call(PageContext pc , Object obj, boolean addNewLine,boolean doErrorStream) throws PageException { 026 String string; 027 if(Decision.isSimpleValue(obj))string=Caster.toString(obj); 028 else string=Serialize.call(pc, obj); 029 030 031 PrintStream stream = System.out; 032 //string+=":"+Thread.currentThread().getId(); 033 if(doErrorStream) stream = System.err; 034 if(string!=null) { 035 if(StringUtil.indexOfIgnoreCase(string,"<print-stack-trace>")!=-1){ 036 String st = ExceptionUtil.getStacktrace(new Exception("Stack trace"), false); 037 string=StringUtil.replace(string, "<print-stack-trace>", "\n"+st+"\n", true).trim(); 038 } 039 if(StringUtil.indexOfIgnoreCase(string,"<hash-code>")!=-1){ 040 String st = obj.hashCode()+""; 041 string=StringUtil.replace(string, "<hash-code>", st, true).trim(); 042 } 043 } 044 if(addNewLine)stream.println(string); 045 else stream.print(string); 046 047 return true; 048 } 049 }