KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > quikj > application > web > talk > feature > proactive > server > ProactiveUserData


1 /*
2  * ProactiveUserData.java
3  *
4  * Created on April 29, 2003, 6:26 AM
5  */

6
7 package com.quikj.application.web.talk.feature.proactive.server;
8
9 import java.util.*;
10 import com.quikj.server.web.*;
11
12 /**
13  *
14  * @author amit
15  */

16 public class ProactiveUserData
17 {
18     public static final int START = 1;
19     public static final int STOP = 2;
20     
21     private static Random random = new Random((new Date()).getTime());
22     private static ProactiveUserData instance = null;
23     private HashMap sessionMap = new HashMap();
24     private HashMap sessionChangeMap = new HashMap(); // key = group, value is another map (key = id, value = count)
25

26     /** Creates a new instance of ProactiveUserData */
27     private ProactiveUserData()
28     {
29         super();
30         instance = this;
31     }
32     
33     public static ProactiveUserData getInstance()
34     {
35         if (instance == null)
36         {
37             new ProactiveUserData();
38         }
39         
40         return instance;
41     }
42     
43     private String JavaDoc getSessionName (UnregisteredIdentifier ident)
44     {
45         return ident.getGroup() + "_" + ident.getUniqueIdentifier();
46     }
47     
48     public UnregisteredInfo createIdentifier(String JavaDoc host, String JavaDoc group)
49     {
50         while (true)
51         {
52             int rand = random.nextInt();
53             rand = (rand > 0 ? rand: 0 - rand);
54             String JavaDoc host_str = (host.length() >= 20?host.substring(0,20):host);
55             String JavaDoc r = host_str + "~" + (rand % 1000000);
56             
57             synchronized(sessionMap)
58             {
59                 UnregisteredIdentifier ident = new UnregisteredIdentifier(group, r);
60                 if (sessionMap.get(getSessionName(ident)) == null)
61                 {
62                     UnregisteredInfo info = new UnregisteredInfo();
63                     info.setIdent(ident);
64                     sessionMap.put(getSessionName(ident), info);
65                     return info;
66                 }
67             }
68         }
69     }
70     
71     public void removeSessions(Date prior_to)
72     {
73         synchronized (sessionMap)
74         {
75             Set set = sessionMap.keySet();
76             Iterator iter = set.iterator();
77             
78             while (iter.hasNext() == true)
79             {
80                 String JavaDoc session_ident = (String JavaDoc)iter.next();
81                 StringTokenizer tokens = new StringTokenizer(session_ident, "_");
82                 UnregisteredIdentifier ident = new UnregisteredIdentifier(tokens.nextToken(),
83                 tokens.nextToken());
84                 UnregisteredInfo info = (UnregisteredInfo)sessionMap.get(getSessionName(ident));
85                 
86                 if (info.getLastAccessTime().before(prior_to) == true)
87                 {
88                     iter.remove();
89                     setSessionChangeList(STOP, info.getIdent().getUniqueIdentifier(),
90                     info.getIdent().getGroup());
91                 }
92             }
93         }
94     }
95     
96     public UnregisteredInfo get(UnregisteredIdentifier key)
97     {
98         synchronized (sessionMap)
99         {
100             return (UnregisteredInfo)sessionMap.get(getSessionName(key));
101         }
102     }
103     
104     public void setNewSessionData(HTTPEndPoint endpoint, String JavaDoc document, UnregisteredInfo info)
105     {
106 // System.out.println ("Session " + info.getIdent().getUniqueIdentifier()
107
// + " started");
108

109         synchronized (sessionMap)
110         {
111             info.setEndPoint(endpoint);
112             WebInfo web = new WebInfo(document);
113             info.setLastAccessTime(web.getAccessTime());
114             info.addNewWebAccessInfo(web);
115             info.setPageCount(info.getPageCount() + 1);
116             
117             setSessionChangeList(START, info.getIdent().getUniqueIdentifier(),
118             info.getIdent().getGroup());
119         }
120     }
121     
122     public void removeEndpoint(UnregisteredInfo info)
123     {
124 // System.out.println ("Session " + info.getIdent().getUniqueIdentifier()
125
// + " stopped");
126

127         synchronized (sessionMap)
128         {
129             info.setEndPoint(null);
130             setSessionChangeList(STOP, info.getIdent().getUniqueIdentifier(),
131             info.getIdent().getGroup());
132         }
133     }
134     
135     private void setSessionChangeList(int type, String JavaDoc ident, String JavaDoc group)
136     {
137         synchronized (sessionMap)
138         {
139             HashMap map = (HashMap)sessionChangeMap.get(group);
140             if (map == null) // does not exist, create one
141
{
142                 map = new HashMap();
143                 sessionChangeMap.put(group, map);
144             }
145             
146             map.put(ident, new Integer JavaDoc(type));
147         }
148     }
149     
150     public HashMap listChanges (String JavaDoc group)
151     {
152         synchronized (sessionMap)
153         {
154             HashMap map = (HashMap)sessionChangeMap.get(group);
155             if (map == null) // does not exist, create one
156
{
157                 map = new HashMap();
158             }
159             
160             // reset the map
161
HashMap new_map = new HashMap();
162             sessionChangeMap.put (group, new_map);
163                         
164             return map;
165         }
166     }
167     
168     public ArrayList listSessions(String JavaDoc group)
169     {
170         ArrayList list = new ArrayList();
171         synchronized (sessionMap)
172         {
173             Set set = sessionMap.keySet();
174             Iterator iter = set.iterator();
175             
176             while (iter.hasNext() == true)
177             {
178                 String JavaDoc session_ident = (String JavaDoc)iter.next();
179                 StringTokenizer tokens = new StringTokenizer(session_ident, "_");
180                 UnregisteredIdentifier ident = new UnregisteredIdentifier(tokens.nextToken(),
181                 tokens.nextToken());
182                 if (ident.getGroup().equals(group) == true)
183                 {
184                     list.add(sessionMap.get(getSessionName(ident)));
185                 }
186             }
187         }
188         
189         return list;
190     }
191     
192     public boolean lockSession(String JavaDoc group, String JavaDoc ident)
193     {
194         synchronized (sessionMap)
195         {
196             UnregisteredIdentifier id = new UnregisteredIdentifier(group, ident);
197             UnregisteredInfo info = (UnregisteredInfo)sessionMap.get(getSessionName(id));
198             if (info == null)
199             {
200                 return false;
201             }
202             
203             if (info.isHelped() == true)
204             {
205                 return false;
206             }
207             
208             info.setHelped(true);
209             return true;
210         }
211     }
212 }
213
Popular Tags