1 /* 2 * Copyright 2006 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.ole.gl.document.service; 17 18 import java.io.IOException; 19 import java.io.OutputStream; 20 import java.sql.Date; 21 import java.util.Collection; 22 import java.util.Iterator; 23 import java.util.List; 24 25 import org.kuali.ole.gl.businessobject.CorrectionChangeGroup; 26 import org.kuali.ole.gl.businessobject.OriginEntryFull; 27 import org.kuali.ole.gl.document.CorrectionDocumentUtils; 28 import org.kuali.ole.gl.document.GeneralLedgerCorrectionProcessDocument; 29 import org.kuali.ole.gl.document.web.CorrectionDocumentEntryMetadata; 30 import org.kuali.ole.sys.batch.InitiateDirectory; 31 import org.kuali.rice.kns.web.ui.Column; 32 33 /** 34 * An interface declaring methods needed by the GLCP to function 35 */ 36 public interface CorrectionDocumentService extends InitiateDirectory{ 37 public final static String CORRECTION_TYPE_MANUAL = "M"; 38 public final static String CORRECTION_TYPE_CRITERIA = "C"; 39 public final static String CORRECTION_TYPE_REMOVE_GROUP_FROM_PROCESSING = "R"; 40 41 public final static String SYSTEM_DATABASE = "D"; 42 public final static String SYSTEM_UPLOAD = "U"; 43 44 /** 45 * When passed into {@link #retrievePersistedInputOriginEntries(CorrectionDocument, int)} and 46 * {@link #retrievePersistedOutputOriginEntries(CorrectionDocument, int)} as the int parameter, this will signify that there is 47 * no abort threshold (i.e. the methods should return all of the persisted rows, regardless of number of rows. 48 */ 49 public final static int UNLIMITED_ABORT_THRESHOLD = CorrectionDocumentUtils.RECORD_COUNT_FUNCTIONALITY_LIMIT_IS_UNLIMITED; 50 51 /** 52 * Returns a specific correction change group for a GLCP document 53 * 54 * @param docId the document id of a GLCP document 55 * @param i the number of the correction group within the document 56 * @return a CorrectionChangeGroup 57 */ 58 public CorrectionChangeGroup findByDocumentNumberAndCorrectionChangeGroupNumber(String docId, int i); 59 60 /** 61 * Finds CollectionChange records associated with a given document id and correction change group 62 * 63 * @param docId the document id of a GLCP document 64 * @param i the number of the correction group within the document 65 * @return a List of qualifying CorrectionChange records 66 */ 67 public List findByDocumentHeaderIdAndCorrectionGroupNumber(String docId, int i); 68 69 /** 70 * Finds Collection Criteria associated with the given GLCP document and group 71 * 72 * @param docId the document id of a GLCP document 73 * @param i the number of the correction group within the document 74 * @return a List of qualifying CorrectionCriteria 75 */ 76 public List findByDocumentNumberAndCorrectionGroupNumber(String docId, int i); 77 78 /** 79 * Retrieves a correction document by the document id 80 * 81 * @param docId the document id of the GLCP to find 82 * @return a CorrectionDocument if found 83 */ 84 public GeneralLedgerCorrectionProcessDocument findByCorrectionDocumentHeaderId(String docId); 85 86 /** 87 * Returns metadata to help render columns in the GLCP. Do not modify this list or the contents in this list. 88 * 89 * @param docId the document id of a GLCP document 90 * @return a List of Columns to render 91 */ 92 public List<Column> getTableRenderColumnMetadata(String docId); 93 94 /** 95 * This method persists an Iterator of input origin entries for a document that is in the initiated or saved state 96 * 97 * @param document an initiated or saved document 98 * @param entries an Iterator of origin entries 99 */ 100 public void persistInputOriginEntriesForInitiatedOrSavedDocument(GeneralLedgerCorrectionProcessDocument document, Iterator<OriginEntryFull> entries); 101 102 /** 103 * Removes input origin entries that were saved to the database associated with the given document 104 * 105 * @param document a GLCP document 106 */ 107 public void removePersistedInputOriginEntries(GeneralLedgerCorrectionProcessDocument document); 108 109 /** 110 * Removes input origin entries that were saved to the database associated with the given document 111 * 112 * @param docId the document id of a GLCP document 113 */ 114 public void removePersistedInputOriginEntries(String docId); 115 116 /** 117 * Retrieves input origin entries that have been persisted for this document 118 * 119 * @param document the document 120 * @param abortThreshold if the file exceeds this number of rows, then null is returned. {@link UNLIMITED_ABORT_THRESHOLD} 121 * signifies that there is no limit 122 * @return the list, or null if there are too many origin entries 123 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 124 */ 125 public List<OriginEntryFull> retrievePersistedInputOriginEntries(GeneralLedgerCorrectionProcessDocument document, int abortThreshold); 126 127 /** 128 * Returns true if the system is storing input origin entries for this class. Note that this does not mean that there's at least 129 * one input origin entry record persisted for this document, but merely returns true if and only if the underlying persistence 130 * mechanism has a record of this document's origin entries. See the docs for the implementations of this method for more 131 * implementation specific details. 132 * 133 * @param document a GLCP document 134 * @return Returns true if system should store origin entries, false otherwise 135 */ 136 public boolean areInputOriginEntriesPersisted(GeneralLedgerCorrectionProcessDocument document); 137 138 /** 139 * Writes out the persisted input origin entries in an {@link OutputStream} in a flat file format 140 * 141 * @param document a GLCP document 142 * @param out an open and ready output stream 143 * @throws IOException thrown if errors were encountered writing to the Stream 144 * @throws RuntimeException several reasons, including if the entries are not persisted 145 */ 146 public void writePersistedInputOriginEntriesToStream(GeneralLedgerCorrectionProcessDocument document, OutputStream out) throws IOException; 147 148 /** 149 * This method persists an Iterator of input origin entries for a document that is in the initiated or saved state 150 * 151 * @param document an initiated or saved document 152 * @param entries an Iterator of OriginEntries to persist 153 */ 154 public void persistOutputOriginEntriesForInitiatedOrSavedDocument(GeneralLedgerCorrectionProcessDocument document, Iterator<OriginEntryFull> entries); 155 156 /** 157 * Removes all output origin entries persisted in the database created by the given document 158 * 159 * @param document a GLCP document 160 */ 161 public void removePersistedOutputOriginEntries(GeneralLedgerCorrectionProcessDocument document); 162 163 /** 164 * Removes all output origin entries persisted in the database created by the given document 165 * 166 * @param docId the document id of a GLCP document 167 */ 168 public void removePersistedOutputOriginEntries(String docId); 169 170 /** 171 * Retrieves output origin entries that have been persisted for this document 172 * 173 * @param document the document 174 * @param abortThreshold if the file exceeds this number of rows, then null is returned. {@link UNLIMITED_ABORT_THRESHOLD} 175 * signifies that there is no limit 176 * @return the list, or null if there are too many origin entries 177 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 178 */ 179 public List<OriginEntryFull> retrievePersistedOutputOriginEntries(GeneralLedgerCorrectionProcessDocument document, int abortThreshold); 180 181 /** 182 * Retrieves input origin entries that have been persisted for this document in an iterator. Implementations of this method may 183 * choose to implement this method in a way that consumes very little memory. 184 * 185 * @param document the document 186 * @return the iterator 187 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 188 */ 189 public Iterator<OriginEntryFull> retrievePersistedInputOriginEntriesAsIterator(GeneralLedgerCorrectionProcessDocument document); 190 191 /** 192 * Retrieves output origin entries that have been persisted for this document in an iterator. Implementations of this method may 193 * choose to implement this method in a way that consumes very little memory. 194 * 195 * @param document the document 196 * @return the iterator 197 * @throws RuntimeException several reasons, primarily relating to underlying persistence layer problems 198 */ 199 public Iterator<OriginEntryFull> retrievePersistedOutputOriginEntriesAsIterator(GeneralLedgerCorrectionProcessDocument document); 200 201 /** 202 * Returns true if the system is storing output origin entries for this class. Note that this does not mean that there's at 203 * least one output origin entry record persisted for this document, but merely returns true if and only if the underlying 204 * persistence mechanism has a record of this document's origin entries. See the docs for the implementations of this method for 205 * more implementation specific details. 206 * 207 * @param document a GLCP document to query 208 * @return true if origin entries are stored to the system, false otherwise 209 */ 210 public boolean areOutputOriginEntriesPersisted(GeneralLedgerCorrectionProcessDocument document); 211 212 /** 213 * Writes out the persisted output origin entries in an {@link OutputStream} in a flat file format\ 214 * 215 * @param document a GLCP document 216 * @param out axn open and ready output stream 217 * @throws IOException thrown if IOExceptions occurred in writing the persisted origin entries 218 * @throws RuntimeException several reasons, including if the entries are not persisted 219 */ 220 public void writePersistedOutputOriginEntriesToStream(GeneralLedgerCorrectionProcessDocument document, OutputStream out) throws IOException; 221 222 /** 223 * Saves the input and output origin entry groups for a document prior to saving the document 224 * 225 * @param document a GLCP document 226 * @param correctionDocumentEntryMetadata metadata about this GLCP document 227 */ 228 public void persistOriginEntryGroupsForDocumentSave(GeneralLedgerCorrectionProcessDocument document, CorrectionDocumentEntryMetadata correctionDocumentEntryMetadata); 229 230 /** 231 * Retrieves all of the documents that were finalized on a certain date 232 * 233 * @param date the date to find GLCP documents finalized on 234 * @return a collection of documents 235 */ 236 public Collection<GeneralLedgerCorrectionProcessDocument> getCorrectionDocumentsFinalizedOn(Date date); 237 238 public String generateOutputOriginEntryFileName(String docId); 239 240 public String createOutputFileForProcessing(String docId, java.util.Date today); 241 242 public String getBatchFileDirectoryName(); 243 244 public String getGlcpDirectoryName(); 245 246 /** 247 * Generate a text report for the given correction document 248 * 249 * @param document GLCP document to report on 250 */ 251 public void generateCorrectionReport(GeneralLedgerCorrectionProcessDocument document); 252 253 public void aggregateCorrectionDocumentReports(GeneralLedgerCorrectionProcessDocument document); 254 255 /** 256 * Finds any existing output files for the given document. Used to prevent double-processing. 257 * 258 * @param documentNumber 259 * @return 260 */ 261 public String[] findExistingCorrectionOutputFilesForDocument( String documentNumber ); 262 }