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 ; 9 10 11 18 class FifoCache extends AbstractPolicyCache implements ReapableCache 19 { 20 21 private static final Log LOG = new Log(FifoCache.class); 22 private final Map map; 23 private final LinkedList fifo; 24 25 FifoCache(String 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 key) 36 { 37 return (FifoNode) map.get(key); 38 } 39 40 41 public int size() 42 { 43 return map.size(); 44 } 45 46 47 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 break; 95 } 96 } 97 } 98 99 100 protected CacheNode createNode(Object userKey, Object 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); node.timeoutTime = System.currentTimeMillis() + getTimeoutMilliSeconds(); 110 111 map.put(userKey, node); 112 113 return node; 114 } 115 116 117 String dumpFifoKeys() 118 { 119 120 String dump = null; 121 StringBuffer sb = new StringBuffer (); 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 |