package railo.runtime.type.scope;
import java.util.List;
import railo.runtime.PageContext;
import railo.runtime.exp.PageException;
import railo.runtime.type.Collection;
import railo.runtime.type.Query;
import railo.runtime.type.Struct;
import railo.runtime.util.QueryStack;
/**
* interface of the cope undefined
*/
public interface Undefined extends Scope {
public static final int MODE_NO_LOCAL_AND_ARGUMENTS=0;
public static final int MODE_LOCAL_OR_ARGUMENTS_ONLY_WHEN_EXISTS=1;
public static final int MODE_LOCAL_OR_ARGUMENTS_ALWAYS=2;
/**
* @return returns the current local scope defined in the undefined scope
*/
public abstract Local localScope();
public Argument argumentsScope();
public Variables variablesScope();
/**
* sets mode of scope
* @param mode new mode
* @return old mode
*/
public abstract int setMode(int mode);
public boolean getLocalAlways();
/**
* sets the functions scopes
* @param local local scope
* @param argument argument scope
*/
public abstract void setFunctionScopes(Local local, Argument argument);
/**
* @return returns actuell collection stack
*/
public abstract QueryStack getQueryStack();
/**
* sets a individual query stack to the undefined scope
* @param qryStack Query stack
*/
public abstract void setQueryStack(QueryStack qryStack);
/**
* add a collection to the undefined scope
* @param qry Query to add to undefined scope
*/
public abstract void addQuery(Query qry);
/**
* remove a collection from the undefined scope
*/
public abstract void removeQuery();
/**
* return value matching key, if value is from Query return a QueryColumn
* @param key
* @return return matched value
* @throws PageException
* @deprecated use instead <code>{@link #getCollection(railo.runtime.type.Collection.Key)}</code>
*/
public abstract Object getCollection(String key) throws PageException;
public List<String> getScopeNames();
/**
* return value matching key, if value is from Query return a QueryColumn
* @param key
* @return return matched value
* @throws PageException
*/
public abstract Object getCollection(Collection.Key key) throws PageException;
/**
* gets a key from all cascaded scopes, but not from variables scope
* @param key key to get
* @return matching value or null
* @deprecated use instead <code>{@link #getCascading(railo.runtime.type.Collection.Key)}</code>
*/
public abstract Object getCascading(String key);
/**
* gets a key from all cascaded scopes, but not from variables scope
* @param key key to get
* @return matching value or null
*/
public abstract Object getCascading(Collection.Key key);
/**
* change the variable scope
* @param scope
*/
public abstract void setVariableScope(Variables scope);
/**
* @return if check for arguments and local scope values
*/
public boolean getCheckArguments();
public Struct getScope(Collection.Key key);
public boolean setAllowImplicidQueryCall(boolean allowImplicidQueryCall);
public void reinitialize(PageContext pc) ;
}