/* * 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.binding.expression.support; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.springframework.binding.expression.ExpressionVariable; import org.springframework.binding.expression.ParserContext; /** * Default implementation of the ParserContext interface that has a fluent API for building parser context attributes. * @author Keith Donald */ public class FluentParserContext implements ParserContext { private Class<?> evaluationContextType; private Class<?> evaluationResultType; private List<ExpressionVariable> expressionVariables; private boolean template; /** * Create a new parser context, initially with all context attributes as null. Post construction, call one or more * of the fluent builder methods to configure this context. * @see #evaluate(Class) * @see #expectResult(Class) * @see #variable(ExpressionVariable) * @see #template() */ public FluentParserContext() { init(); } public Class<?> getEvaluationContextType() { return evaluationContextType; } public Class<?> getExpectedEvaluationResultType() { return evaluationResultType; } public ExpressionVariable[] getExpressionVariables() { return expressionVariables.toArray(new ExpressionVariable[expressionVariables.size()]); } public boolean isTemplate() { return template; } /** * Configure the evaluationContextType attribute with the value provided. * @param contextType the type of context object the parsed expression will evaluate in * @return this */ public FluentParserContext evaluate(Class<?> contextType) { evaluationContextType = contextType; return this; } /** * Configure the expectedEvaluationResult attribute with the value provided. * @param resultType the type of result object the parsed expression should return when evaluated * @return this */ public FluentParserContext expectResult(Class<?> resultType) { evaluationResultType = resultType; return this; } /** * Add an expression variable that can be referenced by the expression. * @param variable the expression variable * @return this */ public FluentParserContext variable(ExpressionVariable variable) { expressionVariables.add(variable); return this; } /** * Add an array of expression variables that can be referenced by the expression. * @param variables the expression variables * @return this */ public FluentParserContext variables(ExpressionVariable... variables) { expressionVariables.addAll(Arrays.asList(variables)); return this; } /** * Sets a flag indicating the expression to parse is a template. * @return this */ public FluentParserContext template() { template = true; return this; } private void init() { expressionVariables = new ArrayList<ExpressionVariable>(); } }