1 10 package org.mmbase.module.gui.html; 11 12 import org.mmbase.module.core.*; 13 import org.mmbase.util.*; 14 import java.util.*; 15 16 17 26 public class MultilevelCacheHandler extends LRUHashtable { 27 28 private Hashtable listeners = new Hashtable(); 29 private MMBase mmb; 30 31 public MultilevelCacheHandler(MMBase mmb,int size) { 32 super(size); 33 this.mmb=mmb; 34 35 } 36 37 public Object put(Object hash,Object o,Vector types,StringTagger tagger) { 38 MultilevelCacheEntry n=new MultilevelCacheEntry(this,hash,o,tagger); 39 addListeners(types,n); 40 return(put(hash,n)); 41 } 42 43 44 public synchronized Object get(Object key) { 45 MultilevelCacheEntry n=(MultilevelCacheEntry)super.get(key); 48 if (n==null) { 49 return(null); 50 } else { 51 return(n.getObject()); 52 } 53 } 54 55 private void addListeners(Vector types,MultilevelCacheEntry n) { 56 Enumeration e=types.elements(); 57 while (e.hasMoreElements()) { 58 String type=(String )e.nextElement(); 59 char lastchar=type.charAt(type.length()-1); 60 if (lastchar>='1' && lastchar<='9') { 61 type=type.substring(0,type.length()-1); 62 } 63 MultilevelSubscribeNode l=(MultilevelSubscribeNode)listeners.get(type); 64 if (l==null) { 65 l=new MultilevelSubscribeNode(mmb,type); 66 listeners.put(type,l); 67 } 68 l.addCacheEntry(n); 69 } 70 } 71 72 73 public synchronized Object remove(Object key) { 77 MultilevelCacheEntry n=(MultilevelCacheEntry)super.get(key); 78 n.clear(); 79 return(n); 80 } 81 82 public synchronized void callbackRemove(Object key) { 84 super.remove(key); 85 } 86 } 87 | Popular Tags |