/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.sys.document.web;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import org.kuali.kfs.sys.document.web.renderers.TableRowRenderer;
import org.kuali.rice.kns.web.ui.Field;
/**
* Represents a table row to display in an accounting view table.
*/
public class AccountingLineTableRow implements RenderableElement {
private List<AccountingLineTableCell> cells;
private AccountingLineRenderingContext renderingContext;
/**
* Constructs a AccountingLineTableRow
*/
public AccountingLineTableRow() {
cells = new ArrayList<AccountingLineTableCell>();
}
/**
* Gets the cells attribute.
* @return Returns the cells.
*/
public List<AccountingLineTableCell> getCells() {
return cells;
}
/**
* Sets the cells attribute value.
* @param cells The cells to set.
*/
public void setCells(List<AccountingLineTableCell> cells) {
this.cells = cells;
}
/**
* Adds a new table cell to the row
* @param cell the cell to add to the row
*/
public void addCell(AccountingLineTableCell cell) {
cells.add(cell);
}
/**
* @see org.kuali.kfs.sys.document.web.RenderableElement#isHidden()
*/
public boolean isHidden() {
for (AccountingLineTableCell cell : cells) {
if (!cell.isHidden()) {
return false;
}
}
return true;
}
/**
* This is not an action block
* @see org.kuali.kfs.sys.document.web.RenderableElement#isActionBlock()
*/
public boolean isActionBlock() {
return false;
}
/**
* @see org.kuali.kfs.sys.document.web.RenderableElement#isEmpty()
*/
public boolean isEmpty() {
for (AccountingLineTableCell cell : cells) {
if (!cell.isEmpty()) {
return false;
}
}
return true;
}
/**
* @see org.kuali.kfs.sys.document.web.RenderableElement#renderElement(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
*/
public void renderElement(PageContext pageContext, Tag parentTag, AccountingLineRenderingContext renderingContext) throws JspException {
TableRowRenderer renderer = new TableRowRenderer();
this.renderingContext = renderingContext;
renderer.setRow(this);
renderer.render(pageContext, parentTag);
renderer.clear();
this.renderingContext = null;
}
/**
* Requests that the row renders all of its children cells
* @param pageContext the page contex to render to
* @param parentTag the tag requesting all this rendering
* @param accountingLine the accounting line to render
* @param accountingLineProperty the property from the form to the accounting line
* @throws JspException exception thrown when...something...goes, I don't know...wrong or somethin'
*/
public void renderChildrenCells(PageContext pageContext, Tag parentTag) throws JspException {
for (AccountingLineTableCell cell : cells) {
cell.renderElement(pageContext, parentTag, renderingContext);
}
}
/**
* Returns the number of children cells this row has
* @return the number of children cells this row has
*/
public int getChildCellCount() {
return cells.size();
}
/**
* @return returns the number of cells which will actually be rendered (ie, colspans are taken into account)
*/
public int getChildRenderableCount() {
int count = 0;
for (AccountingLineTableCell cell : cells) {
count += cell.getColSpan();
}
return count;
}
/**
* Dutifully appends the names of any fields it knows about to the given List of field names
* @param fieldNames a List of field names to append other names to
*
* KRAD Conversion: Customization of the fields - No use of data dictionary
*/
public void appendFields(List<Field> fields) {
for (AccountingLineTableCell cell : cells) {
cell.appendFields(fields);
}
}
/**
* @see org.kuali.kfs.sys.document.web.RenderableElement#populateWithTabIndexIfRequested(int[], int)
*/
public void populateWithTabIndexIfRequested(int reallyHighIndex) {
for (AccountingLineTableCell cell : cells) {
cell.populateWithTabIndexIfRequested(reallyHighIndex);
}
}
/**
* Determines whether each cell is safe to remove; if so, simply removes that cell
* @return true if the row can be safely removed; false otherwise
*/
public boolean safeToRemove() {
for (AccountingLineTableCell cell : cells) {
if (!cell.safeToRemove()) return false;
}
return true;
}
}