1 10 package org.mmbase.module.builders; 11 12 import java.util.*; 13 import org.mmbase.module.core.*; 14 import org.mmbase.util.*; 15 import org.mmbase.util.logging.*; 16 17 21 public class Cookies extends MMObjectBuilder { 22 23 private static Logger log = Logging.getLoggerInstance(Cookies.class.getName()); 24 25 LRUHashtable cache = new LRUHashtable(250); 27 28 LRUHashtable cache2 = new LRUHashtable(250); 30 31 34 public String replace(scanpage sp, StringTokenizer tok) { 35 if (tok.hasMoreTokens()) { 36 String cmd=tok.nextToken(); 37 if (cmd.equals("number")) { 38 int i=getNumber(sp.getSessionName()); 39 if (i!=-1) { 40 return(""+i); 41 } else { 42 return(""); 43 } 44 } 45 } 46 return(""); 47 } 48 49 53 public int getNumber(String key) { 54 55 Integer i=(Integer )cache.get(key); 57 if (i!=null) { 58 if (i.intValue()!=-1) { 60 log.debug("cookie positive cache "+key); 61 return(i.intValue()); 62 } else { 63 log.debug("cookie negative cache "+key); 65 return(-1); 66 } 67 } 68 69 Enumeration e=search("WHERE "+mmb.getStorageManagerFactory().getStorageIdentifier("cookiekey")+"='"+key+"'"); 71 if (e.hasMoreElements()) { 72 MMObjectNode node=(MMObjectNode)e.nextElement(); 75 int number=node.getIntValue("number"); 76 77 cache.put(key,new Integer (number)); 79 cache2.put(new Integer (number),key); 80 81 log.debug("cookie positive "+key); 82 return(number); 83 } else { 84 log.debug("cookie negative "+key); 88 cache.put(key,new Integer (-1)); 89 cache2.put(new Integer (-1),key); 90 return(-1); 91 } 92 } 93 94 95 99 public boolean nodeChanged(String machine,String number,String builder,String ctype) { 100 102 if (ctype.equals("n")) { 104 MMObjectNode node=getNode(number); 105 if (node!=null) { 106 String key=node.getStringValue("cookiekey"); 107 108 cache.put(key,new Integer (node.getIntValue("number"))); 110 cache2.put(new Integer (node.getIntValue("number")),key); 111 } 112 } else if (ctype.equals("r")) { 113 MMObjectNode node=getNode(number); 116 if (node!=null) { 117 flushCache(node.getIntegerValue("number")); 119 } 120 } else if (ctype.equals("d")) { 121 flushCache(new Integer (number)); 123 } 124 125 return(true); 126 } 127 128 131 public boolean nodeLocalChanged(String machine,String number,String builder,String ctype) { 132 super.nodeLocalChanged(machine,number,builder,ctype); 133 return(nodeChanged(machine,number,builder,ctype)); 134 } 135 136 139 public boolean nodeRemoteChanged(String machine,String number,String builder,String ctype) { 140 super.nodeRemoteChanged(machine,number,builder,ctype); 141 return(nodeChanged(machine,number,builder,ctype)); 142 } 143 144 145 149 public void flushCache(Integer number) { 150 151 Users users=(Users)mmb.getMMObject("users"); 153 if (users!=null) { 154 String key=(String )cache2.get(number); 155 users.flushCache(key); 156 } 157 158 People people=(People)mmb.getMMObject("people"); 160 if (people!=null) { 161 String key=(String )cache2.get(number); 162 people.flushCache(key); 163 } 164 } 165 166 } 167 | Popular Tags |