001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.module.ar.businessobject.lookup;
017
018 import java.util.Collection;
019 import java.util.Date;
020 import java.util.HashMap;
021 import java.util.Iterator;
022 import java.util.List;
023 import java.util.Map;
024 import java.util.Properties;
025
026 import org.apache.commons.lang.StringUtils;
027 import org.kuali.kfs.module.ar.document.service.CustomerOpenItemReportService;
028 import org.kuali.kfs.sys.KFSConstants;
029 import org.kuali.kfs.sys.context.SpringContext;
030 import org.kuali.rice.kns.bo.BusinessObject;
031 import org.kuali.rice.kns.bo.PersistableBusinessObject;
032 import org.kuali.rice.kns.lookup.CollectionIncomplete;
033 import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl;
034 import org.kuali.rice.kns.service.DataDictionaryService;
035 import org.kuali.rice.kns.service.KualiConfigurationService;
036 import org.kuali.rice.kns.util.KNSConstants;
037 import org.kuali.rice.kns.util.ObjectUtils;
038 import org.kuali.rice.kns.web.comparator.CellComparatorHelper;
039 import org.kuali.rice.kns.web.format.DateFormatter;
040 import org.kuali.rice.kns.web.format.Formatter;
041 import org.kuali.rice.kns.web.struts.form.LookupForm;
042 import org.kuali.rice.kns.web.ui.Column;
043 import org.kuali.rice.kns.web.ui.ResultRow;
044
045 public class CustomerOpenItemReportLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl {
046
047 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CustomerOpenItemReportLookupableHelperServiceImpl.class);
048 private Map fieldConversions;
049 private DataDictionaryService dataDictionaryService;
050
051 /**
052 * Get the search results that meet the input search criteria.
053 *
054 * @param fieldValues - Map containing prop name keys and search values
055 * @return a List of found business objects
056 */
057 @Override
058 public List getSearchResults(Map fieldValues) {
059 List results;
060 LOG.debug("\n\n\n\n *********************** getSearchResults() started\n");
061
062 setBackLocation((String) fieldValues.get(KFSConstants.BACK_LOCATION));
063 setDocFormKey((String) fieldValues.get(KFSConstants.DOC_FORM_KEY));
064
065 /*
066 String customerNumber = ((String[]) getParameters().get(KFSConstants.CustomerOpenItemReport.CUSTOMER_NUMBER))[0];
067 List results = SpringContext.getBean(CustomerOpenItemReportService.class).getPopulatedReportDetails(customerNumber);
068 */
069 String reportName =((String[]) getParameters().get(KFSConstants.CustomerOpenItemReport.REPORT_NAME))[0];
070 if (StringUtils.equals(reportName, KFSConstants.CustomerOpenItemReport.HISTORY_REPORT_NAME)) {
071 String customerNumber = ((String[]) getParameters().get(KFSConstants.CustomerOpenItemReport.CUSTOMER_NUMBER))[0];
072 results = SpringContext.getBean(CustomerOpenItemReportService.class).getPopulatedReportDetails(customerNumber);
073 } else {
074 results = SpringContext.getBean(CustomerOpenItemReportService.class).getPopulatedReportDetails(getParameters());
075 }
076 LOG.info("\t\t sending results back... \n\n\n");
077 return new CollectionIncomplete(results, new Long(results.size()));
078 }
079
080 /**
081 * @return a List of the names of fields which are marked in data dictionary as return fields.
082 */
083 /*
084 @Override
085 public List getReturnKeys() {
086 List returnKeys;
087 returnKeys = new ArrayList(fieldConversions.keySet());
088 LOG.info("\n\n\t\t THIS OVERRIDE IS WORKING (GETRETURNKEYS)... \n\n\n");
089
090 return returnKeys;
091 }
092 */
093
094 /**
095 * @return a List of the names of fields which are marked in data dictionary as return fields.
096 */
097 @Override
098 protected Properties getParameters(BusinessObject bo, Map fieldConversions, String lookupImpl, List pkNames) {
099 Properties parameters = new Properties();
100 parameters.put(KNSConstants.DISPATCH_REQUEST_PARAMETER, KNSConstants.RETURN_METHOD_TO_CALL);
101 parameters.put(KNSConstants.DOC_FORM_KEY, getDocFormKey());
102 parameters.put(KNSConstants.REFRESH_CALLER, lookupImpl);
103 if (getReferencesToRefresh() != null) {
104 parameters.put(KNSConstants.REFERENCES_TO_REFRESH, getReferencesToRefresh());
105 }
106
107 String encryptedList = "";
108
109 Iterator returnKeys = getReturnKeys().iterator();
110 while (returnKeys.hasNext()) {
111 String fieldNm = (String) returnKeys.next();
112
113 Object fieldVal = ObjectUtils.getPropertyValue(bo, fieldNm);
114 if (fieldVal == null) {
115 fieldVal = KNSConstants.EMPTY_STRING;
116 }
117
118 // Encrypt value if it is a secure field
119 // TODO: revisit authorization checks in this class
120
121 if (fieldConversions.containsKey(fieldNm)) {
122 fieldNm = (String) fieldConversions.get(fieldNm);
123 }
124
125 // need to format date in url
126 if (fieldVal instanceof Date) {
127 DateFormatter dateFormatter = new DateFormatter();
128 fieldVal = dateFormatter.format(fieldVal);
129 }
130
131 parameters.put(fieldNm, fieldVal.toString());
132 }
133
134 return parameters;
135 }
136
137 /**
138 * This method performs the lookup and returns a collection of lookup items
139 *
140 * @param lookupForm
141 * @param kualiLookupable
142 * @param resultTable
143 * @param bounded
144 * @return
145 */
146 @Override
147 public Collection performLookup(LookupForm lookupForm, Collection resultTable, boolean bounded) {
148 Collection displayList;
149 LOG.info("\n\n\t\t THIS OVERRIDE IS WORKING (performLookup)... \n\n\n");
150 // call search method to get results
151 if (bounded) {
152 displayList = getSearchResults(lookupForm.getFieldsForLookup());
153 }
154 else {
155 displayList = getSearchResultsUnbounded(lookupForm.getFieldsForLookup());
156 }
157 // MJM get resultTable populated here
158
159 HashMap<String, Class> propertyTypes = new HashMap<String, Class>();
160
161 boolean hasReturnableRow = false;
162
163 // iterate through result list and wrap rows with return url and action urls
164 for (Iterator iter = displayList.iterator(); iter.hasNext();) {
165 BusinessObject element = (BusinessObject) iter.next();
166
167 // String returnUrl = getReturnUrl(element, lookupForm.getFieldConversions(),
168 // lookupForm.getLookupableImplServiceName());
169 // String actionUrls = getActionUrls(element);
170 String returnUrl = "www.bigfrickenRETURNurl";
171 String actionUrls = "www.someACTIONurl";
172
173 List<Column> columns = getColumns();
174 for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
175
176 Column col = (Column) iterator.next();
177 Formatter formatter = col.getFormatter();
178
179 // pick off result column from result list, do formatting
180 String propValue = KNSConstants.EMPTY_STRING;
181 Object prop = ObjectUtils.getPropertyValue(element, col.getPropertyName());
182
183 // formatters
184 if (prop != null) {
185 // for Dates, always use DateFormatter
186 if (prop instanceof Date)
187 formatter = new DateFormatter();
188
189 if (formatter != null)
190 propValue = (String) formatter.format(prop);
191 else
192 propValue = prop.toString();
193 }
194
195 // comparator
196 Class propClass = propertyTypes.get(col.getPropertyName());
197 col.setComparator(CellComparatorHelper.getAppropriateComparatorForPropertyClass(propClass));
198 col.setValueComparator(CellComparatorHelper.getAppropriateValueComparatorForPropertyClass(propClass));
199
200 col.setPropertyValue(propValue);
201
202 if (StringUtils.isNotBlank(propValue)) {
203 if (StringUtils.equals(KFSConstants.CustomerOpenItemReport.DOCUMENT_NUMBER, col.getPropertyName())) {
204 String propertyURL = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.WORKFLOW_URL_KEY) + "/DocHandler.do?docId=" + propValue + "&command=displayDocSearchView";
205 col.setPropertyURL(propertyURL);
206 } else col.setPropertyURL("");
207 }
208 }
209
210 ResultRow row = new ResultRow(columns, returnUrl, actionUrls);
211 if (element instanceof PersistableBusinessObject)
212 row.setObjectId(((PersistableBusinessObject) element).getObjectId());
213
214 boolean rowReturnable = isResultReturnable(element);
215 row.setRowReturnable(rowReturnable);
216 if (rowReturnable)
217 hasReturnableRow = true;
218
219 resultTable.add(row);
220 }
221 lookupForm.setHasReturnableRow(hasReturnableRow);
222
223 return displayList;
224 }
225
226 }
227