File Source: trackbacktokenmanager.java
/*
P/P * Method: void net.sourceforge.pebble.trackback.TrackBackTokenManager$1(TrackBackTokenManager)
*/
1 package net.sourceforge.pebble.trackback;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5
6 import java.util.*;
7
8 /**
9 * Manages tokens for generating TrackBack links.
10 *
11 * @author Simon Brown
12 */
13 public class TrackBackTokenManager {
14
/*
P/P * Method: Log access$0()
*
* Postconditions:
* init'ed(return_value)
*/
15 private static final Log log = LogFactory.getLog(TrackBackTokenManager.class);
16
17 private static final TrackBackTokenManager instance = new TrackBackTokenManager();
18
19 /** the time to live for new tokens */
20 private static final long TIME_TO_LIVE = 1000 * 60 * 10; // 10 minutes
21
22 private Random random = new Random();
23
24 /** the map of tokens */
/*
P/P * Method: Map access$1(TrackBackTokenManager)
*
* Preconditions:
* Param_0 != null
* init'ed(Param_0.tokens)
*
* Postconditions:
* return_value == Param_0.tokens
* init'ed(return_value)
*/
25 private Map<String,Date> tokens = new HashMap<String,Date>();
26
27 /**
28 * Private constructor for the singleton pattern.
29 */
/*
P/P * Method: void net.sourceforge.pebble.trackback.TrackBackTokenManager()
*
* Postconditions:
* this.random == &new Random(TrackBackTokenManager#1)
* this.tokens == &new HashMap(TrackBackTokenManager#2)
* new HashMap(TrackBackTokenManager#2) num objects == 1
* new Random(TrackBackTokenManager#1) num objects == 1
*/
30 private TrackBackTokenManager() {
31 // create a new TimerTask that will purge invalid tokens
32 TimerTask task = new TimerTask() {
33 public void run() {
/*
P/P * Method: void run()
*
* Preconditions:
* this.tokens != null
*
* Presumptions:
* java.util.Map:keySet(...)@36 != null
* org.apache.commons.logging.LogFactory:getLog(...)@15 != null
*
* Test Vectors:
* java.util.Iterator:hasNext(...)@37: {1}, {0}
*/
34 synchronized (TrackBackTokenManager.this) {
35 log.debug("Purging expired tokens");
36 Iterator it = tokens.keySet().iterator();
37 while (it.hasNext()) {
38 String token = (String)it.next();
39 if (!isValid(token)) {
40 it.remove();
41 }
42 }
43 }
44 }
45 };
46
47 Timer timer = new Timer();
48 timer.schedule(task, 2 * TIME_TO_LIVE);
49 }
50
51 /**
52 * Gets the singleton instance of this class.
53 *
54 * @return a TrackBackTokenManager instance
55 */
56 public static TrackBackTokenManager getInstance() {
/*
P/P * Method: TrackBackTokenManager getInstance()
*
* Postconditions:
* return_value == &new TrackBackTokenManager(TrackBackTokenManager__static_init#1)
*/
57 return instance;
58 }
59
60 /**
61 * Generates a new token with a fixed time to live.
62 *
63 * @return a new token
64 */
65 public synchronized String generateToken() {
/*
P/P * Method: String generateToken()
*
* Preconditions:
* this.random != null
* this.tokens != null
*
* Postconditions:
* return_value != null
*/
66 String token = "" + random.nextLong();
67 tokens.put(token, new Date());
68 return token;
69 }
70
71 /**
72 * Determines whether a given token is valid.
73 *
74 * @param token the token to test
75 * @return true if the token is valid and hasn't expired, false otherwise
76 */
77 public synchronized boolean isValid(String token) {
/*
P/P * Method: bool isValid(String)
*
* Preconditions:
* (soft) this.tokens != null
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* token: Addr_Set{null}, Inverse{null}
* java.lang.String:length(...)@78: {1..232-1}, {0}
* java.util.Map:get(...)@81: Addr_Set{null}, Inverse{null}
*/
78 if (token == null || token.length() == 0) {
79 return false;
80 } else {
81 Date date = tokens.get(token);
82 return (date != null) && (new Date().getTime() - date.getTime() <= TIME_TO_LIVE);
83 }
84 }
85
86 /**
87 * Expires a given token.
88 *
89 * @param token the token to be expired
90 */
91 public synchronized void expire(String token) {
/*
P/P * Method: void expire(String)
*
* Preconditions:
* this.tokens != null
*/
92 tokens.remove(token);
93 }
94
95 }
SofCheck Inspector Build Version : 2.22510
| trackbacktokenmanager.java |
2010-Jun-25 19:40:32 |
| trackbacktokenmanager.class |
2010-Jul-19 20:23:38 |
| trackbacktokenmanager$1.class |
2010-Jul-19 20:23:38 |