java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/LongTermSessionStorage.java
author František Kučera <franta-hg@frantovo.cz>
Sat, 28 Feb 2009 21:31:02 +0100
changeset 1 639991d0808a
permissions -rw-r--r--
Rozbalená knihovna verze 1.0
franta-hg@1
     1
/* ================================================================
franta-hg@1
     2
 * Cewolf : Chart enabling Web Objects Framework
franta-hg@1
     3
 * ================================================================
franta-hg@1
     4
 *
franta-hg@1
     5
 * Project Info:  http://cewolf.sourceforge.net
franta-hg@1
     6
 * Project Lead:  Guido Laures (guido@laures.de);
franta-hg@1
     7
 *
franta-hg@1
     8
 * (C) Copyright 2002, by Guido Laures
franta-hg@1
     9
 *
franta-hg@1
    10
 * This library is free software; you can redistribute it and/or modify it under the terms
franta-hg@1
    11
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
franta-hg@1
    12
 * either version 2.1 of the License, or (at your option) any later version.
franta-hg@1
    13
 *
franta-hg@1
    14
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
franta-hg@1
    15
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
franta-hg@1
    16
 * See the GNU Lesser General Public License for more details.
franta-hg@1
    17
 *
franta-hg@1
    18
 * You should have received a copy of the GNU Lesser General Public License along with this
franta-hg@1
    19
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
franta-hg@1
    20
 * Boston, MA 02111-1307, USA.
franta-hg@1
    21
 */
franta-hg@1
    22
package de.laures.cewolf.storage;
franta-hg@1
    23
franta-hg@1
    24
import java.io.Serializable;
franta-hg@1
    25
franta-hg@1
    26
import javax.servlet.ServletContext;
franta-hg@1
    27
import javax.servlet.http.HttpServletRequest;
franta-hg@1
    28
import javax.servlet.http.HttpSession;
franta-hg@1
    29
import javax.servlet.jsp.PageContext;
franta-hg@1
    30
franta-hg@1
    31
import de.laures.cewolf.CewolfException;
franta-hg@1
    32
import de.laures.cewolf.ChartImage;
franta-hg@1
    33
import de.laures.cewolf.Storage;
franta-hg@1
    34
import de.laures.cewolf.taglib.util.KeyGenerator;
franta-hg@1
    35
franta-hg@1
    36
/**
franta-hg@1
    37
 * Storage stores images in session, but expires them after a certain time. 
franta-hg@1
    38
 * This expiration time defaults to 300 seconds, and can be changed by adding 
franta-hg@1
    39
 * the timeout="xxx" parameter to <cewolf:img> and <cewolf:legend> tags.
franta-hg@1
    40
 * 
franta-hg@1
    41
 * @author brianf
franta-hg@1
    42
 */
franta-hg@1
    43
public class LongTermSessionStorage implements Storage
franta-hg@1
    44
{
franta-hg@1
    45
 
franta-hg@1
    46
  public final String getKey( ChartImage cid )
franta-hg@1
    47
  {
franta-hg@1
    48
    return String.valueOf(KeyGenerator.generateKey((Serializable) cid));
franta-hg@1
    49
  }
franta-hg@1
    50
franta-hg@1
    51
  /*
franta-hg@1
    52
   * (non-Javadoc)
franta-hg@1
    53
   * 
franta-hg@1
    54
   * @see de.laures.cewolf.Storage#storeChartImage(de.laures.cewolf.ChartImage,
franta-hg@1
    55
   *      javax.servlet.jsp.PageContext)
franta-hg@1
    56
   */
franta-hg@1
    57
  public String storeChartImage( ChartImage chartImage, PageContext pageContext ) throws CewolfException
franta-hg@1
    58
  {
franta-hg@1
    59
    HttpSession session = pageContext.getSession();
franta-hg@1
    60
    SessionStorageGroup ssg = (SessionStorageGroup) session.getAttribute("CewolfCharts");
franta-hg@1
    61
    if ( ssg == null )
franta-hg@1
    62
    {
franta-hg@1
    63
      ssg = new SessionStorageGroup();
franta-hg@1
    64
      session.setAttribute("CewolfCharts", ssg);
franta-hg@1
    65
    }
franta-hg@1
    66
    String cid = getKey(chartImage);
franta-hg@1
    67
    SessionStorageItem ssi = new SessionStorageItem(chartImage, cid, chartImage.getTimeoutTime());
franta-hg@1
    68
    ssg.put(cid, ssi);
franta-hg@1
    69
franta-hg@1
    70
    return cid;
franta-hg@1
    71
  }
franta-hg@1
    72
franta-hg@1
    73
  /*
franta-hg@1
    74
   * (non-Javadoc)
franta-hg@1
    75
   * 
franta-hg@1
    76
   * @see de.laures.cewolf.Storage#getChartImage(java.lang.String,
franta-hg@1
    77
   *      javax.servlet.http.HttpServletRequest)
franta-hg@1
    78
   */
franta-hg@1
    79
  public ChartImage getChartImage( String id, HttpServletRequest request )
franta-hg@1
    80
  {
franta-hg@1
    81
    HttpSession session = request.getSession();
franta-hg@1
    82
    ChartImage chart = null;
franta-hg@1
    83
    SessionStorageGroup ssg = (SessionStorageGroup) session.getAttribute("CewolfCharts");
franta-hg@1
    84
    if ( ssg != null )
franta-hg@1
    85
    {
franta-hg@1
    86
      SessionStorageItem ssi = (SessionStorageItem) ssg.get(id);
franta-hg@1
    87
      if ( ssi != null )
franta-hg@1
    88
      {
franta-hg@1
    89
        chart = ssi.getChart();
franta-hg@1
    90
      }
franta-hg@1
    91
    }
franta-hg@1
    92
franta-hg@1
    93
    return chart;
franta-hg@1
    94
  }
franta-hg@1
    95
  /*
franta-hg@1
    96
   * (non-Javadoc)
franta-hg@1
    97
   * 
franta-hg@1
    98
   * @see de.laures.cewolf.Storage#init(javax.servlet.ServletContext)
franta-hg@1
    99
   */
franta-hg@1
   100
  public void init( ServletContext servletContext ) throws CewolfException {
franta-hg@1
   101
  }
franta-hg@1
   102
franta-hg@1
   103
  /**
franta-hg@1
   104
   * @see de.laures.cewolf.Storage#removeChartImage(java.lang.String, javax.servlet.jsp.PageContext)
franta-hg@1
   105
   */
franta-hg@1
   106
  public String removeChartImage(String cid, HttpServletRequest request) throws CewolfException {
franta-hg@1
   107
	  HttpSession session = request.getSession();
franta-hg@1
   108
	  // No session exit
franta-hg@1
   109
	  if (session == null)
franta-hg@1
   110
	  {
franta-hg@1
   111
		  return cid;
franta-hg@1
   112
	  }
franta-hg@1
   113
	  SessionStorageGroup ssg = (SessionStorageGroup) session.getAttribute("CewolfCharts");
franta-hg@1
   114
	  if ( ssg == null )
franta-hg@1
   115
	  {
franta-hg@1
   116
		  // No group exit
franta-hg@1
   117
		  return cid;
franta-hg@1
   118
	  }
franta-hg@1
   119
	  ssg.remove(cid);
franta-hg@1
   120
	  return cid;  
franta-hg@1
   121
  }
franta-hg@1
   122
}