1 50 51 package org.openlaszlo.iv.flash.cache; 52 53 import org.openlaszlo.iv.flash.api.*; 54 import org.openlaszlo.iv.flash.util.*; 55 56 import java.util.*; 57 58 public abstract class GenericCache { 59 60 protected Hashtable cache = new Hashtable(); 61 protected int cacheSize = 0; 62 protected CacheSettings settings = new CacheSettings(); 63 64 public CacheSettings getMySettings() { 65 return settings; 66 } 67 68 public int getSize() { 69 return cacheSize; 70 } 71 72 public synchronized void clear() { 73 cache.clear(); 74 cacheSize = 0; 75 } 76 77 protected synchronized boolean addItem( CacheItem item ) { 78 if( !checkCacheSize( item.getSize() ) ) { 80 return false; 82 } 83 cache.put( item.getKey(), item ); 84 cacheSize += item.getSize(); 85 return true; 87 } 88 89 protected synchronized CacheItem getItem( Object key ) { 90 CacheItem item = (CacheItem) cache.get( key ); 91 if( item == null ) return null; 92 if( !isModified( item ) && 93 System.currentTimeMillis() <= item.getExpireAfter() 94 ) return item; 95 96 removeItem( item ); 98 return null; 99 } 100 101 protected boolean isModified( CacheItem item ) { 102 return false; 103 } 104 105 108 protected boolean checkCacheSize( int size ) { 109 if( cacheSize + size <= settings.getMaxSize() ) return true; 110 if( !settings.isRecycle() ) return false; 111 recycle( size ); 112 return cacheSize + size <= settings.getMaxSize(); 113 } 114 115 118 protected synchronized void recycle( int size ) { 119 if( cache.size() == 0 ) return; 120 122 ArrayList l = new ArrayList( cache.values() ); 124 Collections.sort( l, new Comparator() { 125 public int compare( Object o1, Object o2 ) { 126 return (int) (((CacheItem)o1).getCacheTime() - ((CacheItem)o2).getCacheTime()); 127 } 128 } 129 ); 130 131 long now = System.currentTimeMillis(); 133 for( int i=0; i<l.size(); i++ ) { 134 CacheItem item = (CacheItem) l.get(i); 135 if( size > 0 || now > item.getExpireAfter() ) { 136 size -= item.getSize(); 137 removeItem( item ); 138 } 139 } 140 } 142 143 protected synchronized void removeItem( CacheItem item ) { 144 cacheSize -= item.getSize(); 145 cache.remove( item.getKey() ); 146 } 147 148 } 149 | Popular Tags |