KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > shiftone > cache > policy > fifo > FifoCache


1 package org.shiftone.cache.policy.fifo;
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 FifoCache
13  *
14  *
15  * @author <a HREF="mailto:jeff@shiftone.org">Jeff Drost</a>
16  * @version $Revision: 1.7 $
17  */

18 class FifoCache extends AbstractPolicyCache implements ReapableCache
19 {
20
21     private static final Log LOG = new Log(FifoCache.class);
22     private final Map JavaDoc map;
23     private final LinkedList fifo;
24
25     FifoCache(String JavaDoc name, long timeoutMilliSeconds, int maxSize)
26     {
27
28         super(name, timeoutMilliSeconds, maxSize);
29
30         this.map = MapFactory.createMap(maxSize);
31         this.fifo = new LinkedList();
32     }
33
34
35     protected CacheNode findNodeByKey(Object JavaDoc key)
36     {
37         return (FifoNode) map.get(key);
38     }
39
40
41     public int size()
42     {
43         return map.size();
44     }
45
46
47     /**
48      * <b>DO NOTHING</b>
49      */

50     protected final void revalueNode(CacheNode cacheNode) {}
51
52
53     protected void delete(CacheNode node)
54     {
55
56         FifoNode n = (FifoNode) node;
57
58         fifo.remove(n.fifoNode);
59         map.remove(n.key);
60     }
61
62
63     protected void removeLeastValuableNode()
64     {
65
66         LinkedListNode lln = null;
67         FifoNode node = null;
68
69         lln = fifo.peekLast();
70         node = (FifoNode) lln.getValue();
71
72         delete(node);
73     }
74
75
76     public void removeExpiredElements()
77     {
78
79         LinkedListNode lln = null;
80         CacheNode node;
81
82         while ((lln = fifo.peekLast()) != null)
83         {
84             node = (CacheNode) lln.getValue();
85
86             if (node.isExpired())
87             {
88                 delete(node);
89             }
90             else
91             {
92
93                 // not expired.. can stop now
94
break;
95             }
96         }
97     }
98
99
100     protected CacheNode createNode(Object JavaDoc userKey, Object JavaDoc cacheObject)
101     {
102
103         FifoNode node = null;
104
105         node = new FifoNode();
106         node.key = userKey;
107         node.value = cacheObject;
108         node.fifoNode = fifo.addFirst(node); // expensive
109
node.timeoutTime = System.currentTimeMillis() + getTimeoutMilliSeconds();
110
111         map.put(userKey, node);
112
113         return node;
114     }
115
116
117     String JavaDoc dumpFifoKeys()
118     {
119
120         String JavaDoc dump = null;
121         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
122         LinkedListNode node = fifo.peekFirst();
123         FifoNode current = null;
124
125         while (node != null)
126         {
127             current = (FifoNode) node.getValue();
128
129             sb.append(current.key);
130
131             node = node.getNext();
132         }
133
134         dump = sb.toString();
135
136         return dump;
137     }
138 }
139
Popular Tags