1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.uif.control;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.kim.api.identity.Person;
20 import org.kuali.rice.kim.api.identity.PersonService;
21 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
22 import org.kuali.rice.krad.uif.field.InputField;
23 import org.kuali.rice.krad.uif.view.View;
24 import org.kuali.rice.krad.uif.component.Component;
25 import org.kuali.rice.krad.uif.component.MethodInvokerConfig;
26 import org.kuali.rice.krad.uif.field.AttributeQuery;
27 import org.kuali.rice.krad.uif.widget.QuickFinder;
28
29
30
31
32
33
34
35 public class UserControl extends TextControl {
36 private static final long serialVersionUID = 7468340793076585869L;
37
38 private String principalIdPropertyName;
39 private String personNamePropertyName;
40 private String personObjectPropertyName;
41
42 public UserControl() {
43 super();
44 }
45
46 @Override
47 public void performApplyModel(View view, Object model, Component parent) {
48 super.performApplyModel(view, model, parent);
49
50 if (!(parent instanceof InputField)) {
51 return;
52 }
53
54 InputField field = (InputField) parent;
55 field.getHiddenPropertyNames().add(principalIdPropertyName);
56
57 if (!field.isReadOnly()) {
58
59 if (StringUtils.isNotBlank(personNamePropertyName)) {
60 field.getInformationalDisplayPropertyNames().add(personNamePropertyName);
61 } else {
62 field.getInformationalDisplayPropertyNames().add(personObjectPropertyName + ".name");
63 }
64
65
66 String idPropertyPath = field.getBindingInfo().getPropertyAdjustedBindingPath(principalIdPropertyName);
67 String onChangeScript = "setValue('" + idPropertyPath + "','');";
68
69 if (StringUtils.isNotBlank(field.getOnChangeScript())) {
70 onChangeScript = field.getOnChangeScript() + onChangeScript;
71 }
72 field.setOnChangeScript(onChangeScript);
73 }
74
75 if (field.isReadOnly() && StringUtils.isBlank(field.getAdditionalDisplayPropertyName())) {
76 if (StringUtils.isNotBlank(personNamePropertyName)) {
77 field.setAdditionalDisplayPropertyName(personNamePropertyName);
78 } else {
79 field.setAdditionalDisplayPropertyName(personObjectPropertyName + ".name");
80 }
81 }
82
83
84 AttributeQuery attributeQuery = new AttributeQuery();
85 MethodInvokerConfig methodInvokerConfig = new MethodInvokerConfig();
86 PersonService personService = KimApiServiceLocator.getPersonService();
87 methodInvokerConfig.setTargetObject(personService);
88 attributeQuery.setQueryMethodInvokerConfig(methodInvokerConfig);
89 attributeQuery.setQueryMethodToCall("getPersonByPrincipalName");
90 attributeQuery.getQueryMethodArgumentFieldList().add(field.getPropertyName());
91 attributeQuery.getReturnFieldMapping().put("principalId", principalIdPropertyName);
92
93 if (StringUtils.isNotBlank(personNamePropertyName)) {
94 attributeQuery.getReturnFieldMapping().put("name", personNamePropertyName);
95 } else {
96 attributeQuery.getReturnFieldMapping().put("name", personObjectPropertyName + ".name");
97 }
98 field.setFieldAttributeQuery(attributeQuery);
99
100
101 QuickFinder quickFinder = field.getFieldLookup();
102 if (quickFinder.isRender()) {
103 if (StringUtils.isBlank(quickFinder.getDataObjectClassName())) {
104 quickFinder.setDataObjectClassName(Person.class.getName());
105 }
106
107 if (quickFinder.getFieldConversions().isEmpty()) {
108 quickFinder.getFieldConversions().put("principalId", principalIdPropertyName);
109
110 if (StringUtils.isNotBlank(personNamePropertyName)) {
111 quickFinder.getFieldConversions().put("name", personNamePropertyName);
112 } else {
113 quickFinder.getFieldConversions().put("name", personObjectPropertyName + ".name");
114 }
115
116 quickFinder.getFieldConversions().put("principalName", field.getPropertyName());
117 }
118 }
119 }
120
121
122
123
124
125
126 public String getPrincipalIdPropertyName() {
127 return principalIdPropertyName;
128 }
129
130
131
132
133
134
135 public void setPrincipalIdPropertyName(String principalIdPropertyName) {
136 this.principalIdPropertyName = principalIdPropertyName;
137 }
138
139
140
141
142
143
144 public String getPersonNamePropertyName() {
145 return personNamePropertyName;
146 }
147
148
149
150
151
152
153 public void setPersonNamePropertyName(String personNamePropertyName) {
154 this.personNamePropertyName = personNamePropertyName;
155 }
156
157
158
159
160
161
162 public String getPersonObjectPropertyName() {
163 return personObjectPropertyName;
164 }
165
166
167
168
169
170
171 public void setPersonObjectPropertyName(String personObjectPropertyName) {
172 this.personObjectPropertyName = personObjectPropertyName;
173 }
174 }