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