KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > shiftone > cache > policy > lru > LruCache


1 package org.shiftone.cache.policy.lru;
2
3
4
5 import org.shiftone.cache.util.*;
6 import org.shiftone.cache.util.reaper.ReapableCache;
7
8 import java.util.Map JavaDoc;
9
10
11 /**
12  * Class LruCache
13  *
14  *
15  * @author <a HREF="mailto:jeff@shiftone.org">Jeff Drost</a>
16  * @version $Revision: 1.7 $
17  */

18 class LruCache extends AbstractPolicyCache implements ReapableCache
19 {
20
21     private static final Log LOG = new Log(LruCache.class);
22     private final Map JavaDoc map;
23     private final LinkedList fifo;
24     private final LinkedList lru;
25
26     LruCache(String JavaDoc name, long timeoutMilliSeconds, int maxSize)
27     {
28
29         super(name, timeoutMilliSeconds, maxSize);
30
31         map = MapFactory.createMap(maxSize);
32         fifo = new LinkedList();
33         lru = new LinkedList();
34     }
35
36
37     protected CacheNode findNodeByKey(Object JavaDoc key)
38     {
39         return (LruNode) map.get(key);
40     }
41
42
43     public int size()
44     {
45         return map.size();
46     }
47
48
49     protected void revalueNode(CacheNode node)
50     {
51
52         LruNode n = (LruNode) node;
53
54         lru.moveToFirst(n.lruNode);
55     }
56
57
58     protected void delete(CacheNode node)
59     {
60
61         LruNode n = (LruNode) node;
62
63         fifo.remove(n.fifoNode);
64         lru.remove(n.lruNode);
65         map.remove(n.key);
66     }
67
68
69     protected void removeLeastValuableNode()
70     {
71
72         LinkedListNode lln = null;
73         LruNode node = null;
74
75         lln = lru.peekLast();
76         node = (LruNode) lln.getValue();
77
78         delete(node);
79     }
80
81
82     public void removeExpiredElements()
83     {
84
85         LinkedListNode lln = null;
86         LruNode node = null;
87
88         while ((lln = fifo.peekLast()) != null)
89         {
90             node = (LruNode) lln.getValue();
91
92             if (node.isExpired())
93             {
94                 delete(node);
95             }
96             else
97             {
98
99                 // not expired.. can stop now
100
break;
101             }
102         }
103     }
104
105
106     protected CacheNode createNode(Object JavaDoc userKey, Object JavaDoc cacheObject)
107     {
108
109         LruNode node = new LruNode();
110
111         node.key = userKey;
112         node.value = cacheObject;
113         node.fifoNode = fifo.addFirst(node);
114         node.lruNode = lru.addFirst(node);
115         node.timeoutTime = System.currentTimeMillis() + getTimeoutMilliSeconds();
116
117         map.put(userKey, node);
118
119         return node;
120     }
121
122
123     String JavaDoc dumpLruKeys()
124     {
125
126         String JavaDoc dump = null;
127         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
128         LinkedListNode node = lru.peekFirst();
129         LruNode current = null;
130
131         while (node != null)
132         {
133             current = (LruNode) node.getValue();
134
135             sb.append(current.key);
136
137             node = node.getNext();
138         }
139
140         dump = sb.toString();
141
142         LOG.debug("dumpLruKeys : " + dump);
143
144         return dump;
145     }
146
147
148     String JavaDoc dumpFifoKeys()
149     {
150
151         String JavaDoc dump = null;
152         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
153         LinkedListNode node = fifo.peekFirst();
154         LruNode current = null;
155
156         while (node != null)
157         {
158             current = (LruNode) node.getValue();
159
160             sb.append(current.key);
161
162             node = node.getNext();
163         }
164
165         dump = sb.toString();
166
167         LOG.debug("dumpFifoKeys : " + dump);
168
169         return dump;
170     }
171 }
172
Popular Tags