package railo.runtime.type; import railo.runtime.Component; import railo.runtime.PageContext; import railo.runtime.PageSource; import railo.runtime.component.Member; import railo.runtime.dump.Dumpable; import railo.runtime.exp.PageException; import railo.runtime.ext.function.Function; /** * a user defined function * */ public interface UDF extends Function,Dumpable,Member,Cloneable { public static final int RETURN_FORMAT_WDDX=0; public static final int RETURN_FORMAT_JSON=1; public static final int RETURN_FORMAT_PLAIN=2; public static final int RETURN_FORMAT_SERIALIZE=3; // FUTURE change to RETURN_FORMAT_CFML public static final int RETURN_FORMAT_XML=4; /** * abstract method for the function Body * @param pageContext * @throws Throwable */ public abstract Object implementation(PageContext pageContext) throws Throwable; /** * return all function arguments of this UDF * @return the arguments. * @throws PageException */ public abstract FunctionArgument[] getFunctionArguments(); /** * @param pc * @param index * @return default value * @throws PageException */ public abstract Object getDefaultValue(PageContext pc, int index) throws PageException; // FUTURE public abstract Object getDefaultValue(PageContext pc, int index, Object defaultValue); /** * @return Returns the functionName. */ public abstract String getFunctionName(); /** * @return Returns the output. */ public abstract boolean getOutput(); /** * @return Returns the returnType. */ public int getReturnType(); public int getReturnFormat(); // FUTURE mark as deprecated // FUTURE public abstract int getReturnFormat(int defaultFormat); /** * returns null when not defined * @return value of attribute securejson */ public abstract Boolean getSecureJson(); /** * returns null when not defined * @return value of attribute verifyclient */ public abstract Boolean getVerifyClient(); /** * @return Returns the returnType. */ public abstract String getReturnTypeAsString(); public abstract String getDescription(); /** * call user defined Funcion with a hashmap of named values * @param pageContext * @param values named values * @param doIncludePath * @return return value of the function * @throws PageException */ public abstract Object callWithNamedValues(PageContext pageContext, Struct values, boolean doIncludePath) throws PageException; /** * call user defined Funcion with parameters as Object Array * @param pageContext * @param args parameters for the function * @param doIncludePath * @return return value of the function * @throws PageException */ public abstract Object call(PageContext pageContext, Object[] args,boolean doIncludePath) throws PageException; /** * @return Returns the displayName. */ public abstract String getDisplayName(); /** * @return Returns the hint. */ public abstract String getHint(); public abstract PageSource getPageSource(); public abstract Struct getMetaData(PageContext pc) throws PageException; public UDF duplicate(); /** * it is the component in whitch this udf is constructed, must not be the same as active udf * @return owner component * @deprecated */ public Component getOwnerComponent(); }