/* * 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.expression.el; import java.util.ArrayList; import java.util.List; import javax.el.ELContext; import javax.el.ELResolver; import javax.el.ExpressionFactory; import javax.el.FunctionMapper; import javax.el.VariableMapper; import org.springframework.binding.expression.el.DefaultELResolver; import org.springframework.binding.expression.el.ELContextFactory; import org.springframework.binding.expression.el.ELExpressionParser; import org.springframework.webflow.execution.RequestContext; /** * Allows for Unified EL expressions in a FlowDefinition. * * @author Jeremy Grelle */ public class WebFlowELExpressionParser extends ELExpressionParser { /** * Creates a new Web Flow EL expression parser. * @param expressionFactory the underlying EL expression factory (EL provider specific) */ public WebFlowELExpressionParser(ExpressionFactory expressionFactory) { super(expressionFactory); putContextFactory(RequestContext.class, new RequestContextELContextFactory()); } /** * Configures EL context instances for evaluating against a Web Flow request context. * @author Keith Donald */ private static class RequestContextELContextFactory implements ELContextFactory { public ELContext getELContext(Object target) { RequestContext context = (RequestContext) target; List<ELResolver> customResolvers = new ArrayList<ELResolver>(); customResolvers.add(new RequestContextELResolver(context)); customResolvers.add(new FlowResourceELResolver(context)); customResolvers.add(new ImplicitFlowVariableELResolver(context)); customResolvers.add(new ScopeSearchingELResolver(context)); customResolvers.add(new SpringBeanWebFlowELResolver(context)); customResolvers.add(new ActionMethodELResolver()); ELResolver resolver = new DefaultELResolver(customResolvers); return new WebFlowELContext(resolver); } } private static class WebFlowELContext extends ELContext { private ELResolver resolver; public WebFlowELContext(ELResolver resolver) { this.resolver = resolver; } public ELResolver getELResolver() { return resolver; } public FunctionMapper getFunctionMapper() { return null; } public VariableMapper getVariableMapper() { return null; } } }