public class DefaultExpressionEvaluator extends Object implements ExpressionEvaluator
Modifier and Type | Field and Description |
---|---|
protected static org.springframework.expression.ExpressionParser |
parser |
protected static Pattern |
SERVER_EVALUATION_PATTERN |
EMBEDDED_PROPERTY_NAME_ADD_INDICATOR
Constructor and Description |
---|
DefaultExpressionEvaluator()
Default constructor
|
Modifier and Type | Method and Description |
---|---|
protected void |
addCustomFunctions(org.springframework.expression.spel.support.StandardEvaluationContext context)
Registers custom functions for el expressions with the given context
|
boolean |
containsElPlaceholder(String value)
Indicates whether or not the given string contains the el placeholder
(begin and end delimiters)
|
protected void |
evaluateCurrentStack(String stack,
List<String> controlNames)
Used internally by parseExpression to evalute if the current stack is a property
name (ie, will be a control on the form)
|
Object |
evaluateExpression(Map<String,Object> evaluationParameters,
String expressionStr)
Evaluates the given el expression against the content object and
parameters, and returns the result of the evaluation
|
void |
evaluateExpressionsOnConfigurable(View view,
UifDictionaryBean expressionConfigurable,
Map<String,Object> evaluationParameters)
Evaluates any el expressions that are found as a string property value
for the object
|
String |
evaluateExpressionTemplate(Map<String,Object> evaluationParameters,
String expressionTemplate)
Evaluates the given expression template string against the context object
and map of parameters
|
void |
evaluatePropertyExpression(View view,
Map<String,Object> evaluationParameters,
UifDictionaryBean expressionConfigurable,
String propertyName,
boolean removeExpression)
Evaluates the configured expression for the given property name (if not exists) on the given configurable
|
protected void |
evaluatePropertyExpressions(View view,
UifDictionaryBean expressionConfigurable,
Map<String,Object> evaluationParameters)
Iterates through the keys of the property expressions map and invokes
evaluatePropertyExpression(org.kuali.rice.krad.uif.view.View, java.util.Map,
org.kuali.rice.krad.datadictionary.uif.UifDictionaryBean, String, boolean) |
protected void |
evaluatePropertyReplacers(View view,
UifDictionaryBean expressionConfigurable,
Map<String,Object> evaluationParameters)
Iterates through any configured
PropertyReplacer instances for the component and
evaluates the given condition. |
List<String> |
findControlNamesInExpression(String exp)
Find the control names (ie, propertyNames) used in the passed in expression
|
protected static String |
getLinePathPrefixValue(Component component)
Determines the value for the
UifConstants.LINE_PATH_BIND_ADJUST_PREFIX binding prefix
based on collection group found in the component context |
void |
initializeEvaluationContext(Object contextObject)
Initializes the expression context for the given expression context object
|
String |
parseExpression(String exp,
List<String> controlNames,
Map<String,Object> context)
Takes in an expression and a list to be filled in with names(property names)
of controls found in the expression.
|
void |
populatePropertyExpressionsFromGraph(UifDictionaryBean expressionConfigurable,
boolean buildRefreshGraphs)
Pulls expressions within the expressionConfigurable's expression graph and moves them to the property
expressions
map for the expressionConfigurable or a nested expressionConfigurable (for the case of nested expression property
names)
|
String |
replaceBindingPrefixes(View view,
Object object,
String expression)
Adjusts the property expressions for a given object
|
protected org.springframework.expression.Expression |
retrieveCachedExpression(String expressionTemplate)
Attempts to retrieve the
Expression instance for the given expression template, if
not found one is created and added to the cache |
protected static final Pattern SERVER_EVALUATION_PATTERN
protected static org.springframework.expression.ExpressionParser parser
public DefaultExpressionEvaluator()
public void populatePropertyExpressionsFromGraph(UifDictionaryBean expressionConfigurable, boolean buildRefreshGraphs)
Expressions that are configured on properties and pulled out by the org.kuali.rice.krad.uif.util.UifBeanFactoryPostProcessor
and put in the UifDictionaryBean.getExpressionGraph()
for the bean
that is
at root (non nested) level. Before evaluating the expressions, they need to be moved to the
UifDictionaryBean.getPropertyExpressions()
map for the
expressionConfigurable that
property
is on.
populatePropertyExpressionsFromGraph
in interface ExpressionEvaluator
expressionConfigurable
- expressionConfigurable instance to process expressions forbuildRefreshGraphs
- indicates whether the expression graphs for component refresh should be builtpublic String parseExpression(String exp, List<String> controlNames, Map<String,Object> context)
This method returns a js expression which can be executed on the client to determine if the original exp was satisfied before interacting with the server - ie, this js expression is equivalent to the one passed in.
There are limitations on the Spring expression language that can be used as this method. It is only used to parse expressions which are valid case statements for determining if some action/processing should be performed. ONLY Properties, comparison operators, booleans, strings, matches expression, and boolean logic are supported. Server constants and calls will be evaluated early. The isValueEmpty, listContains, and emptyList custom KRAD functions, however, will be converted to a js equivalent function. Properties must be a valid property on the form, and should have a visible control within the view.
Example valid exp: "account.name == 'Account Name'"
parseExpression
in interface ExpressionEvaluator
exp
- the expression to convert to a js conditioncontrolNames
- the list to populate with control names found in the expression (these may later be used
to add js change handlers)public List<String> findControlNamesInExpression(String exp)
findControlNamesInExpression
in interface ExpressionEvaluator
exp
- the expression to searchprotected void evaluateCurrentStack(String stack, List<String> controlNames)
public void initializeEvaluationContext(Object contextObject)
The object given here will form the default context for expression terms (terms without any variable prefix)
initializeEvaluationContext
in interface ExpressionEvaluator
contextObject
- instance of an Objectpublic void evaluateExpressionsOnConfigurable(View view, UifDictionaryBean expressionConfigurable, Map<String,Object> evaluationParameters)
Using reflection the properties for the object are retrieved and if of
String
type the corresponding value is retrieved. If the
value is not empty and contains the el placeholder see
ExpressionEvaluator.containsElPlaceholder(String)
then the expression is evaluated
using the given context object and parameters. The evaluated string is
then set as the new property value, or in the case of a template
(expression contained within a literal string), the expression part is
replaced in the property value.
In addition to evaluating any property expressions, any configured
PropertyReplacer
for the object are also evaluated and if a
match occurs those property replacements are made
evaluateExpressionsOnConfigurable
in interface ExpressionEvaluator
view
- view instance being renderedexpressionConfigurable
- object whose properties should be checked for expressions
and evaluatedevaluationParameters
- map of parameters that may appear in expressions, the map
key gives the parameter name that may appear in the expression, and the map value is the object that expression
should evaluate against when that name is foundpublic Object evaluateExpression(Map<String,Object> evaluationParameters, String expressionStr)
The given expression string is assumed to be one el expression and should not contain the el placeholders. The returned result depends on the evaluation and what type is returns, for instance a boolean will be return for a boolean expression, or a string for string expression
evaluateExpression
in interface ExpressionEvaluator
evaluationParameters
- map of parameters that may appear in expressions, the map
key gives the parameter name that may appear in the expression, and the map value is the object that expression
should evaluate against when that name is foundexpressionStr
- el expression to evaluatepublic String evaluateExpressionTemplate(Map<String,Object> evaluationParameters, String expressionTemplate)
If the template string contains one or more el placeholders (see
ExpressionEvaluator.containsElPlaceholder(String)
), the expression contained within
the placeholder will be evaluated and the corresponding value will be
substituted back into the property value where the placeholder occurred.
If no placeholders are found, the string will be returned unchanged
evaluateExpressionTemplate
in interface ExpressionEvaluator
evaluationParameters
- map of parameters that may appear in expressions, the map
key gives the parameter name that may appear in the expression, and the map value is the object that expression
should evaluate against when that name is foundexpressionTemplate
- string that should be evaluated for el expressionspublic void evaluatePropertyExpression(View view, Map<String,Object> evaluationParameters, UifDictionaryBean expressionConfigurable, String propertyName, boolean removeExpression)
evaluatePropertyExpression
in interface ExpressionEvaluator
view
- view instance the configurable is associated with, used to adjust binding prefixesevaluationParameters
- map that will be exposed as EL parametersexpressionConfigurable
- configurable object to pull and evaluate the expression onpropertyName
- name of the property whose expression should be evaluatedremoveExpression
- boolean that indicates whether the expression should be removed after evaluationpublic boolean containsElPlaceholder(String value)
containsElPlaceholder
in interface ExpressionEvaluator
value
- String to check for contained placeholdersUifConstants.EL_PLACEHOLDER_PREFIX
,
UifConstants.EL_PLACEHOLDER_SUFFIX
public String replaceBindingPrefixes(View view, Object object, String expression)
The UifConstants.NO_BIND_ADJUST_PREFIX
prefix will be removed
as this is a placeholder indicating that the property is directly on the form.
The UifConstants.FIELD_PATH_BIND_ADJUST_PREFIX
prefix will be replaced by
the object's field path - this is only applicable to DataFields. The
UifConstants.DEFAULT_PATH_BIND_ADJUST_PREFIX
prefix will be replaced
by the view's default path if it is set.
replaceBindingPrefixes
in interface ExpressionEvaluator
view
- the parent view of the objectobject
- Object to adjust property expressions onexpression
- The expression to adjustprotected org.springframework.expression.Expression retrieveCachedExpression(String expressionTemplate)
Expression
instance for the given expression template, if
not found one is created and added to the cacheexpressionTemplate
- template string for the expressionprotected void addCustomFunctions(org.springframework.expression.spel.support.StandardEvaluationContext context)
context
- - context instance to register functions toprotected void evaluatePropertyReplacers(View view, UifDictionaryBean expressionConfigurable, Map<String,Object> evaluationParameters)
PropertyReplacer
instances for the component and
evaluates the given condition. If the condition is met, the replacement value is set on the
corresponding propertyview
- - view instance being renderedexpressionConfigurable
- - expressionConfigurable instance with property replacers list,
should be either a component or layout managerevaluationParameters
- - parameters for el evaluationprotected void evaluatePropertyExpressions(View view, UifDictionaryBean expressionConfigurable, Map<String,Object> evaluationParameters)
evaluatePropertyExpression(org.kuali.rice.krad.uif.view.View, java.util.Map,
org.kuali.rice.krad.datadictionary.uif.UifDictionaryBean, String, boolean)
If the expression is an el template (part static text and part expression), only the expression part will be replaced with the result. More than one expressions may be contained within the template
view
- - view instance that is being renderedexpressionConfigurable
- - object instance to evaluate expressions forevaluationParameters
- - map of additional parameters that may be used within the
expressionsprotected static String getLinePathPrefixValue(Component component)
UifConstants.LINE_PATH_BIND_ADJUST_PREFIX
binding prefix
based on collection group found in the component contextcomponent
- - component instance for which the prefix is configured onCopyright © 2005–2015 The Kuali Foundation. All rights reserved.