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.container.View;
23 import org.kuali.rice.krad.uif.core.Component;
24 import org.kuali.rice.krad.uif.core.MethodInvokerConfig;
25 import org.kuali.rice.krad.uif.field.AttributeField;
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
37 private static final long serialVersionUID = 7468340793076585869L;
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 AttributeField)) {
51 return;
52 }
53
54 AttributeField field = (AttributeField) 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 field.setAdditionalDisplayPropertyName(personObjectPropertyName + ".name");
77 }
78
79
80 AttributeQuery attributeQuery = new AttributeQuery();
81 MethodInvokerConfig methodInvokerConfig = new MethodInvokerConfig();
82 PersonService personService = KimApiServiceLocator.getPersonService();
83 methodInvokerConfig.setTargetObject(personService);
84 attributeQuery.setQueryMethodInvokerConfig(methodInvokerConfig);
85 attributeQuery.setQueryMethodToCall("getPersonByPrincipalName");
86 attributeQuery.getQueryMethodArgumentFieldList().add(field.getPropertyName());
87 attributeQuery.getReturnFieldMapping().put("principalId", principalIdPropertyName);
88
89 if (StringUtils.isNotBlank(personNamePropertyName)) {
90 attributeQuery.getReturnFieldMapping().put("name", personNamePropertyName);
91 } else {
92 attributeQuery.getReturnFieldMapping().put("name", personObjectPropertyName + ".name");
93 }
94 field.setFieldAttributeQuery(attributeQuery);
95
96
97 QuickFinder quickFinder = field.getFieldLookup();
98 if (quickFinder.isRender()) {
99 if (StringUtils.isBlank(quickFinder.getDataObjectClassName())) {
100 quickFinder.setDataObjectClassName(Person.class.getName());
101 }
102
103 if (quickFinder.getFieldConversions().isEmpty()) {
104 quickFinder.getFieldConversions().put("principalId", principalIdPropertyName);
105
106 if (StringUtils.isNotBlank(personNamePropertyName)) {
107 quickFinder.getFieldConversions().put("name", personNamePropertyName);
108 } else {
109 quickFinder.getFieldConversions().put("name", personObjectPropertyName + ".name");
110 }
111
112 quickFinder.getFieldConversions().put("principalName", field.getPropertyName());
113 }
114 }
115 }
116
117
118
119
120
121
122 public String getPrincipalIdPropertyName() {
123 return principalIdPropertyName;
124 }
125
126
127
128
129
130
131 public void setPrincipalIdPropertyName(String principalIdPropertyName) {
132 this.principalIdPropertyName = principalIdPropertyName;
133 }
134
135
136
137
138
139
140 public String getPersonNamePropertyName() {
141 return personNamePropertyName;
142 }
143
144
145
146
147
148
149 public void setPersonNamePropertyName(String personNamePropertyName) {
150 this.personNamePropertyName = personNamePropertyName;
151 }
152
153
154
155
156
157
158 public String getPersonObjectPropertyName() {
159 return personObjectPropertyName;
160 }
161
162
163
164
165
166
167 public void setPersonObjectPropertyName(String personObjectPropertyName) {
168 this.personObjectPropertyName = personObjectPropertyName;
169 }
170 }