001/* 002 * Copyright 2008 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 */ 016package org.kuali.ole.sys.document.web; 017 018import java.util.ArrayList; 019import java.util.List; 020 021import javax.servlet.jsp.JspException; 022import javax.servlet.jsp.PageContext; 023import javax.servlet.jsp.tagext.Tag; 024 025import org.kuali.ole.sys.document.web.renderers.TableCellRenderer; 026import org.kuali.ole.sys.document.web.renderers.TableHeaderRenderer; 027import org.kuali.rice.kns.web.ui.Field; 028 029/** 030 * A class which represents a number of fields held in a table cell. 031 */ 032public class AccountingLineTableCell implements RenderableElement { 033 private int rowSpan = 1; 034 private int colSpan = 1; 035 private List<RenderableElement> renderableElements = new ArrayList<RenderableElement>(); 036 private boolean rendersAsHeader = false; 037 private AccountingLineRenderingContext renderingContext; 038 private boolean neverEmpty; 039 private String extraStyle; 040 private String styleClassOverride; 041 042 /** 043 * Gets the colSpan attribute. 044 * @return Returns the colSpan. 045 */ 046 public int getColSpan() { 047 return colSpan; 048 } 049 /** 050 * Sets the colSpan attribute value. 051 * @param colSpan The colSpan to set. 052 */ 053 public void setColSpan(int colSpan) { 054 if (colSpan > 1) { 055 this.colSpan = colSpan; 056 } 057 } 058 059 /** 060 * Gets the rowSpan attribute. 061 * @return Returns the rowSpan. 062 */ 063 public int getRowSpan() { 064 return rowSpan; 065 } 066 /** 067 * Sets the rowSpan attribute value. 068 * @param rowSpan The rowSpan to set. 069 */ 070 public void setRowSpan(int rowSpan) { 071 if (rowSpan > 1) { 072 this.rowSpan = rowSpan; 073 } 074 } 075 076 /** 077 * Gets the renderableElement attribute. 078 * @return Returns the renderableElement. 079 */ 080 public List<RenderableElement> getRenderableElement() { 081 return renderableElements; 082 } 083 084 /** 085 * Sets the renderableElement attribute value. 086 * @param renderableElement The renderableElement to set. 087 */ 088 public void setRenderableElement(List<RenderableElement> renderableElement) { 089 this.renderableElements = renderableElement; 090 } 091 092 /** 093 * Adds a renderable element to the elements this cell can render 094 * @param element another element to render within this cell 095 */ 096 public void addRenderableElement(RenderableElement element) { 097 renderableElements.add(element); 098 } 099 100 /** 101 * @see org.kuali.ole.sys.document.web.RenderableElement#isHidden() 102 */ 103 public boolean isHidden() { 104 for (RenderableElement element : renderableElements) { 105 if (!element.isHidden()) { 106 return false; 107 } 108 } 109 return true; 110 } 111 112 /** 113 * This is not an action block 114 * @see org.kuali.ole.sys.document.web.RenderableElement#isActionBlock() 115 */ 116 public boolean isActionBlock() { 117 return false; 118 } 119 120 /** 121 * @see org.kuali.ole.sys.document.web.RenderableElement#isEmpty() 122 */ 123 public boolean isEmpty() { 124 if (neverEmpty) return false; 125 for (RenderableElement element : renderableElements) { 126 if (!element.isEmpty()) { 127 return false; 128 } 129 } 130 return true; 131 } 132 133 /** 134 * Gets the rendersAsHeader attribute. 135 * @return Returns the rendersAsHeader. 136 */ 137 public boolean isRendersAsHeader() { 138 return rendersAsHeader; 139 } 140 /** 141 * Sets the rendersAsHeader attribute value. 142 * @param rendersAsHeader The rendersAsHeader to set. 143 */ 144 public void setRendersAsHeader(boolean rendersAsHeader) { 145 this.rendersAsHeader = rendersAsHeader; 146 } 147 148 /** 149 * Gets the extraStyle attribute. 150 * @return Returns the extraStyle. 151 */ 152 public String getExtraStyle() { 153 return extraStyle; 154 } 155 /** 156 * Sets the extraStyle attribute value. 157 * @param extraStyle The extraStyle to set. 158 */ 159 public void setExtraStyle(String extraStyle) { 160 this.extraStyle = extraStyle; 161 } 162 163 /** 164 * Gets the neverEmpty attribute. 165 * @return Returns the neverEmpty. 166 */ 167 public boolean isNeverEmpty() { 168 return neverEmpty; 169 } 170 /** 171 * Sets the neverEmpty attribute value. 172 * @param neverEmpty The neverEmpty to set. 173 */ 174 public void setNeverEmpty(boolean neverEmpty) { 175 this.neverEmpty = neverEmpty; 176 } 177 178 /** 179 * Gets the styleClassOverride attribute. 180 * @return Returns the styleClassOverride. 181 */ 182 public String getStyleClassOverride() { 183 return styleClassOverride; 184 } 185 /** 186 * Sets the styleClassOverride attribute value. 187 * @param styleClassOverride The styleClassOverride to set. 188 */ 189 public void setStyleClassOverride(String styleClassOverride) { 190 this.styleClassOverride = styleClassOverride; 191 } 192 /** 193 * @see org.kuali.ole.sys.document.web.RenderableElement#renderElement(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag) 194 */ 195 public void renderElement(PageContext pageContext, Tag parentTag, AccountingLineRenderingContext renderingContext) throws JspException { 196 TableCellRenderer renderer; 197 if (isRendersAsHeader()) { 198 renderer = new TableHeaderRenderer(); 199 } else { 200 renderer = new TableCellRenderer(); 201 } 202 this.renderingContext = renderingContext; 203 renderer.setCell(this); 204 renderer.render(pageContext, parentTag); 205 renderer.clear(); 206 this.renderingContext = null; 207 } 208 209 /** 210 * Requests that this cell render all of its children cells 211 * @param pageContext the page context of the rendering 212 * @param parentTag the parent tag requesting all this rendering 213 * @param accountingLine the accounting line getting rendered 214 * @param accountingLineProperty the property to get from the form to the accounting line 215 * @throws JspException Oh. Shoot. Something went...wrong. 216 */ 217 public void renderChildrenElements(PageContext pageContext, Tag parentTag) throws JspException { 218 for (RenderableElement element : renderableElements) { 219 element.renderElement(pageContext, parentTag, renderingContext); 220 } 221 } 222 223 /** 224 * Determines if this cell has child elements 225 * @return True if this cell has child elements, false otherwise 226 */ 227 public boolean hasChildElements() { 228 return renderableElements != null && renderableElements.size() > 0; 229 } 230 231 /** 232 * Goes through fields, appending field names 233 * @see org.kuali.ole.sys.document.web.RenderableElement#appendFieldNames(java.util.List) 234 * 235 * KRAD Conversion: Customization of the fields - No use of data dictionary 236 */ 237 public void appendFields(List<Field> fields) { 238 for (RenderableElement element : renderableElements) { 239 element.appendFields(fields); 240 } 241 } 242 243 /** 244 * @see org.kuali.ole.sys.document.web.RenderableElement#populateWithTabIndexIfRequested(int[], int) 245 */ 246 public void populateWithTabIndexIfRequested(int reallyHighIndex) { 247 for (RenderableElement element : renderableElements) { 248 element.populateWithTabIndexIfRequested(reallyHighIndex); 249 } 250 } 251 252 /** 253 * Determines if this field is safe to remove. If any child elements are instances of FieldTableJoining, then it assumes not 254 * @return true if this cell is safe to remove; false otherwise 255 */ 256 public boolean safeToRemove() { 257 for (RenderableElement element : renderableElements) { 258 if (element instanceof FieldTableJoining) return false; 259 } 260 return true; 261 } 262}