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.bc.document.validation.impl; 017 018 import java.util.ArrayList; 019 import java.util.Collection; 020 import java.util.List; 021 022 import org.kuali.kfs.module.bc.BCConstants.MonthSpreadDeleteType; 023 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionMonthly; 024 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding; 025 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger; 026 import org.kuali.kfs.module.bc.document.BudgetConstructionDocument; 027 import org.kuali.kfs.module.bc.document.validation.AddBudgetConstructionDocumentRule; 028 import org.kuali.kfs.module.bc.document.validation.AddPendingBudgetGeneralLedgerLineRule; 029 import org.kuali.kfs.module.bc.document.validation.BudgetExpansionRule; 030 import org.kuali.kfs.module.bc.document.validation.DeleteMonthlySpreadRule; 031 import org.kuali.kfs.module.bc.document.validation.DeletePendingBudgetGeneralLedgerLineRule; 032 import org.kuali.kfs.module.bc.document.validation.SalarySettingRule; 033 import org.kuali.kfs.module.bc.document.validation.SaveMonthlyBudgetRule; 034 import org.kuali.kfs.module.bc.document.validation.event.BudgetExpansionEvent; 035 import org.kuali.rice.kns.document.Document; 036 import org.kuali.rice.kns.rule.BusinessRule; 037 import org.kuali.rice.kns.rule.SaveDocumentRule; 038 039 /** 040 * Base rule class for Budget Construction. Handles calling other expansion rule classes and the core budget document rules. 041 */ 042 public class BudgetConstructionRules implements BudgetExpansionRule, SalarySettingRule, SaveDocumentRule, AddBudgetConstructionDocumentRule<BudgetConstructionDocument>, AddPendingBudgetGeneralLedgerLineRule<BudgetConstructionDocument, PendingBudgetConstructionGeneralLedger>, DeletePendingBudgetGeneralLedgerLineRule<BudgetConstructionDocument, PendingBudgetConstructionGeneralLedger>, DeleteMonthlySpreadRule<BudgetConstructionDocument>, SaveMonthlyBudgetRule<BudgetConstructionDocument, BudgetConstructionMonthly> { 043 private Collection<BusinessRule> expansionRules; 044 private BudgetConstructionDocumentRules budgetConstructionDocumentRules; 045 private SalarySettingRule salarySettingRules; 046 047 /** 048 * Initialize expansion rule classes. 049 */ 050 public BudgetConstructionRules() { 051 expansionRules = new ArrayList<BusinessRule>(); 052 053 try { 054 budgetConstructionDocumentRules = BudgetConstructionDocumentRules.class.newInstance(); 055 expansionRules.add(budgetConstructionDocumentRules); 056 057 salarySettingRules = SalarySettingRules.class.newInstance(); 058 expansionRules.add(salarySettingRules); 059 } 060 catch (InstantiationException e) { 061 throw new RuntimeException(e); 062 } 063 catch (IllegalAccessException e) { 064 throw new RuntimeException(e); 065 } 066 } 067 068 /** 069 * @see org.kuali.kfs.module.bc.document.validation.BudgetExpansionRule#processExpansionRule(org.kuali.kfs.module.bc.document.validation.event.BudgetExpansionEvent) 070 */ 071 public boolean processExpansionRule(BudgetExpansionEvent budgetExpansionEvent) { 072 boolean valid = true; 073 074 Class<? extends BusinessRule> expansionRuleClass = budgetExpansionEvent.getExpansionRuleInterfaceClass(); 075 for (BusinessRule expansionRule : expansionRules) { 076 if (expansionRuleClass.isAssignableFrom(expansionRule.getClass())) { 077 valid &= budgetExpansionEvent.invokeExpansionRuleMethod(expansionRule); 078 } 079 } 080 081 return valid; 082 } 083 084 /** 085 * @see org.kuali.rice.kns.rule.SaveDocumentRule#processSaveDocument(org.kuali.rice.kns.document.Document) 086 */ 087 public boolean processSaveDocument(Document document) { 088 return ((SaveDocumentRule) budgetConstructionDocumentRules).processSaveDocument(document); 089 } 090 091 /** 092 * @see org.kuali.kfs.module.bc.document.validation.AddBudgetConstructionDocumentRule#processAddBudgetConstructionDocumentRules(org.kuali.kfs.module.bc.document.BudgetConstructionDocument) 093 */ 094 public boolean processAddBudgetConstructionDocumentRules(BudgetConstructionDocument budgetConstructionDocument) { 095 return ((AddBudgetConstructionDocumentRule<BudgetConstructionDocument>) budgetConstructionDocumentRules).processAddBudgetConstructionDocumentRules(budgetConstructionDocument); 096 } 097 098 /** 099 * @see org.kuali.kfs.module.bc.document.validation.AddPendingBudgetGeneralLedgerLineRule#processAddPendingBudgetGeneralLedgerLineRules(org.kuali.kfs.module.bc.document.BudgetConstructionDocument, 100 * org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger, boolean) 101 */ 102 public boolean processAddPendingBudgetGeneralLedgerLineRules(BudgetConstructionDocument budgetConstructionDocument, PendingBudgetConstructionGeneralLedger pendingBudgetConstructionGeneralLedger, boolean isRevenue) { 103 return ((AddPendingBudgetGeneralLedgerLineRule<BudgetConstructionDocument, PendingBudgetConstructionGeneralLedger>) budgetConstructionDocumentRules).processAddPendingBudgetGeneralLedgerLineRules(budgetConstructionDocument, pendingBudgetConstructionGeneralLedger, isRevenue); 104 } 105 106 /** 107 * @see org.kuali.kfs.module.bc.document.validation.DeletePendingBudgetGeneralLedgerLineRule#processDeletePendingBudgetGeneralLedgerLineRules(org.kuali.kfs.module.bc.document.BudgetConstructionDocument, 108 * org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger, boolean) 109 */ 110 public boolean processDeletePendingBudgetGeneralLedgerLineRules(BudgetConstructionDocument budgetConstructionDocument, PendingBudgetConstructionGeneralLedger pendingBudgetConstructionGeneralLedger, boolean isRevenue) { 111 return ((DeletePendingBudgetGeneralLedgerLineRule<BudgetConstructionDocument, PendingBudgetConstructionGeneralLedger>) budgetConstructionDocumentRules).processDeletePendingBudgetGeneralLedgerLineRules(budgetConstructionDocument, pendingBudgetConstructionGeneralLedger, isRevenue); 112 } 113 114 /** 115 * @see org.kuali.kfs.module.bc.document.validation.DeleteMonthlySpreadRule#processDeleteMonthlySpreadRules(org.kuali.kfs.module.bc.document.BudgetConstructionDocument, 116 * org.kuali.kfs.module.bc.BCConstants.MonthSpreadDeleteType) 117 */ 118 public boolean processDeleteMonthlySpreadRules(BudgetConstructionDocument budgetConstructionDocument, MonthSpreadDeleteType monthSpreadDeleteType) { 119 return ((DeleteMonthlySpreadRule<BudgetConstructionDocument>) budgetConstructionDocumentRules).processDeleteMonthlySpreadRules(budgetConstructionDocument, monthSpreadDeleteType); 120 } 121 122 public boolean processSaveMonthlyBudgetRules(BudgetConstructionDocument budgetConstructionDocument, BudgetConstructionMonthly budgetConstructionMonthly){ 123 return ((SaveMonthlyBudgetRule<BudgetConstructionDocument, BudgetConstructionMonthly>) budgetConstructionDocumentRules).processSaveMonthlyBudgetRules(budgetConstructionDocument, budgetConstructionMonthly); 124 } 125 /** 126 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processAddAppointmentFunding(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 127 */ 128 public boolean processAddAppointmentFunding(List<PendingBudgetConstructionAppointmentFunding> existingAppointmentFundings, PendingBudgetConstructionAppointmentFunding appointmentFunding) { 129 return salarySettingRules.processAddAppointmentFunding(existingAppointmentFundings, appointmentFunding); 130 } 131 132 /** 133 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processSaveAppointmentFunding(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 134 */ 135 public boolean processSaveAppointmentFunding(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 136 return salarySettingRules.processSaveAppointmentFunding(appointmentFunding); 137 } 138 139 /** 140 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processNormalizePayrateAndAmount(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 141 */ 142 public boolean processNormalizePayrateAndAmount(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 143 return salarySettingRules.processNormalizePayrateAndAmount(appointmentFunding); 144 } 145 146 /** 147 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processAdjustSalaraySettingLinePercent(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 148 */ 149 public boolean processAdjustSalaraySettingLinePercent(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 150 return salarySettingRules.processAdjustSalaraySettingLinePercent(appointmentFunding); 151 } 152 153 /** 154 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processQuickSaveAppointmentFunding(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 155 */ 156 public boolean processQuickSaveAppointmentFunding(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 157 return salarySettingRules.processQuickSaveAppointmentFunding(appointmentFunding); 158 } 159 }