001 package railo.intergral.fusiondebug.server.type.coll; 002 003 import java.util.ArrayList; 004 import java.util.List; 005 006 import railo.commons.lang.StringUtil; 007 import railo.intergral.fusiondebug.server.type.FDValueNotMutability; 008 import railo.intergral.fusiondebug.server.type.simple.FDSimpleVariable; 009 import railo.runtime.op.Caster; 010 import railo.runtime.type.FunctionArgument; 011 import railo.runtime.type.UDF; 012 import railo.runtime.type.UDFImpl; 013 014 import com.intergral.fusiondebug.server.IFDStackFrame; 015 016 public class FDUDF extends FDValueNotMutability { 017 018 private ArrayList children=new ArrayList(); 019 private String name; 020 private UDF udf; 021 022 /** 023 * Constructor of the class 024 * @param name 025 * @param coll 026 */ 027 public FDUDF(IFDStackFrame frame, String name, UDF udf) { 028 this.name=name; 029 this.udf=udf; 030 031 // meta 032 List<FDSimpleVariable> list=new ArrayList<FDSimpleVariable>(); 033 children.add(new FDSimpleVariable(frame,"Meta Data","",list)); 034 list.add(new FDSimpleVariable(frame,"Function Name",udf.getFunctionName(),null)); 035 if(!StringUtil.isEmpty(udf.getDisplayName())) 036 list.add(new FDSimpleVariable(frame,"Display Name",udf.getDisplayName(),null)); 037 if(!StringUtil.isEmpty(udf.getDescription())) 038 list.add(new FDSimpleVariable(frame,"Description",udf.getDescription(),null)); 039 if(!StringUtil.isEmpty(udf.getHint())) 040 list.add(new FDSimpleVariable(frame,"Hint",udf.getHint(),null)); 041 list.add(new FDSimpleVariable(frame,"Return Type",udf.getReturnTypeAsString(),null)); 042 list.add(new FDSimpleVariable(frame,"Return Format",UDFImpl.toReturnFormat(udf.getReturnFormat(),"plain"),null)); 043 list.add(new FDSimpleVariable(frame,"Source",Caster.toString(((UDFImpl)udf).getPageSource().getDisplayPath()),null)); 044 list.add(new FDSimpleVariable(frame,"Secure Json",Caster.toString(udf.getSecureJson(),""),null)); 045 list.add(new FDSimpleVariable(frame,"Verify Client",Caster.toString(udf.getVerifyClient(),""),null)); 046 047 // arguments 048 list=new ArrayList(); 049 List el; 050 children.add(new FDSimpleVariable(frame,"Arguments","",list)); 051 FunctionArgument[] args = udf.getFunctionArguments(); 052 for(int i=0;i<args.length;i++){ 053 el=new ArrayList(); 054 list.add(new FDSimpleVariable(frame,"["+(i+1)+"]","",el)); 055 el.add(new FDSimpleVariable(frame,"Name",args[i].getName().getString(),null)); 056 el.add(new FDSimpleVariable(frame,"Type",args[i].getTypeAsString(),null)); 057 el.add(new FDSimpleVariable(frame,"Required",Caster.toString(args[i].isRequired()),null)); 058 059 if(!StringUtil.isEmpty(args[i].getDisplayName())) 060 el.add(new FDSimpleVariable(frame,"Display Name",args[i].getDisplayName(),null)); 061 if(!StringUtil.isEmpty(args[i].getHint())) 062 el.add(new FDSimpleVariable(frame,"Hint",args[i].getHint(),null)); 063 } 064 065 // return 066 children.add(new FDSimpleVariable(frame,"return",udf.getReturnTypeAsString(),null)); 067 } 068 069 /** 070 * @see com.intergral.fusiondebug.server.IFDVariable#getChildren() 071 */ 072 public List getChildren() { 073 return children; 074 } 075 076 /** 077 * @see com.intergral.fusiondebug.server.IFDVariable#getName() 078 */ 079 public String getName() { 080 return name; 081 } 082 083 /** 084 * @see com.intergral.fusiondebug.server.IFDVariable#hasChildren() 085 */ 086 public boolean hasChildren() { 087 return true; 088 } 089 090 /** 091 * @see java.lang.Object#toString() 092 */ 093 public String toString() { 094 return toString(udf); 095 } 096 public static String toString(UDF udf) { 097 FunctionArgument[] args = udf.getFunctionArguments(); 098 StringBuffer sb=new StringBuffer("function "); 099 sb.append(udf.getFunctionName()); 100 sb.append("("); 101 for(int i=0;i<args.length;i++){ 102 if(i>0)sb.append(", "); 103 sb.append(args[i].getTypeAsString()); 104 sb.append(" "); 105 sb.append(args[i].getName()); 106 } 107 sb.append("):"); 108 sb.append(udf.getReturnTypeAsString()); 109 110 return sb.toString(); 111 } 112 }