blob: b7d5454ffdbabe9cb922a97f4cd9b8be7d27ae68 [file] [log] [blame]
/*
* 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 jakarta.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();
}