/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam; import org.jboss.seam.contexts.Context; import org.jboss.seam.contexts.Contexts; /** * The scopes defined by Seam. * * @author <a href="mailto:theute@jboss.org">Thomas Heute</a> */ public enum ScopeType { /** * The stateless pseudo-context. */ STATELESS, /** * The method context. Each call to a session bean or * JavaBean component puts a new method context onto * the stack of method contexts associated with the * current thread. The context is destroyed (and the * stack popped) when the method returns. */ METHOD, /** * The event (request) context. Spans a server request, * from restore view to render response. */ EVENT, /** * The page context. Begins during the invoke application * phase prior to rendering a page, and lasts until the end * of any invoke application phase of a faces request * originating from that page. Non-faces requests do not * propagate the page scope. */ PAGE, /** * The conversation context. Spans multiple requests from * the same browser window, demarcated by @Begin and @End * methods. A conversation context is propagated by * any faces request, or by any request that specifies * a conversation id as a request parameter. The conversation * context is not available during the restore view phase. */ CONVERSATION, /** * The session context. (A servlet login session.) */ SESSION, /** * The application context (Servlet context.) */ APPLICATION, /** * The business process context. Spans multiple conversations * with multiple users, demarcated by the start and end states * of the business process definition. */ BUSINESS_PROCESS, /** * Indicates that the scope is implied. */ UNSPECIFIED; private final String prefix; private ScopeType() { prefix = "org.jboss.seam." + toString(); } public boolean isContextActive() { switch (this) { case STATELESS: return true; case METHOD: return Contexts.isMethodContextActive(); case EVENT: return Contexts.isEventContextActive(); case PAGE: return Contexts.isPageContextActive(); case CONVERSATION: return Contexts.isConversationContextActive(); case SESSION: return Contexts.isSessionContextActive(); case APPLICATION: return Contexts.isApplicationContextActive(); case BUSINESS_PROCESS: return Contexts.isBusinessProcessContextActive(); default: throw new IllegalArgumentException(); } } /** * @return the Context object for this scope */ public Context getContext() { switch (this) { case STATELESS: throw new UnsupportedOperationException("Stateless pseudo-scope does not have a Context object"); case METHOD: if ( !Contexts.isMethodContextActive() ) { throw new IllegalStateException("No method context active"); } return Contexts.getMethodContext(); case EVENT: if ( !Contexts.isEventContextActive() ) { throw new IllegalStateException("No event context active"); } return Contexts.getEventContext(); case PAGE: if ( !Contexts.isPageContextActive() ) { throw new IllegalStateException("No page context active"); } return Contexts.getPageContext(); case CONVERSATION: if ( !Contexts.isConversationContextActive() ) { throw new IllegalStateException("No conversation context active"); } return Contexts.getConversationContext(); case SESSION: if ( !Contexts.isSessionContextActive() ) { throw new IllegalStateException("No session context active"); } return Contexts.getSessionContext(); case APPLICATION: if ( !Contexts.isApplicationContextActive() ) { throw new IllegalStateException("No application context active"); } return Contexts.getApplicationContext(); case BUSINESS_PROCESS: if ( !Contexts.isBusinessProcessContextActive() ) { throw new IllegalStateException("No process context active"); } return Contexts.getBusinessProcessContext(); default: throw new IllegalArgumentException(); } } public String getPrefix() { return prefix; } }