/* AttributesMap.java
Purpose:
Description:
History:
Tue Dec 6 22:40:23 2005, Created by tomyeh
Copyright (C) 2005 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.web.servlet.xel;
import static org.zkoss.lang.Generics.cast;
import java.util.AbstractSet;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* A skeletal implementation for Map to wrap something with enumeration of
* attributes, which must be String.
*
* <p>It is mainly used to implement sessionScope and requestScope in EL.
*
* @author tomyeh
* @since 3.0.0
*/
public abstract class AttributesMap extends StringKeysMap<Object> {
private Set<Map.Entry<String, Object>> _entries;
public Set<Map.Entry<String, Object>> entrySet() {
if (_entries == null) {
_entries = new AbstractSet<Map.Entry<String, Object>>() {
public int size() {
return AttributesMap.this.size();
}
public boolean contains(Object o) {
return AttributesMap.this.containsKey(o);
}
public boolean isEmpty() {
return AttributesMap.this.isEmpty();
}
public Iterator<Map.Entry<String, Object>> iterator() {
return cast(new EntryIter());
}
};
}
return _entries;
}
public int size() {
int sz = 0;
for (Enumeration<String> e = getKeys(); e.hasMoreElements(); ++sz)
e.nextElement();
return sz;
}
public boolean isEmpty() {
return !getKeys().hasMoreElements();
}
public Object put(String key, Object val) {
final Object o = getValue(key);
setValue(key, val);
return o;
}
public Object remove(Object key) {
if (key != null && !(key instanceof String))
return null;
final String k = (String) key;
final Object o = getValue(k);
removeValue(k);
return o;
}
}