1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.lookup;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.kew.api.KewApiConstants;
20 import org.kuali.rice.kim.api.KimConstants;
21 import org.kuali.rice.kim.api.identity.Person;
22 import org.kuali.rice.kim.impl.KIMPropertyConstants;
23 import org.kuali.rice.kim.impl.identity.PersonImpl;
24 import org.kuali.rice.kim.util.KimCommonUtilsInternal;
25 import org.kuali.rice.kns.lookup.HtmlData;
26 import org.kuali.rice.kns.web.ui.Field;
27 import org.kuali.rice.kns.web.ui.Row;
28 import org.kuali.rice.krad.bo.BusinessObject;
29 import org.kuali.rice.krad.util.KRADConstants;
30 import org.kuali.rice.krad.util.UrlFactory;
31
32 import java.util.ArrayList;
33 import java.util.Iterator;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.Properties;
37
38
39
40
41
42
43
44 public class PersonLookupableHelperServiceImpl extends KimLookupableHelperServiceImpl {
45
46 private static final long serialVersionUID = 1971744785776844579L;
47
48 @Override
49 public List<? extends BusinessObject> getSearchResults(
50 Map<String, String> fieldValues) {
51 if (fieldValues != null && StringUtils.isNotEmpty(fieldValues.get(KIMPropertyConstants.Person.PRINCIPAL_NAME))) {
52 fieldValues.put(KIMPropertyConstants.Person.PRINCIPAL_NAME, fieldValues.get(KIMPropertyConstants.Person.PRINCIPAL_NAME).toLowerCase());
53 }
54
55 return super.getSearchResults(fieldValues);
56 }
57
58 @SuppressWarnings("unchecked")
59 @Override
60 public List<HtmlData> getCustomActionUrls(BusinessObject bo, List pkNames) {
61 List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>();
62 if(allowsNewOrCopyAction(KimConstants.KimUIConstants.KIM_PERSON_DOCUMENT_TYPE_NAME)){
63 String href = "";
64 Properties parameters = new Properties();
65 parameters.put(KRADConstants.DISPATCH_REQUEST_PARAMETER, KRADConstants.DOC_HANDLER_METHOD);
66 parameters.put(KRADConstants.PARAMETER_COMMAND, KewApiConstants.INITIATE_COMMAND);
67 parameters.put(KRADConstants.DOCUMENT_TYPE_NAME, KimConstants.KimUIConstants.KIM_PERSON_DOCUMENT_TYPE_NAME);
68 parameters.put(KimConstants.PrimaryKeyConstants.PRINCIPAL_ID, ((PersonImpl)bo).getPrincipalId());
69 if (StringUtils.isNotBlank(getReturnLocation())) {
70 parameters.put(KRADConstants.RETURN_LOCATION_PARAMETER, getReturnLocation());
71 }
72 href = UrlFactory.parameterizeUrl(KimCommonUtilsInternal.getKimBasePath()+KimConstants.KimUIConstants.KIM_PERSON_DOCUMENT_ACTION, parameters);
73
74 HtmlData.AnchorHtmlData anchorHtmlData = new HtmlData.AnchorHtmlData(href,
75 KRADConstants.DOC_HANDLER_METHOD, KRADConstants.MAINTENANCE_EDIT_METHOD_TO_CALL);
76
77 anchorHtmlDataList.add(anchorHtmlData);
78 }
79 return anchorHtmlDataList;
80 }
81
82 @Override
83 public HtmlData getInquiryUrl(BusinessObject bo, String propertyName) {
84 HtmlData inqUrl = super.getInquiryUrl(bo, propertyName);
85 Properties parameters = new Properties();
86 parameters.put(KewApiConstants.COMMAND_PARAMETER, KewApiConstants.INITIATE_COMMAND);
87 parameters.put(KRADConstants.DOCUMENT_TYPE_NAME, KimConstants.KimUIConstants.KIM_PERSON_DOCUMENT_TYPE_NAME);
88 parameters.put(KimConstants.PrimaryKeyConstants.PRINCIPAL_ID, ((Person)bo).getPrincipalId());
89 String href = UrlFactory.parameterizeUrl(KimCommonUtilsInternal.getKimBasePath()+ KimConstants.KimUIConstants.KIM_PERSON_INQUIRY_ACTION, parameters);
90 ((HtmlData.AnchorHtmlData)inqUrl).setHref(href);
91 return inqUrl;
92 }
93
94
95
96
97
98
99
100 @Override
101 public List<Row> getRows() {
102 title.remove();
103 List<Row> rows = super.getRows();
104 Iterator<Row> i = rows.iterator();
105 String roleName = null;
106 String namespaceCode = null;
107 while ( i.hasNext() ) {
108 Row row = i.next();
109 int numFieldsRemoved = 0;
110 boolean rowIsBlank = true;
111
112
113 for (Iterator<Field> fieldIter = row.getFields().iterator(); fieldIter.hasNext();) {
114 Field field = fieldIter.next();
115 String propertyName = field.getPropertyName();
116 if ( propertyName.equals("lookupRoleName") ) {
117 Object val = getParameters().get( propertyName );
118 String propVal = null;
119 if ( val != null ) {
120 propVal = (val instanceof String)?(String)val:((String[])val)[0];
121 }
122 if ( StringUtils.isBlank( propVal ) ) {
123 fieldIter.remove();
124 numFieldsRemoved++;
125 } else {
126 field.setReadOnly(true);
127 field.setDefaultValue( propVal );
128 roleName = propVal;
129 rowIsBlank = false;
130 }
131 } else if ( propertyName.equals("lookupRoleNamespaceCode") ) {
132 Object val = getParameters().get( propertyName );
133 String propVal = null;
134 if ( val != null ) {
135 propVal = (val instanceof String)?(String)val:((String[])val)[0];
136 }
137 if ( StringUtils.isBlank( propVal ) ) {
138 fieldIter.remove();
139 numFieldsRemoved++;
140 } else {
141 field.setReadOnly(true);
142 field.setDefaultValue( propVal );
143 namespaceCode = propVal;
144 rowIsBlank = false;
145 }
146 } else if (!Field.BLANK_SPACE.equals(field.getFieldType())) {
147 rowIsBlank = false;
148 }
149 }
150
151 if (numFieldsRemoved > 0) {
152
153 if (rowIsBlank) {
154
155 i.remove();
156 } else {
157
158
159 while (numFieldsRemoved > 0) {
160 Field blankSpace = new Field();
161 blankSpace.setFieldType(Field.BLANK_SPACE);
162 blankSpace.setPropertyName(Field.BLANK_SPACE);
163 row.getFields().add(blankSpace);
164 numFieldsRemoved--;
165 }
166 }
167 }
168 }
169 if ( roleName != null && namespaceCode != null ) {
170 title.set( namespaceCode + " " + roleName + " Lookup" );
171 }
172 return rows;
173 }
174
175 private ThreadLocal<String> title = new ThreadLocal<String>();
176 public String getTitle() {
177 if ( title.get() == null ) {
178 return super.getTitle();
179 }
180 return title.get();
181 }
182 }