001/* 002 * Copyright 2007 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 */ 016package org.kuali.ole.sys.web.struts; 017 018import java.util.Properties; 019 020import javax.servlet.http.HttpServletRequest; 021import javax.servlet.http.HttpServletResponse; 022 023import org.apache.commons.lang.StringUtils; 024import org.apache.struts.action.ActionForm; 025import org.apache.struts.action.ActionForward; 026import org.apache.struts.action.ActionMapping; 027import org.kuali.ole.sys.OLEConstants; 028import org.kuali.rice.kns.web.struts.action.KualiAction; 029import org.kuali.rice.kns.web.struts.form.KualiForm; 030import org.kuali.rice.krad.util.GlobalVariables; 031import org.kuali.rice.krad.util.UrlFactory; 032 033/** 034 * This class handles Actions for the balance inquiry report menu 035 */ 036public class KualiBalanceInquiryReportMenuAction extends KualiAction { 037 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(KualiBalanceInquiryReportMenuAction.class); 038 039 /** 040 * Entry point to balance inquiry menu, forwards to jsp for rendering. 041 * 042 * @param mapping 043 * @param form 044 * @param request 045 * @param response 046 * @return ActionForward 047 * @throws Exception 048 */ 049 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 050 return mapping.findForward(OLEConstants.MAPPING_BASIC); 051 } 052 053 /** 054 * Returns back to calling document. 055 * 056 * @param mapping 057 * @param form 058 * @param request 059 * @param response 060 * @return ActionForward 061 * @throws Exception 062 */ 063 public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 064 KualiBalanceInquiryReportMenuForm balanceInquiryReportMenuForm = (KualiBalanceInquiryReportMenuForm) form; 065 066 String backUrl = balanceInquiryReportMenuForm.getBackLocation() + "?methodToCall=refresh&docFormKey=" + balanceInquiryReportMenuForm.getDocFormKey(); 067 return new ActionForward(backUrl, true); 068 } 069 070 /** 071 * Needs to overrided to inject the real value into the docFormKey b/c otherwise the lookup's refresh back to this menu 072 * overwrites the original value that we actually need. It too leverages the docFormKey. 073 * 074 * @param mapping 075 * @param form 076 * @param request 077 * @param response 078 * @return ActionForward 079 * @throws Exception 080 */ 081 public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 082 KualiBalanceInquiryReportMenuForm balanceInquiryReportMenuForm = (KualiBalanceInquiryReportMenuForm) form; 083 084 // need to inject the real value into the docFormKey b/c otherwise the lookup's refresh back to this menu overwrites 085 // the original value that we actually need. 086 balanceInquiryReportMenuForm.setDocFormKey(balanceInquiryReportMenuForm.getBalanceInquiryReportMenuCallerDocFormKey()); 087 088 return mapping.findForward(OLEConstants.MAPPING_BASIC); 089 } 090 091 /** 092 * Takes care of storing the action form in the user session and forwarding to the balance inquiry lookup action. 093 * 094 * @param mapping 095 * @param form 096 * @param request 097 * @param response 098 * @return ActionForward 099 * @throws Exception 100 */ 101 public ActionForward performBalanceInquiryLookup(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 102 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); 103 104 // parse out the important strings from our methodToCall parameter 105 String fullParameter = (String) request.getAttribute(OLEConstants.METHOD_TO_CALL_ATTRIBUTE); 106 107 // parse out business object class name for lookup 108 String boClassName = StringUtils.substringBetween(fullParameter, OLEConstants.METHOD_TO_CALL_BOPARM_LEFT_DEL, OLEConstants.METHOD_TO_CALL_BOPARM_RIGHT_DEL); 109 if (StringUtils.isBlank(boClassName)) { 110 throw new RuntimeException("Illegal call to perform lookup, no business object class name specified."); 111 } 112 113 // build the parameters for the lookup url 114 Properties parameters = new Properties(); 115 String conversionFields = StringUtils.substringBetween(fullParameter, OLEConstants.METHOD_TO_CALL_PARM1_LEFT_DEL, OLEConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL); 116 if (StringUtils.isNotBlank(conversionFields)) { 117 parameters.put(OLEConstants.CONVERSION_FIELDS_PARAMETER, conversionFields); 118 } 119 120 // pass values from form that should be pre-populated on lookup search 121 String parameterFields = StringUtils.substringBetween(fullParameter, OLEConstants.METHOD_TO_CALL_PARM2_LEFT_DEL, OLEConstants.METHOD_TO_CALL_PARM2_RIGHT_DEL); 122 if (StringUtils.isNotBlank(parameterFields)) { 123 String[] lookupParams = parameterFields.split(OLEConstants.FIELD_CONVERSIONS_SEPERATOR); 124 125 for (int i = 0; i < lookupParams.length; i++) { 126 String[] keyValue = lookupParams[i].split(OLEConstants.FIELD_CONVERSION_PAIR_SEPERATOR); 127 128 // hard-coded passed value 129 if (StringUtils.contains(keyValue[0], "'")) { 130 parameters.put(keyValue[1], StringUtils.replace(keyValue[0], "'", "")); 131 } 132 // passed value should come from property 133 else if (StringUtils.isNotBlank(request.getParameter(keyValue[0]))) { 134 parameters.put(keyValue[1], request.getParameter(keyValue[0])); 135 } 136 } 137 } 138 139 // grab whether or not the "return value" link should be hidden or not 140 String hideReturnLink = StringUtils.substringBetween(fullParameter, OLEConstants.METHOD_TO_CALL_PARM3_LEFT_DEL, OLEConstants.METHOD_TO_CALL_PARM3_RIGHT_DEL); 141 if (StringUtils.isNotBlank(hideReturnLink)) { 142 parameters.put(OLEConstants.HIDE_LOOKUP_RETURN_LINK, hideReturnLink); 143 } 144 145 // anchor, if it exists 146 if (form instanceof KualiForm && StringUtils.isNotEmpty(((KualiForm) form).getAnchor())) { 147 parameters.put(OLEConstants.LOOKUP_ANCHOR, ((KualiForm) form).getAnchor()); 148 } 149 150 // determine what the action path is 151 String actionPath = StringUtils.substringBetween(fullParameter, OLEConstants.METHOD_TO_CALL_PARM4_LEFT_DEL, OLEConstants.METHOD_TO_CALL_PARM4_RIGHT_DEL); 152 if (StringUtils.isBlank(actionPath)) { 153 throw new IllegalStateException("The \"actionPath\" attribute is an expected parameter for the <gl:balanceInquiryLookup> tag - it " + "should never be blank."); 154 } 155 156 // now add required parameters 157 parameters.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, "start"); 158 parameters.put(OLEConstants.DOC_FORM_KEY, GlobalVariables.getUserSession().addObjectWithGeneratedKey(form)); 159 parameters.put(OLEConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, boClassName); 160 parameters.put(OLEConstants.RETURN_LOCATION_PARAMETER, basePath + mapping.getPath() + ".do"); 161 162 String lookupUrl = UrlFactory.parameterizeUrl(basePath + "/" + actionPath, parameters); 163 164 return new ActionForward(lookupUrl, true); 165 } 166}