    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/security/session/Session.java $
    002    /*----------------------------------------------------------------------------
    003     This file is part of deegree, http://deegree.org/
    004     Copyright (C) 2001-2009 by:
    005       Department of Geography, University of Bonn
    006     and
    007       lat/lon GmbH
    008
    009     This library is free software; you can redistribute it and/or modify it under
    010     the terms of the GNU Lesser General Public License as published by the Free
    011     Software Foundation; either version 2.1 of the License, or (at your option)
    012     any later version.
    013     This library is distributed in the hope that it will be useful, but WITHOUT
    014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
    016     details.
    017     You should have received a copy of the GNU Lesser General Public License
    018     along with this library; if not, write to the Free Software Foundation, Inc.,
    019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    020
    021     Contact information:
    022
    023     lat/lon GmbH
    024     Aennchenstr. 19, 53177 Bonn
    025     Germany
    026     http://lat-lon.de/
    027
    028     Department of Geography, University of Bonn
    029     Prof. Dr. Klaus Greve
    030     Postfach 1147, 53001 Bonn
    031     Germany
    032     http://www.geographie.uni-bonn.de/deegree/
    033
    034     e-mail: info@deegree.org
    035    ----------------------------------------------------------------------------*/
    036    package org.deegree.security.session;
    037
    038    import java.util.Collections;
    039    import java.util.HashMap;
    040    import java.util.Map;
    041
    042    /**
    043     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
    044     * @author last edited by: $Author: mschneider $
    045     *
    046     * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
    047     */
    048
    049    public class Session {
    050
    051        private SessionID sessionID = null;
    052
    053        private String user = null;
    054
    055        private Map<Object, Object> attributes = Collections.synchronizedMap( new HashMap<Object, Object>() );
    056
    057        /**
    058         * creates a session that never expires for an anonymous user
    059         */
    060        public Session() {
    061            this.sessionID = new SessionID( -1 );
    062        }
    063
    064        /**
    065         * creates a session that never expires
    066         *
    067         * @param user
    068         *            user the session is assigned to
    069         */
    070        public Session( String user ) {
    071            this.sessionID = new SessionID( -1 );
    072            this.user = user;
    073        }
    074
    075        /**
    076         * creates a session with a specific lifetime for an anonymous user. the expiration date will be
    077         * updated each time a user accesses his session
    078         *
    079         * @param duration
    080         */
    081        public Session( int duration ) {
    082            this( null, duration );
    083        }
    084
    085        /**
    086         * creates a session with a specific lifetime. the expiration date will be updated each time a
    087         * uses accesses his session
    088         *
    089         * @param duration
    090         * @param user
    091         */
    092        public Session( String user, int duration ) {
    093            this.sessionID = new SessionID( duration );
    094            this.user = user;
    095        }
    096
    097        /**
    098         * creates a session with a specific SessionID for an anonymous user. the expiration date will
    099         * be updated each time a uses accesses his session
    100         *
    101         * @param sessionID
    102         */
    103        public Session( SessionID sessionID ) {
    104            this( null, sessionID );
    105        }
    106
    107        /**
    108         * creates a session with a specific SessionID. the expiration date will be updated each time a
    109         * uses accesses his session
    110         *
    111         * @param sessionID
    112         * @param user
    113         */
    114        public Session( String user, SessionID sessionID ) {
    115            super();
    116            this.sessionID = sessionID;
    117            this.user = user;
    118        }
    119
    120        /**
    121         * returns the name user the user who owns the session. returns null if its a session for an
    122         * anonymous user
    123         *
    124         * @return the name user the user who owns the session. returns <code>null</code> if its a
    125         *         session for an anonymous user
    126         *
    127         */
    128        public String getUser() {
    129            return user;
    130        }
    131
    132        /**
    133         * adds an attribute to the session. calling this method will reset the expiration date of the
    134         * encapsulated sessionID<br>
    135         * this method throws an exception if the sessinID has been killed or is alive anymore
    136         *
    137         * @param key
    138         * @param value
    139         * @throws SessionStatusException
    140         */
    141        public void addAttribute( Object key, Object value )
    142                                throws SessionStatusException {
    143            sessionID.reset();
    144            attributes.put( key, value );
    145        }
    146
    147        /**
    148         * returns the values of the attribute identified by the passed key. calling this method will
    149         * reset the expiration date of the encapsulated sessionID<br>
    150         * this method throws an exception if the sessinID has been killed or is alive anymore
    151         *
    152         * @param key
    153         * @return the values of the attribute identified by the passed key. calling this method will
    154         *         reset the expiration date of the encapsulated sessionID
    155         * @throws SessionStatusException
    156         */
    157        public Object getAttribute( Object key )
    158                                throws SessionStatusException {
    159            sessionID.reset();
    160            return attributes.get( key );
    161        }
    162
    163        /**
    164         * removes the attribute identified by the passed key from the session. calling this method will
    165         * reset the expiration date of the encapsulated sessionID<br>
    166         * this method throws an exception if the sessinID has been killed or is alive anymore
    167         *
    168         * @param key
    169         * @return the attribute
    170         * @throws SessionStatusException
    171         */
    172        public Object removeAttribute( Object key )
    173                                throws SessionStatusException {
    174            sessionID.reset();
    175            return attributes.remove( key );
    176        }
    177
    178        /**
    179         * returns true if the session is still alive or false if the expiration date of the sessionID
    180         * has been reached
    181         *
    182         * @return <code>true</code> if the session is still alive or <code>false</code> if the
    183         *         expiration date of the sessionID has been reached
    184         */
    185        public boolean isAlive() {
    186            return sessionID.isAlive();
    187        }
    188
    189        /**
    190         * returns the sessionID encapsulated in this session.
    191         *
    192         * @return the sessionID encapsulated in this session.
    193         *
    194         */
    195        public SessionID getSessionID() {
    196            return sessionID;
    197        }
    198
    199        /**
    200         * kills a Session by marking the encapsulated SessionID as invalid. A killed SessionID can't be
    201         * reseted
    202         */
    203        public void close() {
    204            sessionID.close();
    205        }
    206
    207        /**
    208         * resets the expiration date of the session
    209         *
    210         * @throws SessionStatusException
    211         *
    212         */
    213        public void reset()
    214                                throws SessionStatusException {
    215            sessionID.reset();
    216        }
    217    }