package railo.intergral.fusiondebug.server.type.coll;
import java.util.ArrayList;
import java.util.List;
import railo.commons.lang.StringUtil;
import railo.intergral.fusiondebug.server.type.FDValueNotMutability;
import railo.intergral.fusiondebug.server.type.simple.FDSimpleVariable;
import railo.runtime.op.Caster;
import railo.runtime.type.FunctionArgument;
import railo.runtime.type.UDF;
import railo.runtime.type.util.UDFUtil;
import com.intergral.fusiondebug.server.IFDStackFrame;
public class FDUDF extends FDValueNotMutability {
private ArrayList children=new ArrayList();
private String name;
private UDF udf;
/**
* Constructor of the class
* @param name
* @param coll
*/
public FDUDF(IFDStackFrame frame, String name, UDF udf) {
this.name=name;
this.udf=udf;
// meta
List<FDSimpleVariable> list=new ArrayList<FDSimpleVariable>();
children.add(new FDSimpleVariable(frame,"Meta Data","",list));
list.add(new FDSimpleVariable(frame,"Function Name",udf.getFunctionName(),null));
if(!StringUtil.isEmpty(udf.getDisplayName()))
list.add(new FDSimpleVariable(frame,"Display Name",udf.getDisplayName(),null));
if(!StringUtil.isEmpty(udf.getDescription()))
list.add(new FDSimpleVariable(frame,"Description",udf.getDescription(),null));
if(!StringUtil.isEmpty(udf.getHint()))
list.add(new FDSimpleVariable(frame,"Hint",udf.getHint(),null));
list.add(new FDSimpleVariable(frame,"Return Type",udf.getReturnTypeAsString(),null));
list.add(new FDSimpleVariable(frame,"Return Format",UDFUtil.toReturnFormat(udf.getReturnFormat(),"plain"),null));
list.add(new FDSimpleVariable(frame,"Source",Caster.toString(udf.getPageSource().getDisplayPath()),null));
list.add(new FDSimpleVariable(frame,"Secure Json",Caster.toString(udf.getSecureJson(),""),null));
list.add(new FDSimpleVariable(frame,"Verify Client",Caster.toString(udf.getVerifyClient(),""),null));
// arguments
list=new ArrayList();
List el;
children.add(new FDSimpleVariable(frame,"Arguments","",list));
FunctionArgument[] args = udf.getFunctionArguments();
for(int i=0;i<args.length;i++){
el=new ArrayList();
list.add(new FDSimpleVariable(frame,"["+(i+1)+"]","",el));
el.add(new FDSimpleVariable(frame,"Name",args[i].getName().getString(),null));
el.add(new FDSimpleVariable(frame,"Type",args[i].getTypeAsString(),null));
el.add(new FDSimpleVariable(frame,"Required",Caster.toString(args[i].isRequired()),null));
if(!StringUtil.isEmpty(args[i].getDisplayName()))
el.add(new FDSimpleVariable(frame,"Display Name",args[i].getDisplayName(),null));
if(!StringUtil.isEmpty(args[i].getHint()))
el.add(new FDSimpleVariable(frame,"Hint",args[i].getHint(),null));
}
// return
children.add(new FDSimpleVariable(frame,"return",udf.getReturnTypeAsString(),null));
}
@Override
public List getChildren() {
return children;
}
public String getName() {
return name;
}
@Override
public boolean hasChildren() {
return true;
}
@Override
public String toString() {
return toString(udf);
}
public static String toString(UDF udf) {
FunctionArgument[] args = udf.getFunctionArguments();
StringBuffer sb=new StringBuffer("function ");
sb.append(udf.getFunctionName());
sb.append("(");
for(int i=0;i<args.length;i++){
if(i>0)sb.append(", ");
sb.append(args[i].getTypeAsString());
sb.append(" ");
sb.append(args[i].getName());
}
sb.append("):");
sb.append(udf.getReturnTypeAsString());
return sb.toString();
}
}