/* * 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.renderers; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.sys.document.web.AccountingLineTableCell; /** * Renders a cell within a table */ public class TableCellRenderer implements Renderer { private AccountingLineTableCell cell; /** * Resets the cell to null * @see org.kuali.kfs.sys.document.web.renderers.Renderer#clear() */ public void clear() { this.cell = null; } /** * Renders the table cell as a header cell as well as rendering all children renderable elements of the cell * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag) */ public void render(PageContext pageContext, Tag parentTag) throws JspException { JspWriter out = pageContext.getOut(); try { out.write(buildBeginningTag()); if (cell.hasChildElements()) { cell.renderChildrenElements(pageContext, parentTag); } else { out.write(" "); } out.write(buildEndingTag()); } catch (IOException ioe) { throw new JspException("Difficulty rendering table cell", ioe); } } /** * Builds the opening cell tag, ie <td> * @return the opening cell tag */ protected String buildBeginningTag() { StringBuilder builder = new StringBuilder(); builder.append("<"); builder.append(getTagName()); if (cell.getColSpan() > 1) { builder.append(" colspan=\""); builder.append(cell.getColSpan()); builder.append('"'); } if (cell.getRowSpan() > 1) { builder.append(" rowspan=\""); builder.append(cell.getRowSpan()); builder.append('"'); } if (verticallyAlignTowardsTop()) { builder.append(" valign=\"top\""); } if (!StringUtils.isBlank(cell.getExtraStyle())) { builder.append(" style=\""); builder.append(cell.getExtraStyle()); builder.append("\""); } else { builder.append(" class=\""+getStyleClass()+"\""); } builder.append(">\n"); return builder.toString(); } /** * Returns what style class to use - using the styleClassOverride of the cell if possible * @return the styleClassOverride if it exists, otherwise "infoline" */ protected String getStyleClass() { return !StringUtils.isBlank(cell.getStyleClassOverride()) ? cell.getStyleClassOverride() : "infoline"; } /** * Builds the closing cell tag, ie </td> * @return the closing cell tag */ protected String buildEndingTag() { StringBuilder builder = new StringBuilder(); builder.append("</"); builder.append(getTagName()); builder.append(">"); return builder.toString(); } /** * Returns the name of the cell tag we want to create - in this case, "td" * @return the String td, which is the tag name of the tags we want to produce */ protected String getTagName() { return "td"; } /** * Gets the cell attribute. * @return Returns the cell. */ public AccountingLineTableCell getCell() { return cell; } /** * Sets the cell attribute value. * @param cell The cell to set. */ public void setCell(AccountingLineTableCell cell) { this.cell = cell; } /** * Determines if the cell should be veritically aligned to the top * @return true if the cell should vertically align to the top; false otherwise */ protected boolean verticallyAlignTowardsTop() { return true; } }