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