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.endow.document; 017 018 import java.util.List; 019 020 import org.kuali.kfs.module.endow.businessobject.EndowmentAccountingLine; 021 import org.kuali.kfs.module.endow.businessobject.EndowmentAccountingLineParser; 022 import org.kuali.kfs.module.endow.businessobject.SourceEndowmentAccountingLine; 023 import org.kuali.kfs.module.endow.businessobject.TargetEndowmentAccountingLine; 024 import org.kuali.kfs.sys.context.SpringContext; 025 import org.kuali.kfs.sys.document.datadictionary.FinancialSystemTransactionalDocumentEntry; 026 import org.kuali.rice.kns.service.DataDictionaryService; 027 import org.kuali.rice.kns.util.KualiDecimal; 028 import org.kuali.rice.kns.util.TypedArrayList; 029 030 /** 031 * Provides a base class for the Endowment Transfer of Funds documents. 032 */ 033 public abstract class EndowmentAccountingLinesDocumentBase extends EndowmentSecurityDetailsDocumentBase implements EndowmentAccountingLinesDocument { 034 protected Integer nextSourceAccountingLineNumber; 035 protected Integer nextTargetAccountingLineNumber; 036 protected List<SourceEndowmentAccountingLine> sourceAccountingLines; 037 protected List<TargetEndowmentAccountingLine> targetAccountingLines; 038 039 protected transient FinancialSystemTransactionalDocumentEntry dataDictionaryEntry; 040 041 protected transient Class sourceAccountingLineClass; 042 protected transient Class targetAccountingLineClass; 043 044 /** 045 * Constructs a EndowmentTransferOfFundsDocument. 046 */ 047 public EndowmentAccountingLinesDocumentBase() { 048 super(); 049 this.nextSourceAccountingLineNumber = new Integer(1); 050 this.nextTargetAccountingLineNumber = new Integer(1); 051 sourceAccountingLines = new TypedArrayList(SourceEndowmentAccountingLine.class); 052 targetAccountingLines = new TypedArrayList(TargetEndowmentAccountingLine.class); 053 } 054 055 056 /** 057 * Gets the nextSourceAccountingLineNumber. 058 * 059 * @return nextSourceAccountingLineNumber 060 */ 061 public Integer getNextSourceAccountingLineNumber() { 062 return nextSourceAccountingLineNumber; 063 } 064 065 /** 066 * Sets the nextSourceAccountingLineNumber. 067 * 068 * @param nextSourceAccountingLineNumber 069 */ 070 public void setNextSourceAccountingLineNumber(Integer nextSourceAccountingLineNumber) { 071 this.nextSourceAccountingLineNumber = nextSourceAccountingLineNumber; 072 } 073 074 /** 075 * Gets the nextTargetAccountingLineNumber. 076 * 077 * @return nextTargetAccountingLineNumber 078 */ 079 public Integer getNextTargetAccountingLineNumber() { 080 return nextTargetAccountingLineNumber; 081 } 082 083 /** 084 * Sets the nextTargetAccountingLineNumber. 085 * 086 * @param nextTargetAccountingLineNumber 087 */ 088 public void setNextTargetAccountingLineNumber(Integer nextTargetAccountingLineNumber) { 089 this.nextTargetAccountingLineNumber = nextTargetAccountingLineNumber; 090 } 091 092 /** 093 * Gets the sourceAccountingLines. 094 * 095 * @return sourceAccountingLines 096 */ 097 public List<SourceEndowmentAccountingLine> getSourceAccountingLines() { 098 return sourceAccountingLines; 099 } 100 101 /** 102 * Sets the sourceAccountingLines. 103 * 104 * @param sourceAccountingLines 105 */ 106 public void setSourceAccountingLines(List<SourceEndowmentAccountingLine> sourceAccountingLines) { 107 this.sourceAccountingLines = sourceAccountingLines; 108 } 109 110 /** 111 * Gets the targetAccountingLines. 112 * 113 * @return targetAccountingLines 114 */ 115 public List<TargetEndowmentAccountingLine> getTargetAccountingLines() { 116 return targetAccountingLines; 117 } 118 119 /** 120 * Sets the targetAccountingLines. 121 * 122 * @param targetAccountingLines 123 */ 124 public void setTargetAccountingLines(List<TargetEndowmentAccountingLine> targetAccountingLines) { 125 this.targetAccountingLines = targetAccountingLines; 126 } 127 128 /** 129 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#addSourceTransactionLine(org.kuali.kfs.module.endow.businessobject.EndowmentSourceTransactionLine) 130 */ 131 public void addSourceAccountingLine(SourceEndowmentAccountingLine line) { 132 line.setAccountingLineNumber(this.getNextSourceAccountingLineNumber()); 133 this.sourceAccountingLines.add(line); 134 this.nextSourceAccountingLineNumber = new Integer(this.getNextSourceAccountingLineNumber().intValue() + 1); 135 136 } 137 138 139 /** 140 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#addTargetTransactionLine(org.kuali.kfs.module.endow.businessobject.EndowmentTargetTransactionLine) 141 */ 142 public void addTargetAccountingLine(TargetEndowmentAccountingLine line) { 143 line.setAccountingLineNumber(this.getNextTargetAccountingLineNumber()); 144 this.targetAccountingLines.add(line); 145 this.nextTargetAccountingLineNumber = new Integer(this.getNextTargetAccountingLineNumber().intValue() + 1); 146 } 147 148 149 /** 150 * @see org.kuali.kfs.module.endow.document.EndowmentAccountingLinesDocument#getSourceAccountingLine(int) 151 */ 152 public SourceEndowmentAccountingLine getSourceAccountingLine(int index) { 153 154 while (getSourceAccountingLines().size() <= index) { 155 getSourceAccountingLines().add(new SourceEndowmentAccountingLine()); 156 } 157 return (SourceEndowmentAccountingLine) getSourceAccountingLines().get(index); 158 } 159 160 161 /** 162 * @see org.kuali.kfs.module.endow.document.EndowmentAccountingLinesDocument#getTargetAccountingLine(int) 163 */ 164 public TargetEndowmentAccountingLine getTargetAccountingLine(int index) { 165 while (getTargetAccountingLines().size() <= index) { 166 getTargetAccountingLines().add(new TargetEndowmentAccountingLine()); 167 } 168 return (TargetEndowmentAccountingLine) getTargetAccountingLines().get(index); 169 } 170 171 /** 172 * Gets the total amount of the accounting lines on this document. 173 * 174 * @return total amount of the accounting lines 175 */ 176 public KualiDecimal getTotalAccountingLinesAmount() { 177 178 KualiDecimal totalAmount = KualiDecimal.ZERO; 179 180 if (sourceAccountingLines.size() > 0) { 181 for (EndowmentAccountingLine accountingLine : sourceAccountingLines) { 182 if (accountingLine.getAmount() != null) { 183 totalAmount = totalAmount.add(accountingLine.getAmount()); 184 } 185 } 186 } 187 else if (targetAccountingLines.size() > 0) { 188 for (EndowmentAccountingLine accountingLine : targetAccountingLines) { 189 if (accountingLine.getAmount() != null) { 190 totalAmount = totalAmount.add(accountingLine.getAmount()); 191 } 192 } 193 } 194 195 return totalAmount; 196 } 197 198 199 /** 200 * @see org.kuali.rice.kns.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists() 201 */ 202 public List buildListOfDeletionAwareLists() { 203 List managedList = super.buildListOfDeletionAwareLists(); 204 205 managedList.add(getTargetAccountingLines()); 206 managedList.add(getSourceAccountingLines()); 207 208 return managedList; 209 } 210 211 /** 212 * Used to get the appropriate <code>{@link EndowmentAccountingLineParser}</code> for the <code>Document</code> 213 * 214 * @return EndowmentAccountingLineParser 215 */ 216 public EndowmentAccountingLineParser getEndowmentAccountingLineParser() { 217 // TODO: check if this is needed 218 // try { 219 // if (getDataDictionaryEntry().getImportedLineParserClass() != null) { 220 // return getDataDictionaryEntry().getImportedLineParserClass().newInstance(); 221 // } 222 // } 223 // catch (InstantiationException ie) { 224 // throw new IllegalStateException("Accounting Line Parser class " + 225 // getDataDictionaryEntry().getImportedLineParserClass().getName() + " cannot be instantiated", ie); 226 // } 227 // catch (IllegalAccessException iae) { 228 // throw new IllegalStateException("Illegal Access Exception while attempting to instantiate Accounting Line Parser class " 229 // + getDataDictionaryEntry().getImportedLineParserClass().getName(), iae); 230 // } 231 return new EndowmentAccountingLineParserBase(); 232 } 233 234 /** 235 * @return the data dictionary entry for this document 236 */ 237 public FinancialSystemTransactionalDocumentEntry getDataDictionaryEntry() { 238 if (dataDictionaryEntry == null) { 239 dataDictionaryEntry = (FinancialSystemTransactionalDocumentEntry) SpringContext.getBean(DataDictionaryService.class).getDataDictionary().getDocumentEntry(SpringContext.getBean(DataDictionaryService.class).getValidDocumentTypeNameByClass(getClass())); 240 } 241 return dataDictionaryEntry; 242 } 243 244 245 /** 246 * @see org.kuali.kfs.module.endow.document.EndowmentAccountingLinesDocument#getSourceAccountingLineClass() 247 */ 248 public Class getSourceAccountingLineClass() { 249 if (sourceAccountingLineClass == null) { 250 sourceAccountingLineClass = (getDataDictionaryEntry().getAccountingLineGroups() != null && getDataDictionaryEntry().getAccountingLineGroups().containsKey("source") && getDataDictionaryEntry().getAccountingLineGroups().get("source").getAccountingLineClass() != null) ? getDataDictionaryEntry().getAccountingLineGroups().get("source").getAccountingLineClass() : SourceEndowmentAccountingLine.class; 251 } 252 return sourceAccountingLineClass; 253 } 254 255 256 /** 257 * @see org.kuali.kfs.module.endow.document.EndowmentAccountingLinesDocument#getTargetAccountingLineClass() 258 */ 259 public Class getTargetAccountingLineClass() { 260 if (targetAccountingLineClass == null) { 261 targetAccountingLineClass = (getDataDictionaryEntry().getAccountingLineGroups() != null && getDataDictionaryEntry().getAccountingLineGroups().containsKey("target") && getDataDictionaryEntry().getAccountingLineGroups().get("target").getAccountingLineClass() != null) ? getDataDictionaryEntry().getAccountingLineGroups().get("target").getAccountingLineClass() : TargetEndowmentAccountingLine.class; 262 } 263 return targetAccountingLineClass; 264 } 265 }