zweb/src/main/java/org/zkoss/web/servlet/xel/AttributesMap.java

Summary

Maintainability
A
0 mins
Test Coverage
/* 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;
    }
}