//========================================================================
//$Id: StateInterceptor.java,v 1.4 2004/05/09 20:30:47 gregwilkins Exp $
//Copyright 2002-2004 Mort Bay Consulting Pty. Ltd.
//------------------------------------------------------------------------
//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.mortbay.j2ee.session;
//----------------------------------------
import java.rmi.RemoteException;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.http.HttpSession;
//----------------------------------------
/**
* Superlass for StateInterceptors - objects which
* wrap-n-delegate/decorate a State instance. A stack of
* StateInterceptors form a StateContainer.
*
* @author <a href="mailto:jules@mortbay.com">Jules Gosnell</a>
* @version 1.0
*/
public class StateInterceptor implements State, Cloneable
{
// protected final ThreadLocal _state =new ThreadLocal();
// protected State getState () {return (State)_state.get();}
// protected void setState(State state) {_state.set(state);}
//
private final static ThreadLocal _manager = new ThreadLocal();
protected Manager getManager()
{
return (Manager) _manager.get();
}
protected void setManager(Manager manager)
{
_manager.set(manager);
}
private final static ThreadLocal _session = new ThreadLocal();
protected HttpSession getSession()
{
return (HttpSession) _session.get();
}
protected void setSession(HttpSession session)
{
_session.set(session);
}
// management of this attribute needs to move into the container...
private State _state;
protected State getState()
{
return _state;
}
protected void setState(State state)
{
_state = state;
}
// protected HttpSession _session;
// protected HttpSession getSession () {return _session;}
// protected void setSession(HttpSession session) {_session=session;}
//----------------------------------------
// 'StateInterceptor' API
//----------------------------------------
// lifecycle
public void start()
{
}
public void stop()
{
}
// misc
public String toString()
{
return "<" + getClass() + "->" + getState() + ">";
}
//----------------------------------------
// wrapped-n-delegated-to 'State' API
//----------------------------------------
// invariant field accessors
public String getId() throws RemoteException
{
return getState().getId();
}
public int getActualMaxInactiveInterval() throws RemoteException
{
return getState().getActualMaxInactiveInterval();
}
public long getCreationTime() throws RemoteException
{
return getState().getCreationTime();
}
// variant field accessors
public Map getAttributes() throws RemoteException
{
return getState().getAttributes();
}
public void setAttributes(Map attributes) throws RemoteException
{
getState().setAttributes(attributes);
}
public long getLastAccessedTime() throws RemoteException
{
return getState().getLastAccessedTime();
}
public void setLastAccessedTime(long time) throws RemoteException
{
getState().setLastAccessedTime(time);
}
public int getMaxInactiveInterval() throws RemoteException
{
return getState().getMaxInactiveInterval();
}
public void setMaxInactiveInterval(int interval) throws RemoteException
{
getState().setMaxInactiveInterval(interval);
}
// compound fn-ality
public Object getAttribute(String name) throws RemoteException
{
return getState().getAttribute(name);
}
public Object setAttribute(String name, Object value, boolean returnValue)
throws RemoteException
{
return getState().setAttribute(name, value, returnValue);
}
public Object removeAttribute(String name, boolean returnValue)
throws RemoteException
{
return getState().removeAttribute(name, returnValue);
}
public Enumeration getAttributeNameEnumeration() throws RemoteException
{
return getState().getAttributeNameEnumeration();
}
public String[] getAttributeNameStringArray() throws RemoteException
{
return getState().getAttributeNameStringArray();
}
public boolean isValid() throws RemoteException
{
return getState().isValid();
}
public Object clone()
{
Object tmp = null;
try
{
tmp = getClass().newInstance();
}
catch (Exception e)
{
// _log.error("could not clone "+getClass().getName(),e); - TODO
}
return tmp;
}
}