franta-hg@1: /* ================================================================ franta-hg@1: * Cewolf : Chart enabling Web Objects Framework franta-hg@1: * ================================================================ franta-hg@1: * franta-hg@1: * Project Info: http://cewolf.sourceforge.net franta-hg@1: * Project Lead: Guido Laures (guido@laures.de); franta-hg@1: * franta-hg@1: * (C) Copyright 2002, by Guido Laures franta-hg@1: * franta-hg@1: * This library is free software; you can redistribute it and/or modify it under the terms franta-hg@1: * of the GNU Lesser General Public License as published by the Free Software Foundation; franta-hg@1: * either version 2.1 of the License, or (at your option) any later version. franta-hg@1: * franta-hg@1: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; franta-hg@1: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. franta-hg@1: * See the GNU Lesser General Public License for more details. franta-hg@1: * franta-hg@1: * You should have received a copy of the GNU Lesser General Public License along with this franta-hg@1: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, franta-hg@1: * Boston, MA 02111-1307, USA. franta-hg@1: */ franta-hg@1: franta-hg@1: package de.laures.cewolf.storage; franta-hg@1: franta-hg@1: import java.io.Serializable; franta-hg@1: franta-hg@1: import javax.servlet.ServletContext; franta-hg@1: import javax.servlet.http.HttpServletRequest; franta-hg@1: import javax.servlet.http.HttpSession; franta-hg@1: import javax.servlet.jsp.PageContext; franta-hg@1: franta-hg@1: import org.apache.commons.logging.Log; franta-hg@1: import org.apache.commons.logging.LogFactory; franta-hg@1: franta-hg@1: import de.laures.cewolf.CewolfException; franta-hg@1: import de.laures.cewolf.ChartImage; franta-hg@1: import de.laures.cewolf.Storage; franta-hg@1: import de.laures.cewolf.taglib.util.KeyGenerator; franta-hg@1: franta-hg@1: /** franta-hg@1: * @author glaures franta-hg@1: */ franta-hg@1: public abstract class AbstractSessionStorage implements Storage franta-hg@1: { franta-hg@1: franta-hg@1: private static final Log log = LogFactory.getLog(AbstractSessionStorage.class); franta-hg@1: franta-hg@1: /** franta-hg@1: * @see de.laures.cewolf.Storage#storeChartImage(ChartImage, ServletContext) franta-hg@1: */ franta-hg@1: public String storeChartImage( ChartImage cid, PageContext pageContext ) throws CewolfException franta-hg@1: { franta-hg@1: if ( contains(cid, pageContext) ) franta-hg@1: { franta-hg@1: return getKey(cid); franta-hg@1: } franta-hg@1: log.debug("storing chart " + cid); franta-hg@1: final HttpSession session = pageContext.getSession(); franta-hg@1: //String key = getKey(cid); franta-hg@1: return storeChartImage(cid, session); franta-hg@1: } franta-hg@1: franta-hg@1: franta-hg@1: /** franta-hg@1: * @see de.laures.cewolf.Storage#getChartImage(String) franta-hg@1: */ franta-hg@1: public ChartImage getChartImage( String id, HttpServletRequest request ) franta-hg@1: { franta-hg@1: HttpSession session = request.getSession(); franta-hg@1: return (ChartImage) session.getAttribute(id); franta-hg@1: } franta-hg@1: franta-hg@1: public boolean contains( ChartImage cid, PageContext pageContext ) franta-hg@1: { franta-hg@1: return pageContext.getSession().getAttribute(getKey(cid)) != null; franta-hg@1: } franta-hg@1: franta-hg@1: public final String getKey( ChartImage cid ) franta-hg@1: { franta-hg@1: return String.valueOf(KeyGenerator.generateKey((Serializable) cid)); franta-hg@1: } franta-hg@1: franta-hg@1: protected String storeChartImage( ChartImage cid, HttpSession session ) throws CewolfException franta-hg@1: { franta-hg@1: final String sessionKey = getKey(cid); franta-hg@1: synchronized (session) franta-hg@1: { franta-hg@1: session.setAttribute(sessionKey, getCacheObject(cid)); franta-hg@1: } franta-hg@1: return sessionKey; franta-hg@1: } franta-hg@1: franta-hg@1: /** franta-hg@1: */ franta-hg@1: public String removeChartImage(String imgKey, HttpServletRequest request) franta-hg@1: throws CewolfException { franta-hg@1: final HttpSession session = request.getSession(); franta-hg@1: if (session == null) franta-hg@1: { franta-hg@1: return imgKey; franta-hg@1: } franta-hg@1: return removeChartImage(imgKey, session); franta-hg@1: } franta-hg@1: franta-hg@1: /** franta-hg@1: * @param cid franta-hg@1: * @param session franta-hg@1: * @return franta-hg@1: * @throws CewolfException franta-hg@1: */ franta-hg@1: protected String removeChartImage(String cid, HttpSession session) franta-hg@1: throws CewolfException { franta-hg@1: synchronized (session) { franta-hg@1: session.removeAttribute(cid); franta-hg@1: } franta-hg@1: return cid; franta-hg@1: } franta-hg@1: franta-hg@1: protected abstract Object getCacheObject( ChartImage cid ) throws CewolfException; franta-hg@1: franta-hg@1: /** franta-hg@1: * @see de.laures.cewolf.Storage#init(ServletContext) franta-hg@1: */ franta-hg@1: public void init( ServletContext servletContext ) throws CewolfException franta-hg@1: { franta-hg@1: } franta-hg@1: franta-hg@1: franta-hg@1: franta-hg@1: }