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.gl.businessobject; 017 018 import java.util.Comparator; 019 import java.util.LinkedHashMap; 020 021 import org.apache.commons.lang.StringUtils; 022 import org.kuali.kfs.sys.KFSPropertyConstants; 023 024 /** 025 * Holds summary data for the ledger summary report 026 */ 027 public class LedgerSummaryDetailLine extends LedgerBalanceTypeSummaryTotalLine { 028 private String financialSystemOriginationCode; 029 private Integer universityFiscalYear; 030 private String universityAccountPeriodCode; 031 032 /** 033 * Constructs a LedgerSummaryDetailLine 034 * 035 * @param balanceTypeCode 036 * @param financialSystemOriginationCode 037 * @param universityFiscalYear 038 * @param universityAccountPeriodCode 039 */ 040 public LedgerSummaryDetailLine(String balanceTypeCode, String financialSystemOriginationCode, Integer universityFiscalYear, String universityAccountPeriodCode) { 041 super(balanceTypeCode); 042 this.financialSystemOriginationCode = financialSystemOriginationCode; 043 this.universityFiscalYear = universityFiscalYear; 044 this.universityAccountPeriodCode = universityAccountPeriodCode; 045 } 046 047 /** 048 * Gets the financialSystemOriginationCode attribute. 049 * 050 * @return Returns the financialSystemOriginationCode. 051 */ 052 public String getFinancialSystemOriginationCode() { 053 return financialSystemOriginationCode; 054 } 055 056 /** 057 * Gets the universityFiscalYear attribute. 058 * 059 * @return Returns the universityFiscalYear. 060 */ 061 public Integer getUniversityFiscalYear() { 062 return universityFiscalYear; 063 } 064 065 /** 066 * Gets the universityAccountPeriodCode attribute. 067 * 068 * @return Returns the universityAccountPeriodCode. 069 */ 070 public String getUniversityAccountPeriodCode() { 071 return universityAccountPeriodCode; 072 } 073 074 /** 075 * @return gets a "key" for this summary line - just a convenient key for Maps which might hold these 076 */ 077 public String getKey() { 078 return LedgerSummaryDetailLine.makeKey(this.getFinancialBalanceTypeCode(), this.getFinancialSystemOriginationCode(), this.getUniversityFiscalYear(), this.getUniversityAccountPeriodCode()); 079 } 080 081 /** 082 * Generates a Map key in a consistent format with the rest of the uses of this class for a given OriginEntryInformation 083 * 084 * @param entry the entry to build a key for 085 * @return the "key" for a summary line which would include totals from entries like the given origin entry 086 */ 087 public static String getKeyString(OriginEntryInformation entry) { 088 return LedgerSummaryDetailLine.makeKey(entry.getFinancialBalanceTypeCode(), entry.getFinancialSystemOriginationCode(), entry.getUniversityFiscalYear(), entry.getUniversityFiscalPeriodCode()); 089 } 090 091 /** 092 * Given the various values, puts together a convenient Map key 093 * 094 * @param balanceTypeCode a balance type code 095 * @param financialSystemOriginationCode an origination code 096 * @param universityFiscalYear a fiscal year, smothered in mustard 097 * @param universityAccountingPeriodCode an accounting period code 098 * @return all of them magically put together, to form a Map key. Like Voltron, but more financially oriented 099 */ 100 private static String makeKey(String balanceTypeCode, String financialSystemOriginationCode, Integer universityFiscalYear, String universityAccountingPeriodCode) { 101 return StringUtils.join(new String[] { balanceTypeCode, financialSystemOriginationCode, universityFiscalYear == null ? "" : universityFiscalYear.toString(), universityAccountingPeriodCode }, ':'); 102 } 103 104 /** 105 * @return a standard comparator for comparing NightlyOutPendingEntryLedgerSummaryDetailLine objects 106 */ 107 public static Comparator<LedgerSummaryDetailLine> getStandardComparator() { 108 return new Comparator<LedgerSummaryDetailLine>() { 109 110 /** 111 * Compares two NightlyOutPendingEntryLedgerSummaryDetailLine objects 112 * 113 * @param detail1 the first NightlyOutPendingEntryLedgerSummaryDetailLine object 114 * @param detail2 the second NightlyOutPendingEntryLedgerSummaryDetailLine other 115 * @return the standard 0 for equals, greater than 0 for greater than, less than 0 for less than 116 */ 117 public int compare(LedgerSummaryDetailLine detail1, LedgerSummaryDetailLine detail2) { 118 int comp = 0; 119 comp = nullSafeCompare(detail1.getFinancialBalanceTypeCode(), detail2.getFinancialBalanceTypeCode()); 120 121 if (comp == 0) { 122 comp = nullSafeCompare(detail1.getFinancialSystemOriginationCode(), detail2.getFinancialSystemOriginationCode()); 123 } 124 125 if (comp == 0) { 126 comp = nullSafeCompare(detail1.getUniversityFiscalYear(), detail2.getUniversityFiscalYear()); 127 } 128 129 if (comp == 0) { 130 comp = nullSafeCompare(detail1.getUniversityAccountPeriodCode(), detail2.getUniversityAccountPeriodCode()); 131 } 132 133 return comp; 134 } 135 136 /** 137 * Checks for nulls in the two comparables before calling the compare. If one is null and not the other, the null is 138 * considered less. If both are null they are considered equal. 139 * 140 * @param o1 object to compare 141 * @param o2 object to compare o1 to 142 * @return -1 for less, 0 for equal, 1 for greater 143 */ 144 protected int nullSafeCompare(Comparable o1, Comparable o2) { 145 if (o1 == null && o2 != null) { 146 return -1; 147 } 148 149 if (o1 != null && o2 == null) { 150 return 1; 151 } 152 153 if (o1 == null && o2 == null) { 154 return 0; 155 } 156 157 return o1.compareTo(o2); 158 } 159 }; 160 } 161 162 public static String[] keyFields = new String[] { KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE, KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, "universityAccountPeriodCode" }; 163 164 /** 165 * @see org.kuali.kfs.gl.businessobject.LedgerSummaryTotalLine#toStringMapper() 166 */ 167 @Override 168 protected LinkedHashMap toStringMapper() { 169 LinkedHashMap stringMapper = super.toStringMapper(); 170 stringMapper.put("financialBalanceTypeCode", this.getFinancialBalanceTypeCode()); 171 stringMapper.put("financialSystemOriginationCode", this.getFinancialSystemOriginationCode()); 172 stringMapper.put("universityFiscalYear", this.getUniversityFiscalYear()); 173 stringMapper.put("universityAccountPeriodCode", this.getUniversityAccountPeriodCode()); 174 175 return stringMapper; 176 } 177 }