package railo.runtime.type; import java.io.Serializable; import railo.runtime.dump.Dumpable; import railo.runtime.exp.PageException; import railo.runtime.op.Castable; /** * interface collection, used for all collection types of railo (array, struct, query) */ public interface Collection extends Dumpable, Iteratorable, Cloneable, Serializable, Castable,ForEachIteratorable { /** * @return the size of the collection */ public int size(); /** * @return returns a string array of all keys in the collection * @deprecated use instead <code>keyIterator()</code> */ public Collection.Key[] keys(); /** * removes value from collection and return it when it exists, otherwise throws a exception * @param key key of the collection * @return removed Object * @throws PageException */ public Object remove(Collection.Key key) throws PageException; /** * removes value from collection and return it when it exists, otherwise returns null * @param key key of the collection * @return removed Object */ public Object removeEL(Collection.Key key); /** * clears the collection */ public void clear(); /** * return a value from the collection * @param key key of the value to get * @return value on key position * @throws PageException * @deprecated use instead <code>{@link #get(railo.runtime.type.Collection.Key)}</code> */ public Object get(String key) throws PageException; /** * return a value from the collection * @param key key of the value to get must be lower case * @return value on key position * @throws PageException */ public Object get(Collection.Key key) throws PageException; /** * return a value from the collection, if key doesn't exist, dont throw a exception, reeturns null * @param key key of the value to get * @return value on key position or null * @deprecated use instead <code>{@link #get(railo.runtime.type.Collection.Key, Object)}</code> */ public Object get(String key, Object defaultValue); /** * return a value from the collection, if key doesn't exist, dont throw a exception, reeturns null * @param key key of the value to get * @return value on key position or null */ public Object get(Collection.Key key, Object defaultValue); /** * sets a value to the collection * @param key key of the new value * @param value value to set * @return value setted * @throws PageException * @deprecated use instead <code>{@link #set(railo.runtime.type.Collection.Key, Object)}</code> */ public Object set(String key, Object value) throws PageException; /** * sets a value to the collection * @param key key of the new value * @param value value to set * @return value setted * @throws PageException */ public Object set(Collection.Key key, Object value) throws PageException; /** * sets a value to the collection, if key doesn't exist, dont throw a exception, returns null * @param key key of the value to get * @param value value to set * @return value on key position or null * @deprecated use instead <code>{@link #setEL(railo.runtime.type.Collection.Key, Object)}</code> */ public Object setEL(String key, Object value); /** * sets a value to the collection, if key doesn't exist, dont throw a exception, returns null * @param key key of the value to get * @param value value to set * @return value on key position or null */ public Object setEL(Collection.Key key, Object value); /** * @return this object cloned */ public Object clone(); public Collection duplicate(boolean deepCopy); /** * contains this key * @param key * @return returns if collection has a key with given name * @deprecated use instead <code>{@link #containsKey(railo.runtime.type.Collection.Key)}</code> */ public boolean containsKey(String key); /** * contains this key * @param key * @return returns if collection has a key with given name */ public boolean containsKey(Collection.Key key); interface Key extends Serializable { /** * return key as String */ public String getString(); /** * return key as lower case String */ public String getLowerString(); /** * return key as upper case String */ public String getUpperString(); /** * return char at given position * @param index * @return character at given position */ public char charAt(int index); /** * return lower case char a given position * @param index * @return lower case char from given position */ public char lowerCharAt(int index); /** * return upper case char a given position * @param index * @return upper case char from given position */ public char upperCharAt(int index); /** * compare to object, ignore case of input * @param key * @return is equal to given key? */ public boolean equalsIgnoreCase(Collection.Key key); /** * @return return id for this key, this key is unique for the system but ignore case of input */ public int getId(); /** * Returns the length of this string. * @return length of the string */ public int length(); // Future add; returns a 64 bit based hashcode for the Key // public long hash(); } }