View Javadoc

1   /**
2    * Copyright 2005-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.krad.uif.service;
17  
18  import java.util.Map;
19  
20  /**
21   * Provides evaluation of expression language statements against a given context
22   *
23   * <p>
24   * Used within the UI framework to allow conditional logic to be configured through
25   * the XML which can alter the values of component properties
26   * </p>
27   * 
28   * @author Kuali Rice Team (rice.collab@kuali.org)
29   */
30  public interface ExpressionEvaluatorService {
31  
32      /**
33       * Evaluates any el expressions that are found as a string property value
34       * for the object
35       * 
36       * <p>
37       * Using reflection the properties for the object are retrieved and if of
38       * <code>String</code> type the corresponding value is retrieved. If the
39       * value is not empty and contains the el placeholder see
40       * {@link #containsElPlaceholder(String)} then the expression is evaluated
41       * using the given context object and parameters. The evaluated string is
42       * then set as the new property value, or in the case of a template
43       * (expression contained within a literal string), the expression part is
44       * replaced in the property value.
45       * </p>
46       * 
47       * <p>
48       * In addition to evaluating any property expressions, any configured
49       * <code>PropertyReplacer</code> for the object are also evaluated and if a
50       * match occurs those property replacements are made
51       * </p>
52       * 
53       * @param object
54       *            - object whose properties should be checked for expressions
55       *            and evaluated
56       * @param contextObject
57       *            - context object for the expression evaluations
58       * @param evaluationParameters
59       *            - map of parameters that may appear in expressions, the map
60       *            key gives the parameter name that may appear in the
61       *            expression, and the map value is the object that expression
62       *            should evaluate against when that name is found
63       */
64      public void evaluateObjectExpressions(Object object, Object contextObject, Map<String, Object> evaluationParameters);
65  
66      /**
67       * Evaluates the given expression template string against the context object
68       * and map of parameters
69       * 
70       * <p>
71       * If the template string contains one or more el placeholders (see
72       * {@link #containsElPlaceholder(String)}), the expression contained within
73       * the placeholder will be evaluated and the corresponding value will be
74       * substituted back into the property value where the placeholder occurred.
75       * If no placeholders are found, the string will be returned unchanged
76       * </p>
77       * 
78       * @param contextObject
79       *            - context object for the expression evaluations
80       * @param evaluationParameters
81       *            - map of parameters that may appear in expressions, the map
82       *            key gives the parameter name that may appear in the
83       *            expression, and the map value is the object that expression
84       *            should evaluate against when that name is found
85       * @param expressionTemplate
86       *            - string that should be evaluated for el expressions
87       * @return String formed by replacing any el expressions in the original
88       *         expression template with their corresponding evaluation results
89       */
90      public String evaluateExpressionTemplate(Object contextObject, Map<String, Object> evaluationParameters,
91              String expressionTemplate);
92  
93      /**
94       * Evaluates the given el expression against the content object and
95       * parameters, and returns the result of the evaluation
96       * 
97       * <p>
98       * The given expression string is assumed to be one el expression and should
99       * not contain the el placeholders. The returned result depends on the
100      * evaluation and what type is returns, for instance a boolean will be
101      * return for a boolean expression, or a string for string expression
102      * </p>
103      * 
104      * @param contextObject
105      *            - context object for the expression evaluations
106      * @param evaluationParameters
107      *            - map of parameters that may appear in expressions, the map
108      *            key gives the parameter name that may appear in the
109      *            expression, and the map value is the object that expression
110      *            should evaluate against when that name is found
111      * @param expression
112      *            - el expression to evaluate
113      * @return Object result of the expression evaluation
114      */
115     public Object evaluateExpression(Object contextObject, Map<String, Object> evaluationParameters, String expression);
116 
117     /**
118      * Indicates whether or not the given string contains the el placholder
119      * (begin and end delimiters)
120      * 
121      * @param value
122      *            - String to check for contained placeholders
123      * @return boolean true if the string contains one or more placeholders,
124      *         false if it contains none
125      * @see org.kuali.rice.krad.uif.UifConstants.EL_PLACEHOLDER_PREFIX
126      * @see org.kuali.rice.krad.uif.UifConstants.EL_PLACEHOLDER_SUFFIX
127      */
128     public boolean containsElPlaceholder(String value);
129 }