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    }