/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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 org.seasar.extension.httpsession;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
/**
* セッション情報をSeasar2で管理するための {@link HttpSession}です。
*
* @author higa
*
*/
public class S2HttpSession implements HttpSession {
private S2HttpServletRequestWrapper request;
private String id;
private SessionStateManager sessionStateManager;
private ServletContext servletContext;
private boolean isNew = false;
private SessionState sessionState;
private long creationTime = new Date().getTime();
private int maxInactiveInterval = Integer.MAX_VALUE;
/**
* {@link S2HttpSession}を作成します。
*
* @param request
* HTTPリクエスト
* @param id
* 識別子
* @param sessionStateManager
* セッション状態マネージャ
* @param servletContext
* サーブレットコンテキスト
* @param isNew
* 新規かどうか
*/
public S2HttpSession(S2HttpServletRequestWrapper request, String id,
SessionStateManager sessionStateManager,
ServletContext servletContext, boolean isNew) {
this.request = request;
this.id = id;
this.sessionStateManager = sessionStateManager;
this.isNew = isNew;
}
/**
* セッション状態を返します。
*
* @return セッション状態
*/
public SessionState getSessionState() {
return sessionState;
}
public Object getAttribute(String name) {
setupSessionState();
return sessionState.getAttribute(name);
}
/**
* セッションの状態をセットアップします。
*/
protected synchronized void setupSessionState() {
if (sessionState == null) {
sessionState = sessionStateManager.loadState(id);
}
}
public Enumeration getAttributeNames() {
setupSessionState();
return sessionState.getAttributeNames();
}
public long getCreationTime() {
return creationTime;
}
public String getId() {
return id;
}
public long getLastAccessedTime() {
setupSessionState();
return sessionState.getLastAccessedTime();
}
public int getMaxInactiveInterval() {
return maxInactiveInterval;
}
public ServletContext getServletContext() {
return servletContext;
}
/**
* @deprecated
*/
public javax.servlet.http.HttpSessionContext getSessionContext() {
return null;
}
public Object getValue(String name) {
return getAttribute(name);
}
public String[] getValueNames() {
List list = new ArrayList();
for (Enumeration e = getAttributeNames(); e.hasMoreElements();) {
list.add(e.nextElement());
}
return (String[]) list.toArray(new String[list.size()]);
}
public void invalidate() {
sessionStateManager.removeState(id);
request.invalidateSession();
}
public boolean isNew() {
return isNew;
}
public void putValue(String name, Object value) {
setAttribute(name, value);
}
public void removeAttribute(String name) {
setAttribute(name, null);
}
public void removeValue(String name) {
removeAttribute(name);
}
public void setAttribute(String name, Object value) {
setupSessionState();
sessionState.setAttribute(name, value);
}
public void setMaxInactiveInterval(int interval) {
maxInactiveInterval = interval;
}
}