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.ArrayList; 019 import java.util.List; 020 021 import javax.servlet.jsp.JspException; 022 import javax.servlet.jsp.PageContext; 023 import javax.servlet.jsp.tagext.Tag; 024 025 import org.kuali.kfs.sys.document.web.renderers.TableRowRenderer; 026 import org.kuali.rice.kns.web.ui.Field; 027 028 /** 029 * Represents a table row to display in an accounting view table. 030 */ 031 public class AccountingLineTableRow implements RenderableElement { 032 private List<AccountingLineTableCell> cells; 033 private AccountingLineRenderingContext renderingContext; 034 035 /** 036 * Constructs a AccountingLineTableRow 037 */ 038 public AccountingLineTableRow() { 039 cells = new ArrayList<AccountingLineTableCell>(); 040 } 041 042 /** 043 * Gets the cells attribute. 044 * @return Returns the cells. 045 */ 046 public List<AccountingLineTableCell> getCells() { 047 return cells; 048 } 049 050 /** 051 * Sets the cells attribute value. 052 * @param cells The cells to set. 053 */ 054 public void setCells(List<AccountingLineTableCell> cells) { 055 this.cells = cells; 056 } 057 058 /** 059 * Adds a new table cell to the row 060 * @param cell the cell to add to the row 061 */ 062 public void addCell(AccountingLineTableCell cell) { 063 cells.add(cell); 064 } 065 066 /** 067 * @see org.kuali.kfs.sys.document.web.RenderableElement#isHidden() 068 */ 069 public boolean isHidden() { 070 for (AccountingLineTableCell cell : cells) { 071 if (!cell.isHidden()) { 072 return false; 073 } 074 } 075 return true; 076 } 077 078 /** 079 * This is not an action block 080 * @see org.kuali.kfs.sys.document.web.RenderableElement#isActionBlock() 081 */ 082 public boolean isActionBlock() { 083 return false; 084 } 085 086 /** 087 * @see org.kuali.kfs.sys.document.web.RenderableElement#isEmpty() 088 */ 089 public boolean isEmpty() { 090 for (AccountingLineTableCell cell : cells) { 091 if (!cell.isEmpty()) { 092 return false; 093 } 094 } 095 return true; 096 } 097 098 /** 099 * @see org.kuali.kfs.sys.document.web.RenderableElement#renderElement(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag) 100 */ 101 public void renderElement(PageContext pageContext, Tag parentTag, AccountingLineRenderingContext renderingContext) throws JspException { 102 TableRowRenderer renderer = new TableRowRenderer(); 103 this.renderingContext = renderingContext; 104 renderer.setRow(this); 105 renderer.render(pageContext, parentTag); 106 renderer.clear(); 107 this.renderingContext = null; 108 } 109 110 /** 111 * Requests that the row renders all of its children cells 112 * @param pageContext the page contex to render to 113 * @param parentTag the tag requesting all this rendering 114 * @param accountingLine the accounting line to render 115 * @param accountingLineProperty the property from the form to the accounting line 116 * @throws JspException exception thrown when...something...goes, I don't know...wrong or somethin' 117 */ 118 public void renderChildrenCells(PageContext pageContext, Tag parentTag) throws JspException { 119 for (AccountingLineTableCell cell : cells) { 120 cell.renderElement(pageContext, parentTag, renderingContext); 121 } 122 } 123 124 /** 125 * Returns the number of children cells this row has 126 * @return the number of children cells this row has 127 */ 128 public int getChildCellCount() { 129 return cells.size(); 130 } 131 132 /** 133 * Dutifully appends the names of any fields it knows about to the given List of field names 134 * @param fieldNames a List of field names to append other names to 135 */ 136 public void appendFields(List<Field> fields) { 137 for (AccountingLineTableCell cell : cells) { 138 cell.appendFields(fields); 139 } 140 } 141 142 /** 143 * @see org.kuali.kfs.sys.document.web.RenderableElement#populateWithTabIndexIfRequested(int[], int) 144 */ 145 public void populateWithTabIndexIfRequested(int reallyHighIndex) { 146 for (AccountingLineTableCell cell : cells) { 147 cell.populateWithTabIndexIfRequested(reallyHighIndex); 148 } 149 } 150 151 /** 152 * Determines whether each cell is safe to remove; if so, simply removes that cell 153 * @return true if the row can be safely removed; false otherwise 154 */ 155 public boolean safeToRemove() { 156 for (AccountingLineTableCell cell : cells) { 157 if (!cell.safeToRemove()) return false; 158 } 159 return true; 160 } 161 }