KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > echo2example > chatserver > UserManager


1 /*
2  * This file is part of the Echo Web Application Framework (hereinafter "Echo").
3  * Copyright (C) 2002-2005 NextApp, Inc.
4  *
5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * Alternatively, the contents of this file may be used under the terms of
18  * either the GNU General Public License Version 2 or later (the "GPL"), or
19  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20  * in which case the provisions of the GPL or the LGPL are applicable instead
21  * of those above. If you wish to allow use of your version of this file only
22  * under the terms of either the GPL or the LGPL, and not to allow others to
23  * use your version of this file under the terms of the MPL, indicate your
24  * decision by deleting the provisions above and replace them with the notice
25  * and other provisions required by the GPL or the LGPL. If you do not delete
26  * the provisions above, a recipient may use your version of this file under
27  * the terms of any one of the MPL, the GPL or the LGPL.
28  */

29
30 package echo2example.chatserver;
31
32 import java.util.HashMap JavaDoc;
33 import java.util.Iterator JavaDoc;
34 import java.util.Map JavaDoc;
35
36 /**
37  * A store of active users.
38  */

39 public class UserManager {
40     
41     /**
42      * User timeout (15min * 60sec/min * 1000ms/sec).
43      */

44     private static final int TIMEOUT_MS = 15 * 60 * 1000;
45     
46     /**
47      * User name to <code>User</code> mapping.
48      */

49     private Map JavaDoc userMap = new HashMap JavaDoc();
50     
51     /**
52      * Attempts to add a new user.
53      *
54      * @param userName the name of the user
55      * @return an authentication token, if the user name is available or
56      * null if it is not
57      */

58     public String JavaDoc add(String JavaDoc userName) {
59         // Ensure no leading/trailing spaces are present in user name.
60
if (userName.length() != userName.trim().length()) {
61             return null;
62         }
63         
64         // Ensure user name is at least two characters in length.
65
if (userName.length() < 2) {
66             return null;
67         }
68         
69         User user = null;
70         synchronized (userMap) {
71             // Ensure user name is available.
72
if (userMap.containsKey(userName)) {
73                 return null;
74             }
75             
76             user = new User(userName);
77             userMap.put(userName, user);
78         }
79         return user.getAuthToken();
80     }
81     
82     /**
83      * Authenticates a user based on user name and an authentication token.
84      *
85      * @param userName the user's name
86      * @param authToken the authentication token
87      * @return true if the user is authenticated
88      */

89     public boolean authenticate(String JavaDoc userName, String JavaDoc authToken) {
90         User user = (User) userMap.get(userName);
91         if (user == null) {
92             return false;
93         }
94         return user.authenticate(authToken);
95     }
96     
97     /**
98      * Performs clean-up operations, i.e., removing stale users.
99      */

100     public void purge() {
101         long time = System.currentTimeMillis();
102         synchronized (userMap) {
103             Iterator JavaDoc userNameIt = userMap.keySet().iterator();
104             while (userNameIt.hasNext()) {
105                 String JavaDoc userName = (String JavaDoc) userNameIt.next();
106                 User user = (User) userMap.get(userName);
107                 if (time - user.getLastActionTime() > TIMEOUT_MS) {
108                     userNameIt.remove();
109                 }
110             }
111         }
112     }
113
114     /**
115      * Removes the specified user.
116      *
117      * @param userName the user's name
118      */

119     public void remove(String JavaDoc userName) {
120         synchronized (userMap) {
121             userMap.remove(userName);
122         }
123     }
124     
125     /**
126      * @see java.lang.Object#toString()
127      */

128     public String JavaDoc toString() {
129         StringBuffer JavaDoc out = new StringBuffer JavaDoc();
130         synchronized (userMap) {
131             Iterator JavaDoc it = userMap.keySet().iterator();
132             while (it.hasNext()) {
133                 out.append(it.next());
134                 if (it.hasNext()) {
135                     out.append(", ");
136                 }
137             }
138         }
139         return out.toString();
140     }
141 }
142
Popular Tags