/*
* Copyright (C) 2012 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.server.api;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.jboss.errai.bus.client.api.QueueSession;
import org.jboss.errai.bus.client.api.messaging.Message;
/**
* This utility provides access to {@link Message} resources otherwise not visible to RPC endpoints. It can be used to
* gain access to HTTP session and servlet request objects.
*
* @author Christian Sadilek <csadilek@redhat.com>
* @author Mike Brock
*/
public class RpcContext {
private static final ThreadLocal<Message> threadLocalMessage = new ThreadLocal<Message>();
/**
* Reads resources from the provided {@link Message} and stores them in {@link ThreadLocal}s.
*
* @param message
*/
public static void set(final Message message) {
threadLocalMessage.set(message);
}
/**
* Removes the resources associated with the current thread.
*/
public static void remove() {
threadLocalMessage.remove();
}
public static Message getMessage() {
return threadLocalMessage.get();
}
/**
* @return the QueueSession associated with this {@link Thread}
*/
public static QueueSession getQueueSession() {
final Message m = getMessage();
if (m == null) {
return null;
}
return m.getResource(QueueSession.class, "Session");
}
/**
* @return the HTTP session object associated with this {@link Thread}
*/
public static HttpSession getHttpSession() {
final QueueSession qs = getQueueSession();
if (qs == null) {
return null;
}
return qs.getAttribute(HttpSession.class, HttpSession.class.getName());
}
/**
* @return the servlet request instance associated with this {@link Thread}
*/
public static ServletRequest getServletRequest() {
return getMessage().getResource(HttpServletRequest.class, HttpServletRequest.class.getName());
}
}