001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/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: aschmitz $
052: *
053: * @version $Revision: 10558 $, $Date: 2008-03-12 01:21:18 -0700 (Wed, 12 Mar 2008) $
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
063: .synchronizedMap(new HashMap<Object, Object>());
064:
065: /**
066: * creates a session that never expires for an anonymous user
067: */
068: public Session() {
069: this .sessionID = new SessionID(-1);
070: }
071:
072: /**
073: * creates a session that never expires
074: *
075: * @param user
076: * user the session is assigned to
077: */
078: public Session(String user) {
079: this .sessionID = new SessionID(-1);
080: this .user = user;
081: }
082:
083: /**
084: * creates a session with a specific lifetime for an anonymous user. the expiration date will be
085: * updated each time a user accesses his session
086: *
087: * @param duration
088: */
089: public Session(int duration) {
090: this (null, duration);
091: }
092:
093: /**
094: * creates a session with a specific lifetime. the expiration date will be updated each time a
095: * uses accesses his session
096: *
097: * @param duration
098: * @param user
099: */
100: public Session(String user, int duration) {
101: this .sessionID = new SessionID(duration);
102: this .user = user;
103: }
104:
105: /**
106: * creates a session with a specific SessionID for an anonymous user. the expiration date will
107: * be updated each time a uses accesses his session
108: *
109: * @param sessionID
110: */
111: public Session(SessionID sessionID) {
112: this (null, sessionID);
113: }
114:
115: /**
116: * creates a session with a specific SessionID. the expiration date will be updated each time a
117: * uses accesses his session
118: *
119: * @param sessionID
120: * @param user
121: */
122: public Session(String user, SessionID sessionID) {
123: super ();
124: this .sessionID = sessionID;
125: this .user = user;
126: }
127:
128: /**
129: * returns the name user the user who owns the session. returns null if its a session for an
130: * anonymous user
131: *
132: * @return the name user the user who owns the session. returns <code>null</code> if its a
133: * session for an anonymous user
134: *
135: */
136: public String getUser() {
137: return user;
138: }
139:
140: /**
141: * adds an attribute to the session. calling this method will reset the expiration date of the
142: * encapsulated sessionID<br>
143: * this method throws an exception if the sessinID has been killed or is alive anymore
144: *
145: * @param key
146: * @param value
147: * @throws SessionStatusException
148: */
149: public void addAttribute(Object key, Object value)
150: throws SessionStatusException {
151: sessionID.reset();
152: attributes.put(key, value);
153: }
154:
155: /**
156: * returns the values of the attribute identified by the passed key. calling this method will
157: * reset the expiration date of the encapsulated sessionID<br>
158: * this method throws an exception if the sessinID has been killed or is alive anymore
159: *
160: * @param key
161: * @return the values of the attribute identified by the passed key. calling this method will
162: * reset the expiration date of the encapsulated sessionID
163: * @throws SessionStatusException
164: */
165: public Object getAttribute(Object key)
166: throws SessionStatusException {
167: sessionID.reset();
168: return attributes.get(key);
169: }
170:
171: /**
172: * removes the attribute identified by the passed key from the session. calling this method will
173: * reset the expiration date of the encapsulated sessionID<br>
174: * this method throws an exception if the sessinID has been killed or is alive anymore
175: *
176: * @param key
177: * @return the attribute
178: * @throws SessionStatusException
179: */
180: public Object removeAttribute(Object key)
181: throws SessionStatusException {
182: sessionID.reset();
183: return attributes.remove(key);
184: }
185:
186: /**
187: * returns true if the session is still alive or false if the expiration date of the sessionID
188: * has been reached
189: *
190: * @return <code>true</code> if the session is still alive or <code>false</code> if the
191: * expiration date of the sessionID has been reached
192: */
193: public boolean isAlive() {
194: return sessionID.isAlive();
195: }
196:
197: /**
198: * returns the sessionID encapsulated in this session.
199: *
200: * @return the sessionID encapsulated in this session.
201: *
202: */
203: public SessionID getSessionID() {
204: return sessionID;
205: }
206:
207: /**
208: * kills a Session by marking the encapsulated SessionID as invalid. A killed SessionID can't be
209: * reseted
210: */
211: public void close() {
212: sessionID.close();
213: }
214:
215: /**
216: * resets the expiration date of the session
217: *
218: * @throws SessionStatusException
219: *
220: */
221: public void reset() throws SessionStatusException {
222: sessionID.reset();
223: }
224: }
|