View Javadoc
1   /**
2    * Copyright 2005-2016 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.datadictionary.uif;
17  
18  import org.kuali.rice.krad.datadictionary.DictionaryBean;
19  import org.kuali.rice.krad.uif.lifecycle.initialize.PopulateComponentFromExpressionGraphTask;
20  import org.kuali.rice.krad.uif.lifecycle.initialize.PopulateReplacersAndModifiersFromExpressionGraphTask;
21  
22  import java.util.Map;
23  
24  /**
25   * Marks any class that can be configured through the UIF dictionary
26   *
27   * <p>
28   * Indicates behavior that must be supported by an Class that can be configured through
29   * the UIF dictionary, such as property expressions.
30   * </p>
31   *
32   * @author Kuali Rice Team (rice.collab@kuali.org)
33   */
34  public interface UifDictionaryBean extends DictionaryBean {
35  
36      /**
37       * Map of expressions that were configured for the object's graph
38       * 
39       * <p>
40       * During processing of the UIF configuration, expressions are pulled out and placed into this
41       * map for the component graph. A component graph contains the component and all one to one
42       * nested components (but not those that are contained in collections, each of these begins
43       * another graph). The expressions are placed at the root component level instead of the actual
44       * nested component for handling of nested property configuration and overridding
45       * </p>
46       * 
47       * <p>
48       * The expression graph map key gives the property name (possibly nested) the expression was
49       * configured on, and the map value gives the expression. During the view lifecycle, see
50       * {@link PopulateComponentFromExpressionGraphTask} and
51       * {@link PopulateReplacersAndModifiersFromExpressionGraphTask}, the expressions are moved to
52       * the {@link #getPropertyExpressions()} map for the configurable they should be evaluated on
53       * </p>
54       * 
55       * @return Map<String, String> map of expressions contained on the configurable graph
56       */
57      public Map<String, String> getExpressionGraph();
58  
59      /**
60       * Setter for the map of expressions contained on the configurable graph
61       *
62       * @param expressionGraph
63       */
64      public void setExpressionGraph(Map<String, String> expressionGraph);
65  
66      /**
67       * Map of expressions that should be evaluated to conditionally set a property on the component
68       *
69       * <p>
70       * When configuring a component property through XML an expression can be given using the @{} placeholder. During
71       * the loading of the XML any such expressions are captured and placed into this Map, with the property they apply
72       * to set as the Map key. The expressions are then evaluated during the apply model phase and the result is set as
73       * the property value.
74       * </p>
75       *
76       * <p>
77       * Note after the expression is picked up, the property configuration is removed. Thus the property in the
78       * component will only have its default object value until the expression is evaluated
79       * </p>
80       *
81       * @return Map<String, String> map of expressions where key is property name and value is expression to evaluate
82       */
83      public Map<String, String> getPropertyExpressions();
84  
85      /**
86       * Setter for the Map of property expressions
87       *
88       * @param propertyExpressions
89       */
90      public void setPropertyExpressions(Map<String, String> propertyExpressions);
91  
92      /**
93       * Returns the expression configured for the property with the given name
94       * @param propertyName property name
95       *
96       * @return String expression for property or null if expression is not configured
97       * @see org.kuali.rice.krad.uif.component.Component#getPropertyExpressions()
98       */
99      public String getPropertyExpression(String propertyName);
100 }