View Javadoc

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.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   * Represents a user control, which is a special control to handle
31   * the input of a Person
32   *
33   * @author Kuali Rice Team (rice.collab@kuali.org)
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              // add information fields
59              if (StringUtils.isNotBlank(personNamePropertyName)) {
60                  field.getInformationalDisplayPropertyNames().add(personNamePropertyName);
61              } else {
62                  field.getInformationalDisplayPropertyNames().add(personObjectPropertyName + ".name");
63              }
64  
65              // setup script to clear id field when name is modified
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          // setup field query for displaying name
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         // setup field lookup
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      * The name of the property on the parent object that holds the principal id
123      *
124      * @return String principalIdPropertyName
125      */
126     public String getPrincipalIdPropertyName() {
127         return principalIdPropertyName;
128     }
129 
130     /**
131      * Setter for the name of the property on the parent object that holds the principal id
132      *
133      * @param principalIdPropertyName
134      */
135     public void setPrincipalIdPropertyName(String principalIdPropertyName) {
136         this.principalIdPropertyName = principalIdPropertyName;
137     }
138 
139     /**
140      * The name of the property on the parent object that holds the person name
141      *
142      * @return String personNamePropertyName
143      */
144     public String getPersonNamePropertyName() {
145         return personNamePropertyName;
146     }
147 
148     /**
149      * Setter for the name of the property on the parent object that holds the person name
150      *
151      * @param personNamePropertyName
152      */
153     public void setPersonNamePropertyName(String personNamePropertyName) {
154         this.personNamePropertyName = personNamePropertyName;
155     }
156 
157     /**
158      * The name of the property on the parent object that holds the person object
159      *
160      * @return String personObjectPropertyName
161      */
162     public String getPersonObjectPropertyName() {
163         return personObjectPropertyName;
164     }
165 
166     /**
167      * Setter for the name of the property on the parent object that holds the person object
168      *
169      * @param personObjectPropertyName
170      */
171     public void setPersonObjectPropertyName(String personObjectPropertyName) {
172         this.personObjectPropertyName = personObjectPropertyName;
173     }
174 }