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.web.struts; 017 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Map; 021 import java.util.Properties; 022 import java.util.Set; 023 024 import javax.servlet.http.HttpServletRequest; 025 import javax.servlet.http.HttpServletResponse; 026 027 import org.apache.commons.lang.StringUtils; 028 import org.apache.struts.action.ActionForm; 029 import org.apache.struts.action.ActionForward; 030 import org.apache.struts.action.ActionMapping; 031 import org.kuali.kfs.module.ar.ArConstants; 032 import org.kuali.kfs.module.ar.web.ui.CustomerInvoiceWriteoffLookupResultRow; 033 import org.kuali.kfs.sys.context.SpringContext; 034 import org.kuali.rice.core.util.RiceConstants; 035 import org.kuali.rice.kns.lookup.LookupResultsService; 036 import org.kuali.rice.kns.lookup.LookupUtils; 037 import org.kuali.rice.kns.util.GlobalVariables; 038 import org.kuali.rice.kns.util.KNSConstants; 039 import org.kuali.rice.kns.util.UrlFactory; 040 import org.kuali.rice.kns.web.struts.action.KualiMultipleValueLookupAction; 041 import org.kuali.rice.kns.web.struts.form.MultipleValueLookupForm; 042 import org.kuali.rice.kns.web.ui.ResultRow; 043 044 public class CustomerInvoiceWriteoffLookupAction extends KualiMultipleValueLookupAction { 045 046 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CustomerInvoiceWriteoffLookupAction.class); 047 048 /** 049 * This method performs the operations necessary for a multiple value lookup to select all of the results and rerender the page 050 * 051 * @param multipleValueLookupForm 052 * @param maxRowsPerPage 053 * @return a list of result rows, used by the UI to render the page 054 */ 055 @Override 056 protected List<ResultRow> selectAll(MultipleValueLookupForm multipleValueLookupForm, int maxRowsPerPage) { 057 String lookupResultsSequenceNumber = multipleValueLookupForm.getLookupResultsSequenceNumber(); 058 059 List<ResultRow> resultTable = null; 060 try { 061 LookupResultsService lookupResultsService = SpringContext.getBean(LookupResultsService.class); 062 resultTable = lookupResultsService.retrieveResultsTable(lookupResultsSequenceNumber, GlobalVariables.getUserSession().getPerson().getPrincipalId()); 063 } 064 catch (Exception e) { 065 LOG.error("error occured trying to export multiple lookup results", e); 066 throw new RuntimeException("error occured trying to export multiple lookup results"); 067 } 068 069 Map<String, String> selectedObjectIds = new HashMap<String, String>(); 070 071 for (ResultRow row : resultTable) { 072 073 // actual object ids are on sub result rows, not on parent rows 074 if (row instanceof CustomerInvoiceWriteoffLookupResultRow) { 075 for (ResultRow subResultRow : ((CustomerInvoiceWriteoffLookupResultRow) row).getSubResultRows()) { 076 String objId = subResultRow.getObjectId(); 077 selectedObjectIds.put(objId, objId); 078 } 079 } 080 else { 081 String objId = row.getObjectId(); 082 selectedObjectIds.put(objId, objId); 083 } 084 } 085 086 multipleValueLookupForm.jumpToPage(multipleValueLookupForm.getViewedPageNumber(), resultTable.size(), maxRowsPerPage); 087 multipleValueLookupForm.setColumnToSortIndex(Integer.parseInt(multipleValueLookupForm.getPreviouslySortedColumnIndex())); 088 multipleValueLookupForm.setCompositeObjectIdMap(selectedObjectIds); 089 090 return resultTable; 091 } 092 093 /** 094 * This method does the processing necessary to return selected results and sends a redirect back to the lookup caller 095 * 096 * @param mapping 097 * @param form must be an instance of MultipleValueLookupForm 098 * @param request 099 * @param response 100 * @return 101 * @throws Exception 102 */ 103 public ActionForward prepareToReturnSelectedResults(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 104 MultipleValueLookupForm multipleValueLookupForm = (MultipleValueLookupForm) form; 105 if (StringUtils.isBlank(multipleValueLookupForm.getLookupResultsSequenceNumber())) { 106 // no search was executed 107 return prepareToReturnNone(mapping, form, request, response); 108 } 109 110 Map<String, String> compositeObjectIdMap = LookupUtils.generateCompositeSelectedObjectIds(multipleValueLookupForm.getPreviouslySelectedObjectIdSet(), multipleValueLookupForm.getDisplayedObjectIdSet(), multipleValueLookupForm.getSelectedObjectIdSet()); 111 Set<String> compositeObjectIds = compositeObjectIdMap.keySet(); 112 113 //TODO need to validate the results 114 boolean success = true; 115 if (success) { 116 117 prepareToReturnSelectedResultBOs(multipleValueLookupForm); 118 119 // build the parameters for the refresh url 120 Properties parameters = new Properties(); 121 parameters.put(KNSConstants.LOOKUP_RESULTS_SEQUENCE_NUMBER, multipleValueLookupForm.getLookupResultsSequenceNumber()); 122 parameters.put(KNSConstants.DISPATCH_REQUEST_PARAMETER, ArConstants.CUSTOMER_INVOICE_WRITEOFF_SUMMARY_ACTION); 123 124 String customerInvoiceWriteoffLookupSummaryUrl = UrlFactory.parameterizeUrl("arCustomerInvoiceWriteoffLookupSummary.do", parameters); 125 return new ActionForward(customerInvoiceWriteoffLookupSummaryUrl, true); 126 127 } 128 else { 129 return mapping.findForward(RiceConstants.MAPPING_BASIC); 130 } 131 } 132 } 133