00001 /* 00002 * OpenMobileIS - a free Java(TM) Framework for mobile applications Java(TM) 00003 * Copyright (C) 2004-2005 Philippe Delrieu 00004 * All rights reserved. 00005 * Contact: openmobileis@e-care.fr 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00020 * USA 00021 * 00022 * Author : Philippe Delrieu 00023 * 00024 * Modifications : 00025 * 2004 Creation P.Delrieu 00026 * 2004 Modified by Romain Beaugrand 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 // resp = serviceStruct.getResponseForRequest(((WebServerConnection)req).getParametersTable()); 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 // serviceStruct.addWebPage((Hashtable)((WebServerConnection)req).getParametersTable().clone(), cachedData); 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 }