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.report;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import org.kuali.kfs.sys.KFSConstants;
022
023 /**
024 * This class represents a summary amount used in reporst
025 */
026 public class Summary implements Comparable {
027 /**
028 * This number is used by TransactionReport when sorting the list of Summary objects passed to
029 * TransactionReport.generateReport(). Lowest number prints first.
030 */
031 public static final int TOTAL_RECORD_COUNT_SUMMARY_SORT_ORDER = 1;
032 public static final int SELECTED_RECORD_COUNT_SUMMARY_SORT_ORDER = 2;
033 public static final int SEQUENCE_RECORDS_WRITTEN_SUMMARY_SORT_ORDER = 3;
034 private int sortOrder;
035
036 /**
037 * This is the description that prints for the summary line.
038 */
039 private String description;
040
041 /**
042 * This is the count that displays. FIXME: Make this documentation a bit more clear.
043 */
044 private long count;
045
046 /**
047 *
048 */
049 public Summary() {
050 super();
051 }
052
053
054 /**
055 * Constructs a Summary.java.
056 * @param sortOrder
057 * @param description
058 * @param count
059 */
060 public Summary(int sortOrder, String description, long count) {
061 this.sortOrder = sortOrder;
062 this.description = description;
063 this.count = count;
064 }
065
066 /**
067 * Constructs a Summary.java.
068 * @param sortOrder
069 * @param description
070 * @param count
071 */
072 public Summary(int sortOrder, String description, Integer count) {
073 this.sortOrder = sortOrder;
074 this.description = description;
075 if (count == null) {
076 this.count = 0;
077 }
078 else {
079 this.count = count.longValue();
080 }
081 }
082
083 /**
084 * Compare this Summary object with another summary object
085 *
086 * (non-Javadoc)
087 *
088 * @see java.lang.Comparable#compareTo(java.lang.Object)
089 */
090 public int compareTo(Object arg0) {
091 if (arg0 instanceof Summary) {
092 Summary otherObject = (Summary) arg0;
093 Integer otherSort = new Integer(otherObject.getSortOrder());
094 Integer thisSort = new Integer(sortOrder);
095 return thisSort.compareTo(otherSort);
096 }
097 else {
098 return 0;
099 }
100 }
101
102 /**
103 * Returns true if the description of this summary object and the passed in summary object are the same
104 *
105 * @see java.lang.Object#equals(java.lang.Object)
106 */
107 @Override
108 public boolean equals(Object object) {
109 if (this == object)
110 return true;
111 if (!(object instanceof Summary))
112 return false;
113
114 Summary that = (Summary) object;
115 return this.description.equals(that.getDescription());
116 }
117
118 /**
119 * Build a report summary list for labor general ledger posting
120 *
121 * @param destination description of summary displayed
122 * @param startingOrder order how information is displayed
123 * @return a list of summary objects
124 */
125 public static List<Summary> buildDefualtReportSummary(String destination, int startingOrder) {
126 List<Summary> reportSummary = new ArrayList<Summary>();
127 updateReportSummary(reportSummary, destination, KFSConstants.OperationType.INSERT, 0, startingOrder++);
128 updateReportSummary(reportSummary, destination, KFSConstants.OperationType.UPDATE, 0, startingOrder++);
129 updateReportSummary(reportSummary, destination, KFSConstants.OperationType.DELETE, 0, startingOrder++);
130 return reportSummary;
131 }
132
133 /**
134 * Update the report summary with the given information
135 *
136 * @param reportSummary list of summaries
137 * @param destinationName description of summary displayed
138 * @param operationType description of what action is related to the summary (i.e. insert, updated, deleted)
139 * @param count count of how many "objects" are affected
140 * @param order order how information is displayed
141 */
142 public static void updateReportSummary(List<Summary> reportSummary, String destinationName, String operationType, int count, int order) {
143 StringBuilder summaryDescription = buildSummaryDescription(destinationName, operationType);
144 updateReportSummary(reportSummary, summaryDescription.toString(), count, order);
145 }
146
147 /**
148 * Update the report summary with the given information
149 *
150 * @param reportSummary list of summaries
151 * @param summaryDescription description of summary displayed
152 * @param count count of how many "objects" are affected
153 * @param order order how information is displayed
154 */
155 public static void updateReportSummary(List<Summary> reportSummary, String summaryDescription, int count, int order) {
156 Summary inputSummary = new Summary(order, summaryDescription, count);
157
158 int index = reportSummary.indexOf(inputSummary);
159 if (index >= 0) {
160 Summary summary = reportSummary.get(index);
161 summary.setCount(summary.getCount() + count);
162 }
163 else {
164 reportSummary.add(inputSummary);
165 }
166 }
167
168 /**
169 * Build the description of summary with the given information
170 *
171 * @param destinationName description of summary displayed
172 * @param operationType description of what action is related to the summary (i.e. insert, updated, deleted)
173 * @return
174 */
175 public static StringBuilder buildSummaryDescription(String destinationName, String operationType) {
176 StringBuilder summaryDescription = new StringBuilder();
177 summaryDescription.append("Number of ").append(destinationName).append(" records ").append(operationType).append(":");
178 return summaryDescription;
179 }
180
181
182 public long getCount() {
183 return count;
184 }
185
186 public void setCount(long count) {
187 this.count = count;
188 }
189
190 public String getDescription() {
191 return description;
192 }
193
194 public void setDescription(String description) {
195 this.description = description;
196 }
197
198 public int getSortOrder() {
199 return sortOrder;
200 }
201
202 public void setSortOrder(int sortOrder) {
203 this.sortOrder = sortOrder;
204 }
205 }