1 /*
2 * Copyright 2008 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.document.service;
17
18 import java.util.List;
19 import java.util.Map;
20
21 import javax.servlet.jsp.PageContext;
22
23 import org.kuali.ole.sys.businessobject.AccountingLine;
24 import org.kuali.ole.sys.document.AccountingDocument;
25 import org.kuali.ole.sys.document.datadictionary.AccountingLineGroupDefinition;
26 import org.kuali.ole.sys.document.datadictionary.AccountingLineViewFieldDefinition;
27 import org.kuali.ole.sys.document.web.AccountingLineTableRow;
28 import org.kuali.ole.sys.document.web.TableJoining;
29 import org.kuali.ole.sys.document.web.renderers.FieldRenderer;
30 import org.kuali.ole.sys.web.struts.KualiAccountingDocumentFormBase;
31 import org.kuali.rice.kns.datadictionary.MaintainableFieldDefinition;
32 import org.kuali.rice.kns.web.ui.Field;
33
34 /**
35 * Service that helps render accounting lines
36 */
37 public interface AccountingLineRenderingService {
38
39 /**
40 * Given a list of renderable elements, determines how to split that into rows, cells, and fields
41 * @param elements renderable elements to find table form for
42 * @return a list of table rows that can be rendered
43 */
44 public abstract List<AccountingLineTableRow> tablify(List<TableJoining> elements);
45
46 /**
47 * Performs any known transformations against the List of AccountingLineViewRenderableElements
48 * @param elements the List of elements to transform
49 * @param definition the accounting line group definition that gives instructions to the particular rendering we're attempting
50 * @param document the Accounting Document we're rendering lines from
51 * @param accountingLine the line we're rendering
52 * @param newLine true if what is being rendered is the new line in the form; false otherwise
53 * @param unconvertedValues any unconverted values stored in the form
54 * @param accountingLinePropertyName the property path to this accounting line
55 */
56 public abstract void performPreTablificationTransformations(List<TableJoining> elements, AccountingLineGroupDefinition groupDefinition, AccountingDocument document, AccountingLine accountingLine, boolean newLine, Map unconvertedValues, String accountingLinePropertyName);
57
58 /**
59 * Performs any transformations that should happen after tablification
60 * @param rows the tablified rows
61 * @param groupDefinition the data dictionary definition of the group to render
62 * @param document the Accounting Document we're rendering lines from
63 * @param accountingLine the line we're rendering the line which is being rendered
64 * @param newLine true if what is being rendered is the new line in the form; false otherwise
65 */
66 public abstract void performPostTablificationTransformations(List<AccountingLineTableRow> rows, AccountingLineGroupDefinition groupDefinition, AccountingDocument document, AccountingLine accountingLine, boolean newLine);
67
68 /**
69 * Looks in likely places to find the form that is used by the page context for rendering an accounting document
70 * @param pageContext the pageContext to find the form in
71 * @return the form for the page being rendered
72 */
73 public abstract KualiAccountingDocumentFormBase findForm(PageContext pageContext);
74
75 /**
76 * Based on the control type of the field, returns a proper field renderer
77 * @return the field renderer which will properly display this field
78 */
79 public abstract FieldRenderer getFieldRendererForField(Field field, AccountingLine accountingLineToRender);
80
81 /**
82 * Begins to create an AccountingLineViewFieldDefinition, based on the information held within the given MaintainableFieldDefinition
83 * @param fieldDefinition the field definition to create a generic accounting line view field version of
84 * @return a basic AccountingLineViewFieldDefinition
85 */
86 public abstract AccountingLineViewFieldDefinition createGenericAccountingLineViewFieldDefinition(MaintainableFieldDefinition fieldDefinition);
87 }