/*
* Copyright 2004-2012 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.core.collection.MutableAttributeMap;
import org.springframework.webflow.definition.FlowDefinition;
/**
* An enumeration of the core scope types of Spring Web Flow. Provides easy access to each scope by <i>type</i> using
* {@link #getScope(RequestContext)}.
* <p>
* A "scope" defines a data structure for storing custom user attributes within a flow execution. Different scope types
* have different semantics in terms of how long attributes placed in those scope maps remain valid.
*
* @author Keith Donald
* @author Erwin Vervaet
*/
public enum ScopeType {
/**
* The "request" scope type. Attributes placed in request scope exist for the life of the current request into the
* flow execution. When the request ends any attributes in request scope go out of scope.
*/
REQUEST() {
public MutableAttributeMap<Object> getScope(RequestContext context) {
return context.getRequestScope();
}
},
/**
* The "flash" scope type. Attributes placed in flash scope exist through the life of the current request <i>and
* until the next view rendering</i>. After the view renders, flash scope is cleared.
* <p>
* Flash scope is typically used to store messages that should be preserved until after the next view renders.
*/
FLASH() {
public MutableAttributeMap<Object> getScope(RequestContext context) {
return context.getFlashScope();
}
},
/**
* The "view" scope type. Attributes placed in view scope exist through the life of the current view state <i>and
* until the view state exits in a subsequent request</i>.
* <p>
* View scope is typically used to store view model objects manipulated over a series of Ajax requests.
*/
VIEW() {
public MutableAttributeMap<Object> getScope(RequestContext context) {
return context.getViewScope();
}
},
/**
* The "flow" scope type. Attributes placed in flow scope exist through the life of an executing flow session,
* representing an instance a single {@link FlowDefinition flow definition}. When the flow session ends any data in
* flow scope goes out of scope.
*/
FLOW() {
public MutableAttributeMap<Object> getScope(RequestContext context) {
return context.getFlowScope();
}
},
/**
* The "conversation" scope type. Attributes placed in conversation scope are shared by all flow sessions started
* within a flow execution and live for the life of the entire flow execution (representing a single logical user
* conversation). When the governing execution ends, any data in conversation scope goes out of scope.
*/
CONVERSATION() {
public MutableAttributeMap<Object> getScope(RequestContext context) {
return context.getConversationScope();
}
};
public Class<?> getType() {
// force ScopeType as type
return ScopeType.class;
}
/**
* Accessor that returns the mutable attribute map for this scope type for a given flow execution request context.
* @param context the context representing an executing request
* @return the scope map of this type for that request, allowing attributes to be accessed and set
*/
public abstract MutableAttributeMap<Object> getScope(RequestContext context);
}