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