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.cab.businessobject;
017    
018    import org.apache.commons.lang.builder.EqualsBuilder;
019    import org.apache.commons.lang.builder.HashCodeBuilder;
020    import org.kuali.rice.kns.util.KualiDecimal;
021    
022    
023    /**
024     * Base account line group class which assist in easy group by clause
025     */
026    public abstract class AccountLineGroup {
027        protected Integer universityFiscalYear;
028        protected String chartOfAccountsCode;
029        protected String accountNumber;
030        protected String subAccountNumber;
031        protected String financialObjectCode;
032        protected String financialSubObjectCode;
033        protected String universityFiscalPeriodCode;
034        protected String documentNumber;
035        protected String referenceFinancialDocumentNumber;
036        protected String projectCode;
037        protected String organizationReferenceId;
038        protected KualiDecimal amount;
039    
040    
041        /**
042         * Gets the universityFiscalYear attribute.
043         * 
044         * @return Returns the universityFiscalYear
045         */
046        public Integer getUniversityFiscalYear() {
047            return universityFiscalYear;
048        }
049    
050        /**
051         * Sets the universityFiscalYear attribute.
052         * 
053         * @param universityFiscalYear The universityFiscalYear to set.
054         */
055        public void setUniversityFiscalYear(Integer universityFiscalYear) {
056            this.universityFiscalYear = universityFiscalYear;
057        }
058    
059        /**
060         * Gets the chartOfAccountsCode attribute.
061         * 
062         * @return Returns the chartOfAccountsCode
063         */
064        public String getChartOfAccountsCode() {
065            return chartOfAccountsCode;
066        }
067    
068        /**
069         * Sets the chartOfAccountsCode attribute.
070         * 
071         * @param chartOfAccountsCode The chartOfAccountsCode to set.
072         */
073        public void setChartOfAccountsCode(String chartOfAccountsCode) {
074            this.chartOfAccountsCode = chartOfAccountsCode;
075        }
076    
077        /**
078         * Gets the accountNumber attribute.
079         * 
080         * @return Returns the accountNumber
081         */
082        public String getAccountNumber() {
083            return accountNumber;
084        }
085    
086        /**
087         * Sets the accountNumber attribute.
088         * 
089         * @param accountNumber The accountNumber to set.
090         */
091        public void setAccountNumber(String accountNumber) {
092            this.accountNumber = accountNumber;
093        }
094    
095        /**
096         * Gets the subAccountNumber attribute.
097         * 
098         * @return Returns the subAccountNumber
099         */
100        public String getSubAccountNumber() {
101            return subAccountNumber;
102        }
103    
104        /**
105         * Sets the subAccountNumber attribute.
106         * 
107         * @param subAccountNumber The subAccountNumber to set.
108         */
109        public void setSubAccountNumber(String subAccountNumber) {
110            this.subAccountNumber = subAccountNumber;
111        }
112    
113        /**
114         * Gets the financialObjectCode attribute.
115         * 
116         * @return Returns the financialObjectCode
117         */
118        public String getFinancialObjectCode() {
119            return financialObjectCode;
120        }
121    
122        /**
123         * Sets the financialObjectCode attribute.
124         * 
125         * @param financialObjectCode The financialObjectCode to set.
126         */
127        public void setFinancialObjectCode(String financialObjectCode) {
128            this.financialObjectCode = financialObjectCode;
129        }
130    
131        /**
132         * Gets the financialSubObjectCode attribute.
133         * 
134         * @return Returns the financialSubObjectCode
135         */
136        public String getFinancialSubObjectCode() {
137            return financialSubObjectCode;
138        }
139    
140        /**
141         * Sets the financialSubObjectCode attribute.
142         * 
143         * @param financialSubObjectCode The financialSubObjectCode to set.
144         */
145        public void setFinancialSubObjectCode(String financialSubObjectCode) {
146            this.financialSubObjectCode = financialSubObjectCode;
147        }
148    
149        /**
150         * Gets the universityFiscalPeriodCode attribute.
151         * 
152         * @return Returns the universityFiscalPeriodCode
153         */
154        public String getUniversityFiscalPeriodCode() {
155            return universityFiscalPeriodCode;
156        }
157    
158        /**
159         * Sets the universityFiscalPeriodCode attribute.
160         * 
161         * @param universityFiscalPeriodCode The universityFiscalPeriodCode to set.
162         */
163        public void setUniversityFiscalPeriodCode(String universityFiscalPeriodCode) {
164            this.universityFiscalPeriodCode = universityFiscalPeriodCode;
165        }
166    
167        /**
168         * Gets the documentNumber attribute.
169         * 
170         * @return Returns the documentNumber
171         */
172        public String getDocumentNumber() {
173            return documentNumber;
174        }
175    
176        /**
177         * Sets the documentNumber attribute.
178         * 
179         * @param documentNumber The documentNumber to set.
180         */
181        public void setDocumentNumber(String documentNumber) {
182            this.documentNumber = documentNumber;
183        }
184    
185        /**
186         * Gets the referenceFinancialDocumentNumber attribute.
187         * 
188         * @return Returns the referenceFinancialDocumentNumber
189         */
190        public String getReferenceFinancialDocumentNumber() {
191            return referenceFinancialDocumentNumber;
192        }
193    
194        /**
195         * Sets the referenceFinancialDocumentNumber attribute.
196         * 
197         * @param referenceFinancialDocumentNumber The referenceFinancialDocumentNumber to set.
198         */
199        public void setReferenceFinancialDocumentNumber(String referenceFinancialDocumentNumber) {
200            this.referenceFinancialDocumentNumber = referenceFinancialDocumentNumber;
201        }
202    
203    
204        /**
205         * Gets the projectCode attribute.
206         * 
207         * @return Returns the projectCode.
208         */
209        public String getProjectCode() {
210            return projectCode;
211        }
212    
213        /**
214         * Sets the projectCode attribute value.
215         * 
216         * @param projectCode The projectCode to set.
217         */
218        public void setProjectCode(String projectCode) {
219            this.projectCode = projectCode;
220        }
221    
222        /**
223         * Gets the organizationReferenceId attribute.
224         * 
225         * @return Returns the organizationReferenceId.
226         */
227        public String getOrganizationReferenceId() {
228            return organizationReferenceId;
229        }
230    
231        /**
232         * Sets the organizationReferenceId attribute value.
233         * 
234         * @param organizationReferenceId The organizationReferenceId to set.
235         */
236        public void setOrganizationReferenceId(String organizationReferenceId) {
237            this.organizationReferenceId = organizationReferenceId;
238        }
239    
240        /**
241         * Overridden so that group by statement can be easily implemented.
242         * <li>DO NOT REMOVE this method, it is critical to reconciliation process</li>
243         * 
244         * @see java.lang.Object#equals(java.lang.Object)
245         */
246        @Override
247        public boolean equals(Object obj) {
248            if (this == obj) {
249                return true;
250            }
251            if (obj == null || !AccountLineGroup.class.isAssignableFrom(obj.getClass())) {
252                return false;
253            }
254            AccountLineGroup test = (AccountLineGroup) obj;
255            EqualsBuilder equalsBuilder = new EqualsBuilder();
256            equalsBuilder.append(this.universityFiscalYear, test.getUniversityFiscalYear());
257            equalsBuilder.append(replaceFiller(chartOfAccountsCode), replaceFiller(test.getChartOfAccountsCode()));
258            equalsBuilder.append(replaceFiller(accountNumber), replaceFiller(test.getAccountNumber()));
259            equalsBuilder.append(replaceFiller(subAccountNumber), replaceFiller(test.getSubAccountNumber()));
260            equalsBuilder.append(replaceFiller(financialObjectCode), replaceFiller(test.getFinancialObjectCode()));
261            equalsBuilder.append(replaceFiller(financialSubObjectCode), replaceFiller(test.getFinancialSubObjectCode()));
262            equalsBuilder.append(replaceFiller(universityFiscalPeriodCode), replaceFiller(test.getUniversityFiscalPeriodCode()));
263            equalsBuilder.append(replaceFiller(documentNumber), replaceFiller(test.getDocumentNumber()));
264            equalsBuilder.append(replaceFiller(referenceFinancialDocumentNumber), replaceFiller(test.getReferenceFinancialDocumentNumber()));
265            equalsBuilder.append(replaceFiller(organizationReferenceId), replaceFiller(test.getOrganizationReferenceId()));
266            equalsBuilder.append(replaceFiller(projectCode), replaceFiller(test.getProjectCode()));
267            return equalsBuilder.isEquals();
268        }
269    
270        private String replaceFiller(String val) {
271            if (val == null) {
272                return "";
273            }
274            char[] charArray = val.trim().toCharArray();
275            for (char c : charArray) {
276                if (c != '-') {
277                    return val;
278                }
279            }
280            return "";
281        }
282    
283        /**
284         * Overridden so that group by statement can be easily implemented.
285         * <li>DO NOT REMOVE this method, it is critical to reconciliation process</li>
286         * 
287         * @see java.lang.Object#hashCode(java.lang.Object)
288         */
289        @Override
290        public int hashCode() {
291            HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(37, 41);
292            hashCodeBuilder.append(this.universityFiscalYear);
293            hashCodeBuilder.append(replaceFiller(chartOfAccountsCode));
294            hashCodeBuilder.append(replaceFiller(accountNumber));
295            hashCodeBuilder.append(replaceFiller(subAccountNumber));
296            hashCodeBuilder.append(replaceFiller(financialObjectCode));
297            hashCodeBuilder.append(replaceFiller(financialSubObjectCode));
298            hashCodeBuilder.append(replaceFiller(universityFiscalPeriodCode));
299            hashCodeBuilder.append(replaceFiller(documentNumber));
300            hashCodeBuilder.append(replaceFiller(referenceFinancialDocumentNumber));
301            hashCodeBuilder.append(replaceFiller(organizationReferenceId));
302            hashCodeBuilder.append(replaceFiller(projectCode));
303            return hashCodeBuilder.toHashCode();
304        }
305    
306        /**
307         * Gets the absAmout attribute.
308         * 
309         * @return Returns the absAmout
310         */
311    
312        public KualiDecimal getAmount() {
313            return amount;
314        }
315    
316        /**
317         * Sets the amount attribute.
318         * 
319         * @param amount The amount to set.
320         */
321    
322        public void setAmount(KualiDecimal absAmount) {
323            this.amount = absAmount;
324        }
325    
326        @Override
327        public String toString() {
328            return this.hashCode() + "-" + universityFiscalYear + "-" + chartOfAccountsCode + "-" + accountNumber + "-" + replaceFiller(subAccountNumber) + "-" + financialObjectCode + "-" + replaceFiller(financialSubObjectCode) + "-" + universityFiscalPeriodCode + "-" + documentNumber + "-" + referenceFinancialDocumentNumber;
329        }
330    }