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 }