1 /* 2 * Copyright 2007-2009 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.sys.service; 17 18 import java.util.List; 19 20 import org.kuali.ole.sys.Message; 21 import org.kuali.rice.krad.bo.BusinessObject; 22 23 /** 24 * Service interface defines methods that are relevant to writing a report 25 */ 26 public interface ReportWriterService { 27 /** 28 * Writes a centered message. The purpose of this is primarily to write custom subtitles necessary in some reports 29 * @param message to be written centered 30 */ 31 public void writeSubTitle(String message); 32 33 /** 34 * Writes an error message for the passed in business object. If the business object is the first or different then the 35 * previous one a table header is printed per definition in the implementation of this service 36 * @param businessObject controlling the table header and values to be printed 37 * @param message associated with the businessObject 38 */ 39 public void writeError(BusinessObject businessObject, Message message); 40 41 /** 42 * Same as writeError except that it provides for multiple messages for the BO. BO values are only printed once and then messages each 43 * row below that. 44 * @param businessObject controlling the table header and values to be printed 45 * @param messages associated with the businessObject 46 */ 47 public void writeError(BusinessObject businessObject, List<Message> messages); 48 49 /** 50 * Writes statistics usually placed at the end of the report. If this is the first time this method is called then a statistics header 51 * is written. All messages are indented per STATISTICS_LEFT_PADDING. If multiple lines are needed, call this method multiple times to 52 * assure pagination works properly 53 * @param message to write 54 * @param args for the message per standard String.format 55 */ 56 public void writeStatisticLine(String message, Object ... args); 57 58 /** 59 * Writes parameter usually placed at the end of the report. If this is the first time this method is called then a parameter header 60 * is written. All messages are indented per PARAMETERS_LEFT_PADDING. If multiple lines are needed, call this method multiple times to 61 * assure pagination works properly 62 * @param message to write 63 * @param args for the message per standard String.format 64 */ 65 public abstract void writeParameterLine(String message, Object ... args); 66 67 /** 68 * Writes "lines" number of newlines to the report 69 * @param lines number of newlines to write to the report 70 */ 71 public void writeNewLines(int lines); 72 73 /** 74 * Pass through to PrintStream.printf except that it also handles pagination. If multiple lines are needed, call this method multiple 75 * times to assure pagination works properly 76 * @param format 77 */ 78 public void writeFormattedMessageLine(String format); 79 80 /** 81 * Pass through to PrintStream.printf except that it also handles pagination. If multiple lines are needed, call this method multiple 82 * times to assure pagination works properly 83 * @param format 84 * @param args 85 */ 86 public void writeFormattedMessageLine(String format, Object ... args); 87 88 public void writeMultipleFormattedMessageLines(String format, Object... args); 89 90 /** 91 * Write table header into a report for the given business object 92 * @param businessObject the given business object 93 */ 94 public void writeTableHeader(BusinessObject businessObject); 95 96 /** 97 * Write table header into a report for business objects of the given class 98 * @param businessObjectClass the given class of a business object 99 */ 100 public abstract void writeTableHeader(Class<? extends BusinessObject> businessObjectClass); 101 102 /** 103 * Write table row into a report for the given business object 104 * @param businessObject the given business object 105 */ 106 public void writeTableRow(BusinessObject businessObject); 107 108 /** 109 * Write table into a report for the given list of business objects 110 * @param businessObjects the given business objects 111 * @param isHeaderRepeatedInNewPage instruct if the header row needs to be repeated in a new page 112 * @param isRowBreakAcrossPageAllowed determine whether a row can be broken across pages 113 */ 114 public void writeTable(List<? extends BusinessObject> businessObjects, boolean isHeaderRepeatedInNewPage, boolean isRowBreakAcrossPageAllowed); 115 116 /** 117 * Breaking the page and write a new header 118 */ 119 public void pageBreak(); 120 121 /** 122 * Write table row into a report for the given business object and also take the colspan in account 123 * @param businessObject the given business object 124 */ 125 public void writeTableRowWithColspan(BusinessObject businessObject); 126 127 /** 128 * write a separation line in a table 129 * @param businessObject the given business object 130 */ 131 public void writeTableRowSeparationLine(BusinessObject businessObject); 132 }