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.web;
17
18 import java.util.List;
19 import java.util.Map;
20
21 import org.kuali.ole.sys.businessobject.AccountingLine;
22 import org.kuali.ole.sys.document.AccountingDocument;
23 import org.kuali.ole.sys.web.struts.KualiAccountingDocumentFormBase;
24
25 /**
26 * A contract for classes which wish to provide information about an accounting line which is being rendered
27 */
28 public interface AccountingLineRenderingContext extends RenderableElement {
29
30 /**
31 * @return the accounting line that would be rendered by the rendering of the given accounting line context
32 */
33 public abstract AccountingLine getAccountingLine();
34
35 /**
36 * @return the property path from the form to the accounting line returned by the getAccountingLine() method
37 */
38 public abstract String getAccountingLinePropertyPath();
39
40 /**
41 * @return a List of actions which can be performed on the given line
42 */
43 public abstract List<AccountingLineViewAction> getActionsForLine();
44
45 /**
46 * Tells callers if fields should render help or not
47 * @return true if fields should render help, false otherwise
48 */
49 public abstract boolean fieldsShouldRenderHelp();
50
51 /**
52 * Tells callers if dynamic field labels should even be rendered
53 * @return true if dynamic field labels can be labeled, false if they should not be labeled.
54 */
55 public abstract boolean fieldsCanRenderDynamicLabels();
56
57 /**
58 * Reports whether the tag to be rendered by this rendering context is "new" - ie, not added yet to the accounting group, but living on the form somewhere - or not
59 * @return true if the line is new, false otherwise
60 */
61 public abstract boolean isNewLine();
62
63 /**
64 * If this is a new line, returns null; if it is a line in a collection, returns the line number within that collection
65 * @return the current line count
66 */
67 public abstract Integer getCurrentLineCount();
68
69 /**
70 * Returns all the field names for the given accounting line, prefixed by the accounting line property path
71 * @return a list of properly prefixed field names
72 */
73 public abstract List<String> getFieldNamesForAccountingLine();
74
75 /**
76 * Returns a Map of all values from the request which were unconverted to actuall business objects
77 * @return the Map of unconverted values
78 */
79 public abstract Map getUnconvertedValues();
80
81 /**
82 * Forces the population of values for all fields used to render the accounting line
83 */
84 public abstract void populateValuesForFields();
85
86 /**
87 * @return the accounting document that this line to render is part of (or will be, once it is successfully added)
88 */
89 public abstract AccountingDocument getAccountingDocument();
90
91 /**
92 * Returns the tab state for the given tab key on the current form
93 * @param tabKey the tab key to get the state of
94 * @return the state (either "OPEN" or "CLOSED")
95 */
96 public abstract String getTabState(String tabKey);
97
98 /**
99 * Increments the tab index on the form this rendering is associated with
100 */
101 public abstract void incrementTabIndex();
102
103 /**
104 * @return the label of the group this accounting line is part of
105 */
106 public abstract String getGroupLabel();
107
108 /**
109 * @return the list of errors on the form
110 */
111 public abstract List getErrors();
112
113 /**
114 * @return the form that the rendered accounting line will be associated with
115 */
116 public abstract KualiAccountingDocumentFormBase getForm();
117
118 /**
119 * @return the property name of the object that contains the accounting lines
120 */
121 public abstract String getAccountingLineContainingObjectPropertyName();
122
123 /**
124 * Determines whether a field is modifyable or not
125 * @param fieldName the simple name (that is, the name does not include the collection property) of the field
126 * @return true if the field can be modified, false if the field can only be read
127 */
128 public abstract boolean isFieldModifyable(String fieldName);
129
130 /**
131 * Determines whether the accounting line is - as a whole line - editable or not
132 * @return true if the line - as a whole line - is editable, false if nothing on the line can be edited
133 */
134 public abstract boolean isEditableLine();
135
136 /**
137 * Determines whether this line should be allowed to be deleted
138 * @return true if it should be allowed to be deleted, false otherwise
139 */
140 public abstract boolean allowDelete();
141
142 /**
143 * Makes the line within this accounting line context deletable
144 */
145 public void makeDeletable();
146
147 /**
148 * @return the number of cells that will actually be rendered (ie, colspans are taken into account)
149 */
150 public int getRenderableCellCount();
151
152 /**
153 * Gets the rows attribute.
154 * @return Returns the rows.
155 */
156 public List<AccountingLineTableRow> getRows();
157 }