All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.webflow.execution.RequestContext Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2004-2007 the original author or authors.
 *
 * 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.springframework.webflow.execution;

import org.springframework.webflow.context.ExternalContext;
import org.springframework.webflow.core.collection.AttributeMap;
import org.springframework.webflow.core.collection.MutableAttributeMap;
import org.springframework.webflow.core.collection.ParameterMap;
import org.springframework.webflow.definition.FlowDefinition;
import org.springframework.webflow.definition.StateDefinition;
import org.springframework.webflow.definition.TransitionDefinition;

/**
 * A context for a single request to manipulate a flow execution. Allows Web Flow users to access contextual information
 * about the executing request, as well as the governing {@link #getFlowExecutionContext() active flow execution}.
 * 

* The term request is used to describe a single call (thread) into the flow system by an external actor to * manipulate exactly one flow execution. *

* A new instance of this object is typically created when one of the core operations supported by a flow execution is * invoked, either start to launch the flow execution, signalEvent to resume the flow * execution, or refresh to reconstitute the flow execution's last view selection for purposes of * reissuing a user response. *

* Once created this context object is passed around throughout flow execution request processing where it may be * accessed and reasoned upon by SWF-internal artifacts such as states, user-implemented action code, and state * transition criteria. *

* When a call into a flow execution returns this object goes out of scope and is disposed of automatically. Thus a * request context is an internal artifact used within a FlowExecution: this object is not exposed to external client * code, e.g. a view implementation (JSP). *

* The {@link #getRequestScope() requestScope} property may be used as a store for arbitrary data that should exist for * the life of this object. Request-scoped data, along with all data in {@link #getFlashScope() flash scope}, * {@link #getFlowScope() flow scope} and {@link #getConversationScope() conversation scope} is available for exposing * to view templates via a {@link #getModel() model} property. *

* The web flow system will ensure that a RequestContext object is local to the current thread. It can be safely * manipulated without needing to worry about concurrent access. *

* Note: this request context is in no way linked to an HTTP or Portlet request. It uses the familiar "request" naming * convention to indicate a single call to manipulate a runtime execution of a flow definition. * * @author Keith Donald * @author Erwin Vervaet */ public interface RequestContext { /** * Returns the definition of the flow that is currently executing. * @return the flow definition for the active session * @throws IllegalStateException if the flow execution has not been started at all, or if the execution has ended * and is no longer actively executing */ public FlowDefinition getActiveFlow() throws IllegalStateException; /** * Returns the current state of the executing flow. May return null if this flow execution is in the * process of starting and has not yet entered its start state. * @return the current state, or null if in the process of starting * @throws IllegalStateException if this flow execution has not been started at all, or if this execution has ended * and is no longer actively executing */ public StateDefinition getCurrentState() throws IllegalStateException; /** * Returns a mutable accessor for accessing and/or setting attributes in request scope. Request scoped attributes * exist for the duration of this request only. * @return the request scope */ public MutableAttributeMap getRequestScope(); /** * Returns a mutable accessor for accessing and/or setting attributes in flash scope. Flash scoped attributes * exist untill the next event is signaled in the flow execution. * @return the flash scope */ public MutableAttributeMap getFlashScope(); /** * Returns a mutable accessor for accessing and/or setting attributes in flow scope. Flow scoped attributes exist * for the life of the active flow session. * @return the flow scope * @see FlowSession */ public MutableAttributeMap getFlowScope(); /** * Returns a mutable accessor for accessing and/or setting attributes in conversation scope. Conversation scoped * attributes exist for the life of the executing flow and are shared across all flow sessions. * @return the conversation scope * @see FlowExecutionContext */ public MutableAttributeMap getConversationScope(); /** * Returns the immutable input parameters associated with this request into Spring Web Flow. The map returned is * immutable and cannot be changed. *

* This is typically a convenient shortcut for accessing the {@link ExternalContext#getRequestParameterMap()} * directly. * @see #getExternalContext() */ public ParameterMap getRequestParameters(); /** * Returns the external client context that originated (or triggered) this request. *

* Acting as a facade, the returned context object provides a single point of access to the calling client's * environment. It provides normalized access to attributes of the client environment without tying you to specific * constructs within that environment. *

* In addition, this context may be downcastable to a specific context type for a specific client environment, such * as a {@link org.springframework.webflow.context.servlet.ServletExternalContext} for servlets or a * {@link org.springframework.webflow.context.portlet.PortletExternalContext} for portlets. Such downcasting will * give you full access to a native HttpServletRequest, for example. With that said, for portability reasons you * should avoid coupling your flow artifacts to a specific deployment environment when possible. * @return the originating external context, the one that triggered the current execution request */ public ExternalContext getExternalContext(); /** * Returns contextual information about the flow execution itself. Information in this context typically spans more * than one request. * @return the flow execution context */ public FlowExecutionContext getFlowExecutionContext(); /** * Returns the last event signaled during this request. The event may or may not have caused a state transition to * happen. * @return the last signaled event, or null if no event has been signaled yet */ public Event getLastEvent(); /** * Returns the last state transition that executed in this request. * @return the last transition, or null if no transition has occured yet */ public TransitionDefinition getLastTransition(); /** * Returns a context map for accessing arbitrary attributes about the state of the current request. These attributes * may be used to influence flow execution behavior. * @return the current attributes of this request, or empty if not set */ public AttributeMap getAttributes(); /** * Set the contextual attributes describing the state of this request. Overwrites any pre-existing collection. * @param attributes the attributes */ public void setAttributes(AttributeMap attributes); /** * Returns the data model capturing the state of this context, suitable for exposing to clients (mostly web views). * Typically the model will contain the union of the data available in request, flash, session and conversation * scope. * @return the model that can be exposed to a client view for rendering purposes */ public AttributeMap getModel(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy