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.web; 017 018 import java.util.List; 019 import java.util.Map; 020 021 import org.kuali.kfs.sys.businessobject.AccountingLine; 022 import org.kuali.kfs.sys.document.AccountingDocument; 023 import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase; 024 025 /** 026 * A contract for classes which wish to provide information about an accounting line which is being rendered 027 */ 028 public interface AccountingLineRenderingContext { 029 030 /** 031 * @return the accounting line that would be rendered by the rendering of the given accounting line context 032 */ 033 public abstract AccountingLine getAccountingLine(); 034 035 /** 036 * @return the property path from the form to the accounting line returned by the getAccountingLine() method 037 */ 038 public abstract String getAccountingLinePropertyPath(); 039 040 /** 041 * @return a List of actions which can be performed on the given line 042 */ 043 public abstract List<AccountingLineViewAction> getActionsForLine(); 044 045 /** 046 * Tells callers if fields should render help or not 047 * @return true if fields should render help, false otherwise 048 */ 049 public abstract boolean fieldsShouldRenderHelp(); 050 051 /** 052 * Tells callers if dynamic field labels should even be rendered 053 * @return true if dynamic field labels can be labeled, false if they should not be labeled. 054 */ 055 public abstract boolean fieldsCanRenderDynamicLabels(); 056 057 /** 058 * 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 059 * @return true if the line is new, false otherwise 060 */ 061 public abstract boolean isNewLine(); 062 063 /** 064 * If this is a new line, returns null; if it is a line in a collection, returns the line number within that collection 065 * @return the current line count 066 */ 067 public abstract Integer getCurrentLineCount(); 068 069 /** 070 * Returns all the field names for the given accounting line, prefixed by the accounting line property path 071 * @return a list of properly prefixed field names 072 */ 073 public abstract List<String> getFieldNamesForAccountingLine(); 074 075 /** 076 * Returns a Map of all values from the request which were unconverted to actuall business objects 077 * @return the Map of unconverted values 078 */ 079 public abstract Map getUnconvertedValues(); 080 081 /** 082 * Forces the population of values for all fields used to render the accounting line 083 */ 084 public abstract void populateValuesForFields(); 085 086 /** 087 * @return the accounting document that this line to render is part of (or will be, once it is successfully added) 088 */ 089 public abstract AccountingDocument getAccountingDocument(); 090 091 /** 092 * Returns the tab state for the given tab key on the current form 093 * @param tabKey the tab key to get the state of 094 * @return the state (either "OPEN" or "CLOSED") 095 */ 096 public abstract String getTabState(String tabKey); 097 098 /** 099 * 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 }