001 /** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.service; 017 018 import java.util.Map; 019 020 /** 021 * Provides evaluation of expression language statements against a given context 022 * 023 * <p> 024 * Used within the UI framework to allow conditional logic to be configured through 025 * the XML which can alter the values of component properties 026 * </p> 027 * 028 * @author Kuali Rice Team (rice.collab@kuali.org) 029 */ 030 public interface ExpressionEvaluatorService { 031 032 /** 033 * Evaluates any el expressions that are found as a string property value 034 * for the object 035 * 036 * <p> 037 * Using reflection the properties for the object are retrieved and if of 038 * <code>String</code> type the corresponding value is retrieved. If the 039 * value is not empty and contains the el placeholder see 040 * {@link #containsElPlaceholder(String)} then the expression is evaluated 041 * using the given context object and parameters. The evaluated string is 042 * then set as the new property value, or in the case of a template 043 * (expression contained within a literal string), the expression part is 044 * replaced in the property value. 045 * </p> 046 * 047 * <p> 048 * In addition to evaluating any property expressions, any configured 049 * <code>PropertyReplacer</code> for the object are also evaluated and if a 050 * match occurs those property replacements are made 051 * </p> 052 * 053 * @param object 054 * - object whose properties should be checked for expressions 055 * and evaluated 056 * @param contextObject 057 * - context object for the expression evaluations 058 * @param evaluationParameters 059 * - map of parameters that may appear in expressions, the map 060 * key gives the parameter name that may appear in the 061 * expression, and the map value is the object that expression 062 * should evaluate against when that name is found 063 */ 064 public void evaluateObjectExpressions(Object object, Object contextObject, Map<String, Object> evaluationParameters); 065 066 /** 067 * Evaluates the given expression template string against the context object 068 * and map of parameters 069 * 070 * <p> 071 * If the template string contains one or more el placeholders (see 072 * {@link #containsElPlaceholder(String)}), the expression contained within 073 * the placeholder will be evaluated and the corresponding value will be 074 * substituted back into the property value where the placeholder occurred. 075 * If no placeholders are found, the string will be returned unchanged 076 * </p> 077 * 078 * @param contextObject 079 * - context object for the expression evaluations 080 * @param evaluationParameters 081 * - map of parameters that may appear in expressions, the map 082 * key gives the parameter name that may appear in the 083 * expression, and the map value is the object that expression 084 * should evaluate against when that name is found 085 * @param expressionTemplate 086 * - string that should be evaluated for el expressions 087 * @return String formed by replacing any el expressions in the original 088 * expression template with their corresponding evaluation results 089 */ 090 public String evaluateExpressionTemplate(Object contextObject, Map<String, Object> evaluationParameters, 091 String expressionTemplate); 092 093 /** 094 * Evaluates the given el expression against the content object and 095 * parameters, and returns the result of the evaluation 096 * 097 * <p> 098 * The given expression string is assumed to be one el expression and should 099 * 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 }