FileDocCategorySizeDatePackage
SessionMap.javaAPI DocExample6685Mon Jul 23 13:26:38 BST 2007org.apache.struts2.dispatcher

SessionMap

public class SessionMap extends AbstractMap implements Serializable
A simple implementation of the {@link java.util.Map} interface to handle a collection of HTTP session attributes. The {@link #entrySet()} method enumerates over all session attributes and creates a Set of entries. Note, this will occur lazily - only when the entry set is asked for.

Fields Summary
private static final long
serialVersionUID
protected HttpSession
session
protected Set
entries
protected HttpServletRequest
request
Constructors Summary
public SessionMap(HttpServletRequest request)
Creates a new session map given a http servlet request. Note, ths enumeration of request attributes will occur when the map entries are asked for.

param
request the http servlet request object.



                                         
       
        // note, holding on to this request and relying on lazy session initalization will not work
        // if you are running your action invocation in a background task, such as using the
        // "exec-and-wait" interceptor
        this.request = request;
        this.session = request.getSession(false);
    
Methods Summary
public voidclear()
Removes all attributes from the session as well as clears entries in this map.

        if (session == null ) {
            return;
        }

        synchronized (session) {
            entries = null;
            Enumeration<String> attributeNamesEnum = session.getAttributeNames();
            while(attributeNamesEnum.hasMoreElements()) {
                session.removeAttribute(attributeNamesEnum.nextElement());
            }
        }

    
public java.util.SetentrySet()
Returns a Set of attributes from the http session.

return
a Set of attributes from the http session.

        if (session == null) {
            return Collections.EMPTY_SET;
        }

        synchronized (session) {
            if (entries == null) {
                entries = new HashSet<Object>();

                Enumeration enumeration = session.getAttributeNames();

                while (enumeration.hasMoreElements()) {
                    final String key = enumeration.nextElement().toString();
                    final Object value = session.getAttribute(key);
                    entries.add(new Map.Entry() {
                        public boolean equals(Object obj) {
                            Map.Entry entry = (Map.Entry) obj;

                            return ((key == null) ? (entry.getKey() == null) : key.equals(entry.getKey())) && ((value == null) ? (entry.getValue() == null) : value.equals(entry.getValue()));
                        }

                        public int hashCode() {
                            return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode());
                        }

                        public Object getKey() {
                            return key;
                        }

                        public Object getValue() {
                            return value;
                        }

                        public Object setValue(Object obj) {
                            session.setAttribute(key.toString(), obj);

                            return value;
                        }
                    });
                }
            }
        }

        return entries;
    
public java.lang.Objectget(java.lang.Object key)
Returns the session attribute associated with the given key or null if it doesn't exist.

param
key the name of the session attribute.
return
the session attribute or null if it doesn't exist.

        if (session == null) {
            return null;
        }

        synchronized (session) {
            return session.getAttribute(key.toString());
        }
    
public voidinvalidate()
Invalidate the http session.

        if (session == null) {
            return;
        }

        synchronized (session) {
            session.invalidate();
            session = null;
            entries = null;
        }
    
public java.lang.Objectput(java.lang.Object key, java.lang.Object value)
Saves an attribute in the session.

param
key the name of the session attribute.
param
value the value to set.
return
the object that was just set.

        synchronized (this) {
            if (session == null) {
                session = request.getSession(true);
            }
        }

        synchronized (session) {
            entries = null;
            session.setAttribute(key.toString(), value);

            return get(key);
        }
    
public java.lang.Objectremove(java.lang.Object key)
Removes the specified session attribute.

param
key the name of the attribute to remove.
return
the value that was removed or null if the value was not found (and hence, not removed).

        if (session == null) {
            return null;
        }

        synchronized (session) {
            entries = null;

            Object value = get(key);
            session.removeAttribute(key.toString());

            return value;
        }