00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 package org.openmobileis.services.cache;
00030
00031 import java.util.Hashtable;
00032
00033 import javax.servlet.http.HttpServletRequest;
00034
00035 import org.openmobileis.common.context.ApplicationContextManager;
00036 import org.openmobileis.common.util.collection.Array;
00037 import org.openmobileis.services.Service;
00038
00056 public final class WebPageCacheManager {
00057
00058 private static WebPageCacheManager manager;
00059 private Hashtable eventList;
00060 private Array serviceList;
00064 private WebPageCacheManager() {
00065 super();
00066 eventList = new Hashtable(5);
00067 serviceList = new Array(10);
00068 }
00069
00070 public static WebPageCacheManager getManager() {
00071 if (manager == null) {
00072 synchronized(WebPageCacheManager.class) {
00073 if (manager == null) {
00074 manager = new WebPageCacheManager();
00075 ApplicationContextManager.getManager().addManager(manager);
00076 }
00077 }
00078 }
00079 return manager;
00080 }
00081
00082 public void registerService(WebPageCacheServiceStruct service, WebPageCacheEvent event) {
00083 Array services = (Array)eventList.get(event);
00084 if (services == null) {
00085 services = new Array(10);
00086 eventList.put(event, services);
00087 }
00088 services.add(service);
00089 serviceList.add(service);
00090 }
00091
00092 public byte[] getCachedPage(HttpServletRequest req, Service service) {
00093 byte[] resp = null;
00094 for(int i=0; i<serviceList.size();i++) {
00095 WebPageCacheServiceStruct serviceStruct = (WebPageCacheServiceStruct)serviceList.get(i);
00096 if (serviceStruct.getService().equals(service)) {
00097 resp = serviceStruct.getResponseForRequest(new Hashtable(req.getParameterMap()));
00098
00099 }
00100 }
00101 return resp;
00102 }
00103
00104 public void setCachedPage(HttpServletRequest req, byte[] cachedData, Service service) {
00105 for(int i=0; i<serviceList.size();i++) {
00106 WebPageCacheServiceStruct serviceStruct = (WebPageCacheServiceStruct)serviceList.get(i);
00107 if (serviceStruct.getService().equals(service)) {
00108 serviceStruct.addWebPage(new Hashtable(req.getParameterMap()), cachedData);
00109
00110 }
00111 }
00112 }
00113
00114 public void sendCacheEvent(WebPageCacheEvent event) {
00115 Array eventArray = (Array)eventList.get(event);
00116 if (eventArray != null) {
00117 for (int i=0; i<eventArray.size(); i++) {
00118 WebPageCacheServiceStruct struct = (WebPageCacheServiceStruct)eventArray.get(i);
00119 struct.notifyCacheEvent(event);
00120 }
00121 }
00122 }
00123
00124 }