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 java.util.ArrayList;
19 import java.util.Iterator;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.Properties;
23
24 import org.apache.commons.lang.StringUtils;
25 import org.kuali.rice.kew.util.KEWConstants;
26 import org.kuali.rice.kim.bo.Person;
27 import org.kuali.rice.kim.bo.impl.PersonImpl;
28 import org.kuali.rice.kim.util.KIMPropertyConstants;
29 import org.kuali.rice.kim.util.KimCommonUtilsInternal;
30 import org.kuali.rice.kim.util.KimConstants;
31 import org.kuali.rice.kns.bo.BusinessObject;
32 import org.kuali.rice.kns.lookup.HtmlData;
33 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData;
34 import org.kuali.rice.kns.util.KNSConstants;
35 import org.kuali.rice.kns.util.UrlFactory;
36 import org.kuali.rice.kns.web.ui.Field;
37 import org.kuali.rice.kns.web.ui.Row;
38
39
40
41
42
43
44
45 public class PersonLookupableHelperServiceImpl extends KimLookupableHelperServiceImpl {
46
47 private static final long serialVersionUID = 1971744785776844579L;
48
49 @Override
50 public List<? extends BusinessObject> getSearchResults(
51 Map<String, String> fieldValues) {
52 if (fieldValues != null && StringUtils.isNotEmpty(fieldValues.get(KIMPropertyConstants.Person.PRINCIPAL_NAME))) {
53 fieldValues.put(KIMPropertyConstants.Person.PRINCIPAL_NAME, fieldValues.get(KIMPropertyConstants.Person.PRINCIPAL_NAME).toLowerCase());
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(KNSConstants.DISPATCH_REQUEST_PARAMETER, KNSConstants.DOC_HANDLER_METHOD);
66 parameters.put(KNSConstants.PARAMETER_COMMAND, KEWConstants.INITIATE_COMMAND);
67 parameters.put(KNSConstants.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(KNSConstants.RETURN_LOCATION_PARAMETER, getReturnLocation());
71 }
72 href = UrlFactory.parameterizeUrl(KimCommonUtilsInternal.getKimBasePath()+KimConstants.KimUIConstants.KIM_PERSON_DOCUMENT_ACTION, parameters);
73
74 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(href,
75 KNSConstants.DOC_HANDLER_METHOD, KNSConstants.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(KEWConstants.COMMAND_PARAMETER, KEWConstants.INITIATE_COMMAND);
87 parameters.put(KNSConstants.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 ((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 }