package railo.runtime.util;
import railo.runtime.PageContext;
import railo.runtime.exp.PageException;
import railo.runtime.type.Collection;
import railo.runtime.type.Struct;
/**
* Variable Util
*/
public interface VariableUtil {
/**
* return a property from the given Object, when property doesn't exists return null
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @return value or null
*/
public abstract Object getCollection(PageContext pc, Object coll,
String key, Object defaultValue);
/**
* return a property from the given Object, when property doesn't exists return null
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @return value or null
* @deprecated use instead <code>get(PageContext pc, Object coll, Collection.Key key, Object defaultValue);</code>
*/
public abstract Object get(PageContext pc, Object coll, String key, Object defaultValue);
/**
* return a property from the given Object, when property doesn't exists return null
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @return value or null
*/
public abstract Object get(PageContext pc, Object coll, Collection.Key key, Object defaultValue);
/**
* return a property from the given Object, when property doesn't exists return null
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @return value or null
*/
public abstract Object getLight(PageContext pc, Object coll, String key, Object defaultValue);
/**
* return a property from the given Object, when coll is a query return a Column,when property doesn't exists throw exception
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @return value value to get
* @throws PageException
*/
public abstract Object getCollection(PageContext pc, Object coll, String key)
throws PageException;
/**
* return a property from the given Object, when property doesn't exists throw exception
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @return value value to get
* @throws PageException
*/
public abstract Object get(PageContext pc, Object coll, String key)
throws PageException;
/**
* sets a value to the Object
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @param value Value to set
* @return value setted
* @throws PageException
*/
public abstract Object set(PageContext pc, Object coll, String key,
Object value) throws PageException;
// FUTURE add and set above to depr public Object set(PageContext pc, Object coll, Collection.Key key,Object value) throws PageException {
/**
* sets a value to the Object
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @param value Value to set
* @return value setted or null if can't set
* @deprecated use instead <code>setEL(PageContext pc, Object coll, Collection.Key key,Object value);</code>
*/
public abstract Object setEL(PageContext pc, Object coll, String key,Object value);
/**
* sets a value to the Object
* @param pc
* @param coll Collection to check
* @param key to get from Collection
* @param value Value to set
* @return value setted or null if can't set
*/
public abstract Object setEL(PageContext pc, Object coll, Collection.Key key,Object value);
/**
* remove value from Collection
* @param coll
* @param key
* @return has cleared or not
*/
public abstract Object removeEL(Object coll, String key);
/**
* clear value from Collection
* @param coll
* @param key
* @return has cleared or not
* @throws PageException
*/
public abstract Object remove(Object coll, String key) throws PageException;
/**
* call a Function (UDF, Method) with or witout named values
* @param pc
* @param coll Collection of the UDF Function
* @param key name of the function
* @param args arguments to call the function
* @return return value of the function
* @throws PageException
*/
public abstract Object callFunction(PageContext pc, Object coll,
String key, Object[] args) throws PageException;
/**
* call a Function (UDF, Method) without Named Values
* @param pc
* @param coll Collection of the UDF Function
* @param key name of the function
* @param args arguments to call the function
* @return return value of the function
* @throws PageException
* @deprecated use instead <code>callFunctionWithoutNamedValues(PageContext pc, Object coll, Collection.Key key, Object[] args)</code>
*/
public abstract Object callFunctionWithoutNamedValues(PageContext pc,
Object coll, String key, Object[] args) throws PageException;
/**
* call a Function (UDF, Method) without Named Values
* @param pc
* @param coll Collection of the UDF Function
* @param key name of the function
* @param args arguments to call the function
* @return return value of the function
* @throws PageException
*/
public Object callFunctionWithoutNamedValues(PageContext pc,
Object coll, Collection.Key key, Object[] args) throws PageException;
/**
* call a Function (UDF, Method) with Named Values
* @param pc
* @param coll Collection of the UDF Function
* @param key name of the function
* @param args arguments to call the function
* @return return value of the function
* @throws PageException
* @deprecated use instead <code>callFunctionWithNamedValues(PageContext pc, Object coll, Collection.Key key, Object[] args)</code>
*/
public abstract Object callFunctionWithNamedValues(PageContext pc,
Object coll, String key, Object[] args) throws PageException;
/**
* call a Function (UDF, Method) with Named Values
* @param pc
* @param coll Collection of the UDF Function
* @param key name of the function
* @param args arguments to call the function
* @return return value of the function
* @throws PageException
*/
public Object callFunctionWithNamedValues(PageContext pc,
Object coll, Collection.Key key, Object[] args) throws PageException;
public Object callFunctionWithNamedValues(PageContext pc,
Object coll, Collection.Key key, Struct args) throws PageException;
}