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.document.service; 017 018 import java.util.List; 019 import java.util.Map; 020 import java.util.Set; 021 022 import javax.servlet.jsp.PageContext; 023 024 import org.kuali.kfs.sys.businessobject.AccountingLine; 025 import org.kuali.kfs.sys.document.AccountingDocument; 026 import org.kuali.kfs.sys.document.datadictionary.AccountingLineGroupDefinition; 027 import org.kuali.kfs.sys.document.datadictionary.AccountingLineViewFieldDefinition; 028 import org.kuali.kfs.sys.document.web.AccountingLineTableRow; 029 import org.kuali.kfs.sys.document.web.TableJoining; 030 import org.kuali.kfs.sys.document.web.renderers.FieldRenderer; 031 import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase; 032 import org.kuali.rice.kns.datadictionary.MaintainableFieldDefinition; 033 import org.kuali.rice.kns.web.ui.Field; 034 035 /** 036 * Service that helps render accounting lines 037 */ 038 public interface AccountingLineRenderingService { 039 040 /** 041 * Given a list of renderable elements, determines how to split that into rows, cells, and fields 042 * @param elements renderable elements to find table form for 043 * @return a list of table rows that can be rendered 044 */ 045 public abstract List<AccountingLineTableRow> tablify(List<TableJoining> elements); 046 047 /** 048 * Performs any known transformations against the List of AccountingLineViewRenderableElements 049 * @param elements the List of elements to transform 050 * @param definition the accounting line group definition that gives instructions to the particular rendering we're attempting 051 * @param document the Accounting Document we're rendering lines from 052 * @param accountingLine the line we're rendering 053 * @param newLine true if what is being rendered is the new line in the form; false otherwise 054 * @param unconvertedValues any unconverted values stored in the form 055 * @param accountingLinePropertyName the property path to this accounting line 056 */ 057 public abstract void performPreTablificationTransformations(List<TableJoining> elements, AccountingLineGroupDefinition groupDefinition, AccountingDocument document, AccountingLine accountingLine, boolean newLine, Map unconvertedValues, String accountingLinePropertyName); 058 059 /** 060 * Performs any transformations that should happen after tablification 061 * @param rows the tablified rows 062 * @param groupDefinition the data dictionary definition of the group to render 063 * @param document the Accounting Document we're rendering lines from 064 * @param accountingLine the line we're rendering the line which is being rendered 065 * @param newLine true if what is being rendered is the new line in the form; false otherwise 066 */ 067 public abstract void performPostTablificationTransformations(List<AccountingLineTableRow> rows, AccountingLineGroupDefinition groupDefinition, AccountingDocument document, AccountingLine accountingLine, boolean newLine); 068 069 /** 070 * Looks in likely places to find the form that is used by the page context for rendering an accounting document 071 * @param pageContext the pageContext to find the form in 072 * @return the form for the page being rendered 073 */ 074 public abstract KualiAccountingDocumentFormBase findForm(PageContext pageContext); 075 076 /** 077 * Based on the control type of the field, returns a proper field renderer 078 * @return the field renderer which will properly display this field 079 */ 080 public abstract FieldRenderer getFieldRendererForField(Field field, AccountingLine accountingLineToRender); 081 082 /** 083 * Begins to create an AccountingLineViewFieldDefinition, based on the information held within the given MaintainableFieldDefinition 084 * @param fieldDefinition the field definition to create a generic accounting line view field version of 085 * @return a basic AccountingLineViewFieldDefinition 086 */ 087 public abstract AccountingLineViewFieldDefinition createGenericAccountingLineViewFieldDefinition(MaintainableFieldDefinition fieldDefinition); 088 }