001    package railo.runtime.functions.dynamicEvaluation;
002    
003    import railo.runtime.PageContext;
004    import railo.runtime.exp.PageException;
005    import railo.runtime.ext.function.Function;
006    import railo.runtime.op.Caster;
007    import railo.runtime.op.Decision;
008    import railo.runtime.type.KeyImpl;
009    import railo.runtime.type.Struct;
010    import railo.runtime.type.StructImpl;
011    
012    public class Invoke implements Function {
013    
014            private static final long serialVersionUID = 3451409617437302246L;
015            private static final Struct EMPTY = new StructImpl();
016            
017            public static Object call(PageContext pc , Object obj, String name) throws PageException {
018                    return call(pc, obj, name, null);
019            }
020    
021            public static Object call(PageContext pc , Object obj, String name, Object arguments) throws PageException {
022                    if(arguments==null)arguments=EMPTY; 
023                    
024                    if(obj instanceof String) {
025                            obj=pc.loadComponent(Caster.toString(obj));
026                    }
027                    
028                    if(Decision.isStruct(arguments)) { 
029                            return pc.getVariableUtil().callFunctionWithNamedValues(pc,obj,KeyImpl.init(name),Caster.toStruct(arguments));
030                    }
031                    return pc.getVariableUtil().callFunctionWithoutNamedValues(pc,obj,KeyImpl.init(name),Caster.toNativeArray(arguments));
032                    
033            }
034                    
035    }