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.pdp.web.struts; 017 018 import java.text.MessageFormat; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 import java.util.Properties; 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.pdp.PdpKeyConstants; 032 import org.kuali.kfs.pdp.PdpParameterConstants; 033 import org.kuali.kfs.pdp.PdpPropertyConstants; 034 import org.kuali.kfs.pdp.businessobject.PaymentDetail; 035 import org.kuali.kfs.pdp.service.PaymentMaintenanceService; 036 import org.kuali.kfs.pdp.util.PdpPaymentDetailQuestionCallback; 037 import org.kuali.kfs.sys.KFSConstants; 038 import org.kuali.kfs.sys.context.SpringContext; 039 import org.kuali.rice.kim.bo.Person; 040 import org.kuali.rice.kns.question.ConfirmationQuestion; 041 import org.kuali.rice.kns.service.BusinessObjectService; 042 import org.kuali.rice.kns.service.KNSServiceLocator; 043 import org.kuali.rice.kns.service.KualiConfigurationService; 044 import org.kuali.rice.kns.util.ErrorMessage; 045 import org.kuali.rice.kns.util.GlobalVariables; 046 import org.kuali.rice.kns.util.KNSConstants; 047 import org.kuali.rice.kns.util.MessageMap; 048 import org.kuali.rice.kns.util.ObjectUtils; 049 import org.kuali.rice.kns.util.UrlFactory; 050 import org.kuali.rice.kns.web.struts.action.KualiAction; 051 052 /** 053 * This class defines actions for Payment 054 */ 055 public class PaymentDetailAction extends KualiAction { 056 057 private PaymentMaintenanceService paymentMaintenanceService; 058 private BusinessObjectService businessObjectService; 059 060 /** 061 * Constructs a PaymentDetailAction.java. 062 */ 063 public PaymentDetailAction() { 064 setPaymentMaintenanceService(SpringContext.getBean(PaymentMaintenanceService.class)); 065 setBusinessObjectService(SpringContext.getBean(BusinessObjectService.class)); 066 067 } 068 069 /** 070 * This method confirms and cancels a payment. 071 * @param mapping 072 * @param form 073 * @param request 074 * @param response 075 * @return 076 * @throws Exception 077 */ 078 public ActionForward confirmAndCancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 079 080 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 081 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 082 return performCancel( paymentDetailId, changeText, user); 083 } 084 }; 085 086 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.PAYMENT_SUCCESSFULLY_CANCELED, "confirmAndCancel", callback); 087 } 088 089 /** 090 * This method cancels a payment. 091 * @param paymentDetailId the payment detail id. 092 * @param changeText the text of the change 093 * @param user the user that perfomed the change 094 * @return true if payment successfully canceled, false otherwise 095 */ 096 private boolean performCancel(int paymentDetailId, String changeText, Person user) { 097 098 Map keyMap = new HashMap(); 099 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 100 101 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap); 102 if (ObjectUtils.isNotNull(paymentDetail)) { 103 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue(); 104 return paymentMaintenanceService.cancelPendingPayment(paymentGroupId, paymentDetailId, changeText, user); 105 } 106 else { 107 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND); 108 return false; 109 } 110 } 111 112 /** 113 * This method confirms and holds a payment 114 * 115 * @param mapping 116 * @param form 117 * @param request 118 * @param response 119 * @return 120 * @throws Exception 121 */ 122 public ActionForward confirmAndHold(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 123 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 124 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 125 return performHold( paymentDetailId, changeText, user); 126 } 127 }; 128 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.HOLD_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.HOLD_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.PAYMENT_SUCCESSFULLY_HOLD, "confirmAndHold", callback); 129 } 130 131 /** 132 133 */ 134 /** 135 * This method performs a hold on a payment. 136 * @param paymentDetailId the payment detail id 137 * @param changeText the text of the user change 138 * @param user the user that performed the change 139 * @return true if payment successfully held, false otherwise 140 */ 141 private boolean performHold(int paymentDetailId, String changeText, Person user) { 142 143 Map keyMap = new HashMap(); 144 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 145 146 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap); 147 if (ObjectUtils.isNotNull(paymentDetail)) { 148 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue(); 149 return paymentMaintenanceService.holdPendingPayment(paymentGroupId, changeText, user); 150 } 151 else { 152 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND); 153 return false; 154 } 155 } 156 157 /** 158 * This method confirms and removes a hold on a payment. 159 * 160 * @param mapping 161 * @param form 162 * @param request 163 * @param response 164 * @return an ActionForward 165 * @throws Exception 166 */ 167 public ActionForward confirmAndRemoveHold(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 168 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 169 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 170 return performRemoveHold( paymentDetailId, changeText, user); 171 } 172 }; 173 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.REMOVE_HOLD_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.REMOVE_HOLD_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.HOLD_SUCCESSFULLY_REMOVED_ON_PAYMENT, "confirmAndRemoveHold", callback); 174 } 175 176 /** 177 * This method removes a hold on payment. 178 * @param paymentDetailId the payment detail id 179 * @param changeText the text of the user change 180 * @param user the user that performs the change 181 * @return true if hold successfully removed from payment, false otherwise 182 */ 183 private boolean performRemoveHold(int paymentDetailId, String changeText, Person user) { 184 185 Map keyMap = new HashMap(); 186 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 187 188 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap); 189 if (ObjectUtils.isNotNull(paymentDetail)) { 190 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue(); 191 return paymentMaintenanceService.removeHoldPendingPayment(paymentGroupId, changeText, user); 192 } 193 else { 194 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND); 195 return false; 196 } 197 } 198 199 /** 200 * This method confirms and sets the immediate flag. 201 * @param mapping 202 * @param form 203 * @param request 204 * @param response 205 * @return an ActionForward 206 * @throws Exception 207 */ 208 public ActionForward confirmAndSetImmediate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 209 210 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 211 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 212 return performSetImmediate(paymentDetailId, changeText, user); 213 214 } 215 }; 216 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.PAYMENT_SUCCESSFULLY_SET_AS_IMMEDIATE, "confirmAndSetImmediate", callback); 217 } 218 219 /** 220 * This method sets the immediate flag 221 * @param paymentDetailId the payment detail id 222 * @param changeText the text of the change 223 * @param user the user that performed the change 224 * @return true if flag successfully set on payment, false otherwise 225 */ 226 private boolean performSetImmediate(int paymentDetailId, String changeText, Person user) { 227 Map keyMap = new HashMap(); 228 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 229 230 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap); 231 if (ObjectUtils.isNotNull(paymentDetail)) { 232 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue(); 233 paymentMaintenanceService.changeImmediateFlag(paymentGroupId, changeText, user); 234 return true; 235 } 236 else { 237 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND); 238 return false; 239 } 240 241 } 242 243 /** 244 * This method confirms and removes the immediate flag. 245 * @param mapping 246 * @param form 247 * @param request 248 * @param response 249 * @return 250 * @throws Exception 251 */ 252 public ActionForward confirmAndRemoveImmediate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 253 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 254 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 255 return performSetImmediate(paymentDetailId, changeText, user); 256 257 } 258 }; 259 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.IMMEDIATE_SUCCESSFULLY_REMOVED_ON_PAYMENT, "confirmAndRemoveImmediate", callback); 260 } 261 262 /** 263 * This method confirms and cancels a disbursement. 264 * @param mapping 265 * @param form 266 * @param request 267 * @param response 268 * @return an ActionForward 269 * @throws Exception 270 */ 271 public ActionForward confirmAndCancelDisbursement(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 272 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 273 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 274 return performCancelDisbursement( paymentDetailId, changeText, user); 275 } 276 }; 277 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_DISBURSEMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_DISBURSEMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.DISBURSEMENT_SUCCESSFULLY_CANCELED, "confirmAndRemoveHold", callback); 278 } 279 280 /** 281 * This method cancels a disbursement 282 * @param paymentDetailId the payment detail id 283 * @param changeText the text entered by user 284 * @param user the user that canceled the disbursement 285 * @return true if disbursement successfully canceled, false otherwise 286 */ 287 private boolean performCancelDisbursement(int paymentDetailId, String changeText, Person user) { 288 Map keyMap = new HashMap(); 289 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 290 291 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap); 292 if (ObjectUtils.isNotNull(paymentDetail)) { 293 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue(); 294 return paymentMaintenanceService.cancelDisbursement(paymentGroupId, paymentDetailId, changeText, user); 295 } 296 else { 297 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND); 298 return false; 299 } 300 } 301 302 /** 303 * This method confirms an reissues/cancels a disbursement. 304 * @param mapping 305 * @param form 306 * @param request 307 * @param response 308 * @return 309 * @throws Exception 310 */ 311 public ActionForward confirmAndReIssueCancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 312 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() { 313 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) { 314 return performReIssueDisbursement( paymentDetailId, changeText, user); 315 } 316 }; 317 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_REISSUE_DISBURSEMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_REISSUE_DISBURSEMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.DISBURSEMENT_SUCCESSFULLY_CANCELED, "confirmAndReissueCancel", callback); 318 } 319 320 /** 321 * This method reissue/cancels a disbursement 322 * @param paymentDetailId the payment detail id 323 * @param changeText the text entered by the user 324 * @param user the user that canceled the disbursement 325 * @return true if disbursement successfully reissued/canceled, false otherwise 326 */ 327 private boolean performReIssueDisbursement(int paymentDetailId, String changeText, Person user) { 328 Map keyMap = new HashMap(); 329 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 330 331 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap); 332 if (ObjectUtils.isNotNull(paymentDetail)) { 333 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue(); 334 return paymentMaintenanceService.cancelReissueDisbursement(paymentGroupId, changeText, user); 335 } 336 else { 337 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND); 338 return false; 339 } 340 } 341 342 /** 343 * This method prompts for a reason to perform an action on a payment detail. 344 * 345 * @param mapping 346 * @param form 347 * @param request 348 * @param response 349 * @param confirmationQuestion 350 * @param confirmationText 351 * @param caller 352 * @param callback 353 * @return 354 * @throws Exception 355 */ 356 private ActionForward askQuestionWithInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String confirmationQuestion, String confirmationText, String successMessage, String caller, PdpPaymentDetailQuestionCallback callback) throws Exception { 357 Object question = request.getParameter(KNSConstants.QUESTION_INST_ATTRIBUTE_NAME); 358 String reason = request.getParameter(KNSConstants.QUESTION_REASON_ATTRIBUTE_NAME); 359 String noteText = KFSConstants.EMPTY_STRING; 360 Person person = GlobalVariables.getUserSession().getPerson(); 361 boolean actionStatus; 362 String message = KFSConstants.EMPTY_STRING; 363 364 String paymentDetailId = request.getParameter(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM); 365 if (paymentDetailId == null) { 366 paymentDetailId = request.getParameter(KNSConstants.QUESTION_CONTEXT); 367 } 368 369 KualiConfigurationService kualiConfiguration = KNSServiceLocator.getKualiConfigurationService(); 370 confirmationText = kualiConfiguration.getPropertyString(confirmationText); 371 confirmationText = MessageFormat.format(confirmationText, paymentDetailId); 372 373 if (question == null) { 374 375 // ask question if not already asked 376 return this.performQuestionWithInput(mapping, form, request, response, confirmationQuestion, confirmationText, KNSConstants.CONFIRMATION_QUESTION, caller, paymentDetailId); 377 } 378 else { 379 Object buttonClicked = request.getParameter(KNSConstants.QUESTION_CLICKED_BUTTON); 380 if ((confirmationQuestion.equals(question)) && ConfirmationQuestion.NO.equals(buttonClicked)) { 381 actionStatus = false; 382 } 383 else { 384 noteText = reason; 385 int noteTextLength = (reason == null) ? 0 : noteText.length(); 386 int noteTextMaxLength = PdpKeyConstants.BatchConstants.Confirmation.NOTE_TEXT_MAX_LENGTH; 387 388 if (StringUtils.isBlank(reason)) { 389 390 if (reason == null) { 391 // prevent a NPE by setting the reason to a blank string 392 reason = KFSConstants.EMPTY_STRING; 393 } 394 return this.performQuestionWithInputAgainBecauseOfErrors(mapping, form, request, response, confirmationQuestion, confirmationText, KNSConstants.CONFIRMATION_QUESTION, KFSConstants.MAPPING_BASIC, paymentDetailId, reason, PdpKeyConstants.BatchConstants.ErrorMessages.ERROR_NOTE_EMPTY, KNSConstants.QUESTION_REASON_ATTRIBUTE_NAME, ""); 395 } 396 else if (noteTextLength > noteTextMaxLength) { 397 return this.performQuestionWithInputAgainBecauseOfErrors(mapping, form, request, response, confirmationQuestion, confirmationText, KNSConstants.CONFIRMATION_QUESTION, KFSConstants.MAPPING_BASIC, paymentDetailId, reason, PdpKeyConstants.BatchConstants.ErrorMessages.ERROR_NOTE_TOO_LONG, KNSConstants.QUESTION_REASON_ATTRIBUTE_NAME, ""); 398 } 399 400 actionStatus = callback.doPostQuestion(Integer.parseInt(paymentDetailId), noteText, person); 401 if (actionStatus) { 402 message = successMessage; 403 } 404 405 } 406 } 407 408 String returnUrl = buildUrl(paymentDetailId, actionStatus, message, buildErrorMesageKeyList()); 409 return new ActionForward(returnUrl, true); 410 } 411 412 /** 413 * This method builds the forward url. 414 * 415 * @param paymentDetailId the payment detail id 416 * @param success action status: true if success, false otherwise 417 * @param message the message for the user 418 * @return the build url 419 */ 420 private String buildUrl(String paymentDetailId, boolean success, String message, String errorList) { 421 String basePath = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.APPLICATION_URL_KEY); 422 423 Properties parameters = new Properties(); 424 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.SEARCH_METHOD); 425 parameters.put(KFSConstants.BACK_LOCATION, basePath + "/" + KFSConstants.MAPPING_PORTAL + ".do"); 426 parameters.put(KNSConstants.DOC_FORM_KEY, "88888888"); 427 parameters.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, PaymentDetail.class.getName()); 428 parameters.put(KFSConstants.HIDE_LOOKUP_RETURN_LINK, "true"); 429 parameters.put(KFSConstants.SUPPRESS_ACTIONS, "false"); 430 parameters.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId); 431 parameters.put(PdpParameterConstants.ACTION_SUCCESSFUL_PARAM, String.valueOf(success)); 432 if (message != null && !message.equalsIgnoreCase(KFSConstants.EMPTY_STRING)) { 433 parameters.put(PdpParameterConstants.MESSAGE_PARAM, message); 434 } 435 436 if (StringUtils.isNotEmpty(errorList)) { 437 parameters.put(PdpParameterConstants.ERROR_KEY_LIST_PARAM, errorList); 438 } 439 440 String lookupUrl = UrlFactory.parameterizeUrl(basePath + "/" + KFSConstants.LOOKUP_ACTION, parameters); 441 442 return lookupUrl; 443 } 444 445 /** 446 * This method build a string list of error message keys out of the error map in GlobalVariables 447 * 448 * @return a String representing the list of error message keys 449 */ 450 private String buildErrorMesageKeyList() { 451 MessageMap errorMap = GlobalVariables.getMessageMap(); 452 StringBuffer errorList = new StringBuffer(); 453 454 for (String errorKey : (List<String>) errorMap.getPropertiesWithErrors()) { 455 for (ErrorMessage errorMessage : (List<ErrorMessage>) errorMap.getMessages(errorKey)) { 456 457 errorList.append(errorMessage.getErrorKey()); 458 errorList.append(PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR); 459 } 460 } 461 if (errorList.length() > 0) { 462 errorList.replace(errorList.lastIndexOf(PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR), errorList.lastIndexOf(PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR) + PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR.length(), ""); 463 } 464 465 return errorList.toString(); 466 } 467 468 /** 469 * This method gets the payment maintenance service 470 * @return the paymentMaintenanceService 471 */ 472 public PaymentMaintenanceService getPaymentMaintenanceService() { 473 return paymentMaintenanceService; 474 } 475 476 /** 477 * This method sets the payment maintenance service 478 * @param paymentMaintenanceService 479 */ 480 public void setPaymentMaintenanceService(PaymentMaintenanceService paymentMaintenanceService) { 481 this.paymentMaintenanceService = paymentMaintenanceService; 482 } 483 484 /** 485 * This method gets the business object service 486 * @return the businessObjectService 487 */ 488 public BusinessObjectService getBusinessObjectService() { 489 return businessObjectService; 490 } 491 492 /** 493 * This method sets the business object service. 494 * @param businessObjectService 495 */ 496 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 497 this.businessObjectService = businessObjectService; 498 } 499 500 } 501