/* * Copyright (C) 2011 Red Hat, Inc. and/or its affiliates. * * 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.jboss.errai.bus.client.api; import java.util.Collection; /** * The combination of a communication channel (identified by an HTTPSession or other communication session, such as an * open WebSocket channel) with an Errai Bus queue ID. An instance of QueueSession identifies a physical communication * link with a specific subject on a remote bus. A single communication link typically has many QueueSession instances * (one per bus subject). * * <h3>Note on scope of attributes</h3> * <p> * QueueSession provides a map-like facility for storing and retrieving arbitrary object ("attributes") by name. These * attributes are shared among all QueueSession instances that are associated with the same communication channel (for * example, an HTTPSession or a WebSocketChannel). */ public interface QueueSession { /** * Returns the ID of this session, which uniquely identifies it within the scope of this client (or server for a * server side session). This is <i>not</i> the ID of the underlying wrapped session (for example, it is not a Servlet * Session ID). * * @return the session id, which is unique within the confines of the present client (or server). Never null. */ public String getSessionId(); /** * Returns the ID of the session this QueueSession wraps. In the case of a wrapper around an HTTP Session, this method * would return the HTTP Session ID. * * @return the session ID from the underlying communication layer, or a unique ID synthesized by the framework for * communication layers that don't have unique session ID's of their own. Never null. */ public String getParentSessionId(); /** * Closes this session and notifies the {@link SessionEndListener}s (optional operation; not all QueueSession * implementations are closeable). * * @return true, if this session was closed and listeners have been notified. In the case of a QueueSession that does * not implement this operation, listeners are not notified and this method returns false. */ public boolean endSession(); /** * Associates the given value with the given key, replacing the existing value, if any, for the key. * <p> * See the class-level documentation for a note on the scope of these attributes. * * @param attribute * the name (key) of the attribute. Not null. * @param value * new value for attribute. Null is permitted. */ public void setAttribute(String attribute, Object value); /** * Returns the value associated with the given key. * <p> * See the class-level documentation for a note on the scope of these attributes. * * @param type * the type to attempt to cast the attribute's value to * @param attribute * the name (key) of the attribute. Not null. * @param <T> * the type * @return the value of the attribute, as the specified type. Returns null if the attribute's value is null, or if no * such attribute exists. Use {@link #hasAttribute(String)} to test for the existence of a null-valued * attribute. */ public <T> T getAttribute(Class<T> type, String attribute); /** * Returns the names of all attributes within this session. * <p> * See the class-level documentation for a note on the scope of these attributes. * * @return collection of attribute names. */ public Collection<String> getAttributeNames(); /** * Returns true if the specified attribute exists. * <p> * See the class-level documentation for a note on the scope of these attributes. * * @param attribute * the attribute name to search for. * @return true if it exists, otherwise false */ public boolean hasAttribute(String attribute); /** * Removes the specified attribute from this session. * <p> * See the class-level documentation for a note on the scope of these attributes. * * @param attribute * the name of the attribute to remove. * @return the attribute value previously associated with the given name (which may be null). Returns null in case the * attribute did not exist. */ public Object removeAttribute(String attribute); /** * Registers a listener that will notified when this session ends. * * @param listener * the listener to be notified at session end. */ public void addSessionEndListener(SessionEndListener listener); public boolean isValid(); }