/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.gl.report;
import java.util.ArrayList;
import java.util.List;
import org.kuali.kfs.sys.KFSConstants;
/**
* This class represents a summary amount used in reporst
*/
public class Summary implements Comparable {
/**
* This number is used by TransactionReport when sorting the list of Summary objects passed to
* TransactionReport.generateReport(). Lowest number prints first.
*/
public static final int TOTAL_RECORD_COUNT_SUMMARY_SORT_ORDER = 1;
public static final int SELECTED_RECORD_COUNT_SUMMARY_SORT_ORDER = 2;
public static final int SEQUENCE_RECORDS_WRITTEN_SUMMARY_SORT_ORDER = 3;
private int sortOrder;
/**
* This is the description that prints for the summary line.
*/
private String description;
/**
* This is the count that displays. FIXME: Make this documentation a bit more clear.
*/
private long count;
/**
*
*/
public Summary() {
super();
}
/**
* Constructs a Summary.java.
* @param sortOrder
* @param description
* @param count
*/
public Summary(int sortOrder, String description, long count) {
this.sortOrder = sortOrder;
this.description = description;
this.count = count;
}
/**
* Constructs a Summary.java.
* @param sortOrder
* @param description
* @param count
*/
public Summary(int sortOrder, String description, Integer count) {
this.sortOrder = sortOrder;
this.description = description;
if (count == null) {
this.count = 0;
}
else {
this.count = count.longValue();
}
}
/**
* Compare this Summary object with another summary object
*
* (non-Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object arg0) {
if (arg0 instanceof Summary) {
Summary otherObject = (Summary) arg0;
Integer otherSort = new Integer(otherObject.getSortOrder());
Integer thisSort = new Integer(sortOrder);
return thisSort.compareTo(otherSort);
}
else {
return 0;
}
}
/**
* Returns true if the description of this summary object and the passed in summary object are the same
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (!(object instanceof Summary))
return false;
Summary that = (Summary) object;
return this.description.equals(that.getDescription());
}
/**
* Build a report summary list for labor general ledger posting
*
* @param destination description of summary displayed
* @param startingOrder order how information is displayed
* @return a list of summary objects
*/
public static List<Summary> buildDefualtReportSummary(String destination, int startingOrder) {
List<Summary> reportSummary = new ArrayList<Summary>();
updateReportSummary(reportSummary, destination, KFSConstants.OperationType.INSERT, 0, startingOrder++);
updateReportSummary(reportSummary, destination, KFSConstants.OperationType.UPDATE, 0, startingOrder++);
updateReportSummary(reportSummary, destination, KFSConstants.OperationType.DELETE, 0, startingOrder++);
return reportSummary;
}
/**
* Update the report summary with the given information
*
* @param reportSummary list of summaries
* @param destinationName description of summary displayed
* @param operationType description of what action is related to the summary (i.e. insert, updated, deleted)
* @param count count of how many "objects" are affected
* @param order order how information is displayed
*/
public static void updateReportSummary(List<Summary> reportSummary, String destinationName, String operationType, int count, int order) {
StringBuilder summaryDescription = buildSummaryDescription(destinationName, operationType);
updateReportSummary(reportSummary, summaryDescription.toString(), count, order);
}
/**
* Update the report summary with the given information
*
* @param reportSummary list of summaries
* @param summaryDescription description of summary displayed
* @param count count of how many "objects" are affected
* @param order order how information is displayed
*/
public static void updateReportSummary(List<Summary> reportSummary, String summaryDescription, int count, int order) {
Summary inputSummary = new Summary(order, summaryDescription, count);
int index = reportSummary.indexOf(inputSummary);
if (index >= 0) {
Summary summary = reportSummary.get(index);
summary.setCount(summary.getCount() + count);
}
else {
reportSummary.add(inputSummary);
}
}
/**
* Build the description of summary with the given information
*
* @param destinationName description of summary displayed
* @param operationType description of what action is related to the summary (i.e. insert, updated, deleted)
* @return
*/
public static StringBuilder buildSummaryDescription(String destinationName, String operationType) {
StringBuilder summaryDescription = new StringBuilder();
summaryDescription.append("Number of ").append(destinationName).append(" records ").append(operationType).append(":");
return summaryDescription;
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getSortOrder() {
return sortOrder;
}
public void setSortOrder(int sortOrder) {
this.sortOrder = sortOrder;
}
}