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.document.service; 017 018 import java.io.IOException; 019 import java.io.OutputStream; 020 import java.sql.Date; 021 import java.util.Collection; 022 import java.util.Iterator; 023 import java.util.List; 024 025 import org.kuali.kfs.gl.businessobject.CorrectionChangeGroup; 026 import org.kuali.kfs.gl.businessobject.OriginEntryFull; 027 import org.kuali.kfs.gl.document.GeneralLedgerCorrectionProcessDocument; 028 import org.kuali.kfs.gl.document.CorrectionDocumentUtils; 029 import org.kuali.kfs.gl.document.web.CorrectionDocumentEntryMetadata; 030 import org.kuali.rice.kns.web.ui.Column; 031 032 /** 033 * An interface declaring methods needed by the GLCP to function 034 */ 035 public interface CorrectionDocumentService { 036 public final static String CORRECTION_TYPE_MANUAL = "M"; 037 public final static String CORRECTION_TYPE_CRITERIA = "C"; 038 public final static String CORRECTION_TYPE_REMOVE_GROUP_FROM_PROCESSING = "R"; 039 040 public final static String SYSTEM_DATABASE = "D"; 041 public final static String SYSTEM_UPLOAD = "U"; 042 043 /** 044 * When passed into {@link #retrievePersistedInputOriginEntries(CorrectionDocument, int)} and 045 * {@link #retrievePersistedOutputOriginEntries(CorrectionDocument, int)} as the int parameter, this will signify that there is 046 * no abort threshold (i.e. the methods should return all of the persisted rows, regardless of number of rows. 047 */ 048 public final static int UNLIMITED_ABORT_THRESHOLD = CorrectionDocumentUtils.RECORD_COUNT_FUNCTIONALITY_LIMIT_IS_UNLIMITED; 049 050 /** 051 * Returns a specific correction change group for a GLCP document 052 * 053 * @param docId the document id of a GLCP document 054 * @param i the number of the correction group within the document 055 * @return a CorrectionChangeGroup 056 */ 057 public CorrectionChangeGroup findByDocumentNumberAndCorrectionChangeGroupNumber(String docId, int i); 058 059 /** 060 * Finds CollectionChange records associated with a given document id and correction change group 061 * 062 * @param docId the document id of a GLCP document 063 * @param i the number of the correction group within the document 064 * @return a List of qualifying CorrectionChange records 065 */ 066 public List findByDocumentHeaderIdAndCorrectionGroupNumber(String docId, int i); 067 068 /** 069 * Finds Collection Criteria associated with the given GLCP document and group 070 * 071 * @param docId the document id of a GLCP document 072 * @param i the number of the correction group within the document 073 * @return a List of qualifying CorrectionCriteria 074 */ 075 public List findByDocumentNumberAndCorrectionGroupNumber(String docId, int i); 076 077 /** 078 * Retrieves a correction document by the document id 079 * 080 * @param docId the document id of the GLCP to find 081 * @return a CorrectionDocument if found 082 */ 083 public GeneralLedgerCorrectionProcessDocument findByCorrectionDocumentHeaderId(String docId); 084 085 /** 086 * Returns metadata to help render columns in the GLCP. Do not modify this list or the contents in this list. 087 * 088 * @param docId the document id of a GLCP document 089 * @return a List of Columns to render 090 */ 091 public List<Column> getTableRenderColumnMetadata(String docId); 092 093 /** 094 * This method persists an Iterator of input origin entries for a document that is in the initiated or saved state 095 * 096 * @param document an initiated or saved document 097 * @param entries an Iterator of origin entries 098 */ 099 public void persistInputOriginEntriesForInitiatedOrSavedDocument(GeneralLedgerCorrectionProcessDocument document, Iterator<OriginEntryFull> entries); 100 101 /** 102 * Removes input origin entries that were saved to the database associated with the given document 103 * 104 * @param document a GLCP document 105 */ 106 public void removePersistedInputOriginEntries(GeneralLedgerCorrectionProcessDocument document); 107 108 /** 109 * Removes input origin entries that were saved to the database associated with the given document 110 * 111 * @param docId the document id of a GLCP document 112 */ 113 public void removePersistedInputOriginEntries(String docId); 114 115 /** 116 * Retrieves input origin entries that have been persisted for this document 117 * 118 * @param document the document 119 * @param abortThreshold if the file exceeds this number of rows, then null is returned. {@link UNLIMITED_ABORT_THRESHOLD} 120 * signifies that there is no limit 121 * @return the list, or null if there are too many origin entries 122 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 123 */ 124 public List<OriginEntryFull> retrievePersistedInputOriginEntries(GeneralLedgerCorrectionProcessDocument document, int abortThreshold); 125 126 /** 127 * Returns true if the system is storing input origin entries for this class. Note that this does not mean that there's at least 128 * one input origin entry record persisted for this document, but merely returns true if and only if the underlying persistence 129 * mechanism has a record of this document's origin entries. See the docs for the implementations of this method for more 130 * implementation specific details. 131 * 132 * @param document a GLCP document 133 * @return Returns true if system should store origin entries, false otherwise 134 */ 135 public boolean areInputOriginEntriesPersisted(GeneralLedgerCorrectionProcessDocument document); 136 137 /** 138 * Writes out the persisted input origin entries in an {@link OutputStream} in a flat file format 139 * 140 * @param document a GLCP document 141 * @param out an open and ready output stream 142 * @throws IOException thrown if errors were encountered writing to the Stream 143 * @throws RuntimeException several reasons, including if the entries are not persisted 144 */ 145 public void writePersistedInputOriginEntriesToStream(GeneralLedgerCorrectionProcessDocument document, OutputStream out) throws IOException; 146 147 /** 148 * This method persists an Iterator of input origin entries for a document that is in the initiated or saved state 149 * 150 * @param document an initiated or saved document 151 * @param entries an Iterator of OriginEntries to persist 152 */ 153 public void persistOutputOriginEntriesForInitiatedOrSavedDocument(GeneralLedgerCorrectionProcessDocument document, Iterator<OriginEntryFull> entries); 154 155 /** 156 * Removes all output origin entries persisted in the database created by the given document 157 * 158 * @param document a GLCP document 159 */ 160 public void removePersistedOutputOriginEntries(GeneralLedgerCorrectionProcessDocument document); 161 162 /** 163 * Removes all output origin entries persisted in the database created by the given document 164 * 165 * @param docId the document id of a GLCP document 166 */ 167 public void removePersistedOutputOriginEntries(String docId); 168 169 /** 170 * Retrieves output origin entries that have been persisted for this document 171 * 172 * @param document the document 173 * @param abortThreshold if the file exceeds this number of rows, then null is returned. {@link UNLIMITED_ABORT_THRESHOLD} 174 * signifies that there is no limit 175 * @return the list, or null if there are too many origin entries 176 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 177 */ 178 public List<OriginEntryFull> retrievePersistedOutputOriginEntries(GeneralLedgerCorrectionProcessDocument document, int abortThreshold); 179 180 /** 181 * Retrieves input origin entries that have been persisted for this document in an iterator. Implementations of this method may 182 * choose to implement this method in a way that consumes very little memory. 183 * 184 * @param document the document 185 * @return the iterator 186 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 187 */ 188 public Iterator<OriginEntryFull> retrievePersistedInputOriginEntriesAsIterator(GeneralLedgerCorrectionProcessDocument document); 189 190 /** 191 * Retrieves output origin entries that have been persisted for this document in an iterator. Implementations of this method may 192 * choose to implement this method in a way that consumes very little memory. 193 * 194 * @param document the document 195 * @return the iterator 196 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 197 */ 198 public Iterator<OriginEntryFull> retrievePersistedOutputOriginEntriesAsIterator(GeneralLedgerCorrectionProcessDocument document); 199 200 /** 201 * Returns true if the system is storing output origin entries for this class. Note that this does not mean that there's at 202 * least one output origin entry record persisted for this document, but merely returns true if and only if the underlying 203 * persistence mechanism has a record of this document's origin entries. See the docs for the implementations of this method for 204 * more implementation specific details. 205 * 206 * @param document a GLCP document to query 207 * @return true if origin entries are stored to the system, false otherwise 208 */ 209 public boolean areOutputOriginEntriesPersisted(GeneralLedgerCorrectionProcessDocument document); 210 211 /** 212 * Writes out the persisted output origin entries in an {@link OutputStream} in a flat file format\ 213 * 214 * @param document a GLCP document 215 * @param out axn open and ready output stream 216 * @throws IOException thrown if IOExceptions occurred in writing the persisted origin entries 217 * @throws RuntimeException several reasons, including if the entries are not persisted 218 */ 219 public void writePersistedOutputOriginEntriesToStream(GeneralLedgerCorrectionProcessDocument document, OutputStream out) throws IOException; 220 221 /** 222 * Saves the input and output origin entry groups for a document prior to saving the document 223 * 224 * @param document a GLCP document 225 * @param correctionDocumentEntryMetadata metadata about this GLCP document 226 */ 227 public void persistOriginEntryGroupsForDocumentSave(GeneralLedgerCorrectionProcessDocument document, CorrectionDocumentEntryMetadata correctionDocumentEntryMetadata); 228 229 /** 230 * Retrieves all of the documents that were finalized on a certain date 231 * 232 * @param date the date to find GLCP documents finalized on 233 * @return a collection of documents 234 */ 235 public Collection<GeneralLedgerCorrectionProcessDocument> getCorrectionDocumentsFinalizedOn(Date date); 236 237 public String generateOutputOriginEntryFileName(String docId); 238 239 public String createOutputFileForProcessing(String docId, java.util.Date today); 240 241 public String getBatchFileDirectoryName(); 242 243 public String getGlcpDirectoryName(); 244 245 /** 246 * Generate a text report for the given correction document 247 * 248 * @param document GLCP document to report on 249 */ 250 public void generateCorrectionReport(GeneralLedgerCorrectionProcessDocument document); 251 252 public void aggregateCorrectionDocumentReports(GeneralLedgerCorrectionProcessDocument document); 253 254 /** 255 * Finds any existing output files for the given document. Used to prevent double-processing. 256 * 257 * @param documentNumber 258 * @return 259 */ 260 public String[] findExistingCorrectionOutputFilesForDocument( String documentNumber ); 261 }