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.sys.service;
017    
018    import java.util.List;
019    import java.util.Map;
020    
021    import org.kuali.kfs.sys.KFSConstants;
022    import org.kuali.kfs.sys.Message;
023    import org.kuali.kfs.sys.report.BusinessObjectReportHelper;
024    import org.kuali.rice.kns.bo.BusinessObject;
025    
026    /**
027     * Service interface defines methods that are relevant to writing a report
028     */
029    public interface ReportWriterService {
030        /**
031         * Writes a centered message. The purpose of this is primarily to write custom subtitles necessary in some reports
032         * @param message to be written centered
033         */
034        public void writeSubTitle(String message);
035        
036        /**
037         * Writes an error message for the passed in business object. If the business object is the first or different then the
038         * previous one a table header is printed per definition in the implementation of this service
039         * @param businessObject controlling the table header and values to be printed
040         * @param message associated with the businessObject
041         */
042        public void writeError(BusinessObject businessObject, Message message);
043        
044        /**
045         * Same as writeError except that it provides for multiple messages for the BO. BO values are only printed once and then messages each
046         * row below that.
047         * @param businessObject controlling the table header and values to be printed
048         * @param messages associated with the businessObject
049         */
050        public void writeError(BusinessObject businessObject, List<Message> messages);
051        
052        /**
053         * Writes statistics usually placed at the end of the report. If this is the first time this method is called then a statistics header
054         * is written. All messages are indented per STATISTICS_LEFT_PADDING. If multiple lines are needed, call this method multiple times to
055         * assure pagination works properly
056         * @param message to write
057         * @param args for the message per standard String.format
058         */
059        public void writeStatisticLine(String message, Object ... args);
060        
061        /**
062         * Writes parameter usually placed at the end of the report. If this is the first time this method is called then a parameter header
063         * is written. All messages are indented per PARAMETERS_LEFT_PADDING. If multiple lines are needed, call this method multiple times to
064         * assure pagination works properly
065         * @param message to write
066         * @param args for the message per standard String.format
067         */
068        public abstract void writeParameterLine(String message, Object ... args);
069        
070        /**
071         * Writes "lines" number of newlines to the report
072         * @param lines number of newlines to write to the report
073         */
074        public void writeNewLines(int lines);
075        
076        /**
077         * Pass through to PrintStream.printf except that it also handles pagination. If multiple lines are needed, call this method multiple
078         * times to assure pagination works properly
079         * @param format
080         */
081        public void writeFormattedMessageLine(String format);
082        
083        /**
084         * Pass through to PrintStream.printf except that it also handles pagination. If multiple lines are needed, call this method multiple
085         * times to assure pagination works properly
086         * @param format
087         * @param args
088         */
089        public void writeFormattedMessageLine(String format, Object ... args);
090    
091        public void writeMultipleFormattedMessageLines(String format, Object... args);
092        
093        /**
094         * Write table header into a report for the given business object
095         * @param businessObject the given business object
096         */
097        public void writeTableHeader(BusinessObject businessObject);
098        
099        /**
100         * Write table header into a report for business objects of the given class
101         * @param businessObjectClass the given class of a business object
102         */
103        public abstract void writeTableHeader(Class<? extends BusinessObject> businessObjectClass);
104        
105        /**
106         * Write table row into a report for the given business object
107         * @param businessObject the given business object
108         */
109        public void writeTableRow(BusinessObject businessObject);
110        
111        /**
112         * Write table into a report for the given list of business objects
113         * @param businessObjects the given business objects
114         * @param isHeaderRepeatedInNewPage instruct if the header row needs to be repeated in a new page
115         * @param isRowBreakAcrossPageAllowed determine whether a row can be broken across pages
116         */
117        public void writeTable(List<? extends BusinessObject> businessObjects, boolean isHeaderRepeatedInNewPage, boolean isRowBreakAcrossPageAllowed);
118    
119        /**
120         * Breaking the page and write a new header
121         */
122        public void pageBreak();
123    
124        /**
125         * Write table row into a report for the given business object and also take the colspan in account
126         * @param businessObject the given business object
127         */
128        public void writeTableRowWithColspan(BusinessObject businessObject);
129    
130        /**
131         * write a separation line in a table
132         * @param businessObject the given business object
133         */
134        public void writeTableRowSeparationLine(BusinessObject businessObject);
135    }