package railo.runtime.type;
import railo.runtime.PageContext;
import railo.runtime.dump.Dumpable;
import railo.runtime.exp.PageException;
import railo.runtime.op.Castable;
/**
* Hold a native or wild object, to use id inside railo runtime
*/
public interface Objects extends Dumpable,Castable {
/**
* return property
* @param pc PageContext
* @param key Name of the Property
* @return return value of the Property
*/
public Object get(PageContext pc, Collection.Key key, Object defaultValue);
/**
* return property or getter of the ContextCollection
* @param pc PageContext
* @param key Name of the Property
* @return return value of the Property
* @throws PageException
*/
public Object get(PageContext pc, Collection.Key key) throws PageException;
/**
* sets a property (Data Member) value of the object
* @param pc
* @param propertyName property name to set
* @param value value to insert
* @return value set to property
* @throws PageException
*/
public Object set(PageContext pc, Collection.Key propertyName, Object value) throws PageException;
/**
* sets a property (Data Member) value of the object
* @param pc
* @param propertyName property name to set
* @param value value to insert
* @return value set to property
*/
public Object setEL(PageContext pc, Collection.Key propertyName, Object value);
/**
* calls a method of the object
* @param pc
* @param methodName name of the method to call
* @param arguments arguments to call method with
* @return return value of the method
* @throws PageException
*/
public Object call(PageContext pc, Collection.Key methodName, Object[] arguments) throws PageException;
/**
* call a method of the Object with named arguments
* @param pc PageContext
* @param methodName name of the method
* @param args Named Arguments for the method
* @return return result of the method
* @throws PageException
*/
public abstract Object callWithNamedValues(PageContext pc, Collection.Key methodName, Struct args) throws PageException;
}