1 /**
2 * Copyright 2005-2012 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.widget;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.krad.uif.view.View;
20 import org.kuali.rice.krad.uif.component.BindingInfo;
21 import org.kuali.rice.krad.uif.component.Component;
22 import org.kuali.rice.krad.uif.field.InputField;
23 import org.kuali.rice.krad.uif.field.AttributeQuery;
24
25 /**
26 * Widget that provides dynamic select options to the user as they
27 * are entering the value (also known as auto-complete)
28 *
29 * <p>
30 * Widget is backed by an <code>AttributeQuery</code> that provides
31 * the configuration for executing a query server side that will retrieve
32 * the valid option values.
33 * </p>
34 *
35 * @author Kuali Rice Team (rice.collab@kuali.org)
36 */
37 public class Suggest extends WidgetBase {
38 private static final long serialVersionUID = 7373706855319347225L;
39
40 private AttributeQuery suggestQuery;
41 private String sourcePropertyName;
42
43 public Suggest() {
44 super();
45 }
46
47 /**
48 * The following actions are performed:
49 *
50 * <ul>
51 * <li>Adjusts the query field mappings on the query based on the binding configuration of the field</li>
52 * <li>TODO: determine query if render is true and query is not set</li>
53 * </ul>
54 *
55 * @see org.kuali.rice.krad.uif.component.ComponentBase#performFinalize(org.kuali.rice.krad.uif.view.View,
56 * java.lang.Object, org.kuali.rice.krad.uif.component.Component)
57 */
58 @Override
59 public void performFinalize(View view, Object model, Component parent) {
60 super.performFinalize(view, model, parent);
61
62 // if source property name set then can't render the Suggest widget
63 if (StringUtils.isBlank(sourcePropertyName)) {
64 setRender(false);
65 }
66
67 if (!isRender()) {
68 return;
69 }
70
71 InputField field = (InputField) parent;
72 BindingInfo bindingInfo = field.getBindingInfo();
73
74 // adjust from side on query field mapping to match parent fields path
75 suggestQuery.updateQueryFieldMapping(bindingInfo);
76 }
77
78 /**
79 * Attribute query instance the will be executed to provide
80 * the suggest options
81 *
82 * @return AttributeQuery
83 */
84 public AttributeQuery getSuggestQuery() {
85 return suggestQuery;
86 }
87
88 /**
89 * Setter for the suggest attribute query
90 *
91 * @param suggestQuery
92 */
93 public void setSuggestQuery(AttributeQuery suggestQuery) {
94 this.suggestQuery = suggestQuery;
95 }
96
97 /**
98 * Name of the property on the query result object that provides
99 * the options for the suggest, values from this field will be
100 * collected and sent back on the result to provide as suggest options
101 *
102 * @return String source property name
103 */
104 public String getSourcePropertyName() {
105 return sourcePropertyName;
106 }
107
108 /**
109 * Setter for the source property name
110 *
111 * @param sourcePropertyName
112 */
113 public void setSourcePropertyName(String sourcePropertyName) {
114 this.sourcePropertyName = sourcePropertyName;
115 }
116 }