/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.wicket.session; import java.io.Serializable; import java.util.List; import java.util.Set; import javax.servlet.http.HttpSession; import org.apache.wicket.Session; import org.apache.wicket.request.Request; /** * The actual store that is used by {@link org.apache.wicket.Session} to store its attributes. * <p> * This class is intended for internal framework use. * * @author Eelco Hillenius * @author Johan Compagner * @author Matej Knopp */ public interface ISessionStore { /** * Gets the attribute value with the given name * * @param request * the current request * @param name * The name of the attribute to store * @return The value of the attribute */ Serializable getAttribute(Request request, String name); /** * @param request * the current request * * @return List of attributes for this session */ List<String> getAttributeNames(Request request); /** * Adds or replaces the attribute with the given name and value. * * @param request * the current request * @param name * the name of the attribute * @param value * the value of the attribute */ void setAttribute(Request request, String name, Serializable value); /** * Removes the attribute with the given name. * * @param request * the current request * @param name * the name of the attribute to remove */ void removeAttribute(Request request, String name); /** * Invalidates the session. * * @param request * the current request */ void invalidate(Request request); /** * Get the session id for the provided request. If create is false and the creation of the * actual session is deferred, this method should return null to reflect it doesn't have one. * * @param request * The request * @param create * Whether to create an actual session (typically an instance of {@link HttpSession}) * when not already done so * @return The session id for the provided request, possibly null if create is false and the * creation of the actual session was deferred */ String getSessionId(Request request, boolean create); /** * Retrieves the session for the provided request from this facade. * <p> * This method should return null if it is not bound yet, so that Wicket can recognize that it * should create a session and call {@link #bind(Request, Session)} right after that. * </p> * * @param request * The current request * @return The session for the provided request or null if the session was not bound */ Session lookup(Request request); /** * Adds the provided new session to this facade using the provided request. * * @param request * The request that triggered making a new session * @param newSession * The new session */ void bind(Request request, Session newSession); /** * Flushes the session. Flushing the session generally means setting the attribute with the * value of the current session. Some servlet containers use the setAttribute() as a signal that * the value is dirty and needs to be replicated. Essentially this call comes down to: * * <code> * String attr=getSessionAttributeName(); * Session session=getAttribute(attr); * setAttribute(attr, session); * </code> * * If the session is not yet bound it will be. * * @param request * current request * @param session * session to be flushed */ void flushSession(Request request, Session session); /** * Called when the WebApplication is destroyed. */ void destroy(); /** * Listener invoked when session is unbound. */ interface UnboundListener { /** * Informs the listener that session with specific id has been unbound. * * @param sessionId */ void sessionUnbound(String sessionId); } /** * Registers listener invoked when session is unbound. * * @param listener */ void registerUnboundListener(UnboundListener listener); /** * Unregisters listener invoked when session is unbound. * * @param listener */ void unregisterUnboundListener(UnboundListener listener); /** * @return The list of registered unbound listeners */ Set<UnboundListener> getUnboundListener(); /** * Listener invoked when session is bound. */ interface BindListener { /** * Informs the listener that a session is about to be bound. Note that this method is also * called for {@link Session#isTemporary() temporary sessions}. * * @param request * The request the session is bound in * @param newSession * The session that will be bound */ void bindingSession(Request request, Session newSession); } /** * Registers listener invoked when session is bound. * * @param listener */ void registerBindListener(BindListener listener); /** * Unregisters listener invoked when session is bound. * * @param listener */ void unregisterBindListener(BindListener listener); /** * @return The list of registered bind listeners */ Set<BindListener> getBindListeners(); }