/*
* Copyright 2004-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package grails.web.servlet.mvc;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* An adapter class that takes a regular HttpSession and allows you to access it like a Groovy map.
*
* @author Graeme Rocher
* @since 3.0
*/
public class GrailsHttpSession implements HttpSession {
private HttpSession adaptee;
private HttpServletRequest request;
public GrailsHttpSession(HttpServletRequest request) {
this.request = request;
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getAttribute(java.lang.String)
*/
public Object getAttribute(String name) {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getAttribute(name);
}
}
private void createSessionIfNecessary() {
if (adaptee == null) adaptee = request.getSession(true);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getAttributeNames()
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public Enumeration getAttributeNames() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getAttributeNames();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getCreationTime()
*/
public long getCreationTime() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getCreationTime();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getId()
*/
public String getId() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getId();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getLastAccessedTime()
*/
public long getLastAccessedTime() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getLastAccessedTime();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getMaxInactiveInterval()
*/
public int getMaxInactiveInterval() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getMaxInactiveInterval();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#getServletContext()
*/
public ServletContext getServletContext() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getServletContext();
}
}
/**
* @see javax.servlet.http.HttpSession#getSessionContext()
* @deprecated
*/
@Deprecated
public javax.servlet.http.HttpSessionContext getSessionContext() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getSessionContext();
}
}
/**
* @see javax.servlet.http.HttpSession#getValue(java.lang.String)
* @deprecated
*/
@Deprecated
public Object getValue(String name) {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getAttribute(name);
}
}
/**
* @see javax.servlet.http.HttpSession#getValueNames()
* @deprecated
*/
@Deprecated
public String[] getValueNames() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.getValueNames();
}
}
/**
* @see javax.servlet.http.HttpSession#putValue(java.lang.String, java.lang.Object)
* @deprecated
*/
@Deprecated
public void putValue(String name, Object value) {
createSessionIfNecessary();
synchronized (this) {
adaptee.setAttribute(name, value);
}
}
/**
* @see javax.servlet.http.HttpSession#removeValue(java.lang.String)
* @deprecated
*/
@Deprecated
public void removeValue(String name) {
createSessionIfNecessary();
synchronized (this) {
adaptee.removeAttribute(name);
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#invalidate()
*/
public void invalidate() {
createSessionIfNecessary();
synchronized (this) {
adaptee.invalidate();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#isNew()
*/
public boolean isNew() {
createSessionIfNecessary();
synchronized (this) {
return adaptee.isNew();
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#removeAttribute(java.lang.String)
*/
public void removeAttribute(String name) {
createSessionIfNecessary();
synchronized (this) {
adaptee.removeAttribute(name);
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#setAttribute(java.lang.String, java.lang.Object)
*/
public void setAttribute(String name, Object value) {
createSessionIfNecessary();
synchronized (this) {
adaptee.setAttribute(name, value);
}
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSession#setMaxInactiveInterval(int)
*/
public void setMaxInactiveInterval(int arg0) {
createSessionIfNecessary();
synchronized (this) {
adaptee.setMaxInactiveInterval(arg0);
}
}
@SuppressWarnings("rawtypes")
@Override
public String toString() {
createSessionIfNecessary();
StringBuilder sb = new StringBuilder("Session Content:\n");
Enumeration e = adaptee.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
sb.append(" ");
sb.append(name);
sb.append(" = ");
sb.append(adaptee.getAttribute(name));
sb.append('\n');
}
return sb.toString();
}
}