/** * Licensed under the Artistic License; you may not use this file * except in compliance with the License. * You may obtain a copy of the License at * * http://displaytag.sourceforge.net/license.html * * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.displaytag.tags; import java.util.List; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; import org.displaytag.exception.TagStructureException; import org.displaytag.properties.MediaTypeEnum; import org.displaytag.util.MediaUtil; /** * Display a table footer. Html only, not included in export. * @author Fabrizio Giustina * @author rapruitt * @version $Revision$ ($Author$) */ public class TableFooterTag extends BodyTagSupport implements MediaUtil.SupportsMedia { /** * D1597A17A6. */ private static final long serialVersionUID = 899149338534L; /** * The media supported attribute. */ private List<MediaTypeEnum> supportedMedia; /** * Show the footer as a last table row. */ private boolean showAsLastRow; /** * @see javax.servlet.jsp.tagext.Tag#doEndTag() */ public int doEndTag() throws JspException { TableTag tableTag = (TableTag) findAncestorWithClass(this, TableTag.class); if (tableTag == null) { throw new TagStructureException(getClass(), "footer", "table"); } MediaTypeEnum currentMediaType = (MediaTypeEnum) this.pageContext.findAttribute(TableTag.PAGE_ATTRIBUTE_MEDIA); if (currentMediaType != null && !MediaUtil.availableForMedia(this, currentMediaType)) { return SKIP_BODY; } if (tableTag.isLastIteration()) { if (getBodyContent() != null) { tableTag.setFooter(getBodyContent().getString()); } } return EVAL_PAGE; } /** * @see javax.servlet.jsp.tagext.Tag#doStartTag() */ public int doStartTag() throws JspException { TableTag tableTag = (TableTag) findAncestorWithClass(this, TableTag.class); if (tableTag == null) { throw new TagStructureException(getClass(), "footer", "table"); } MediaTypeEnum currentMediaType = (MediaTypeEnum) this.pageContext.findAttribute(TableTag.PAGE_ATTRIBUTE_MEDIA); if (!MediaUtil.availableForMedia(this, currentMediaType)) { return SKIP_BODY; } // Run the footer only when all of the cells have been populated if (tableTag.isLastIteration()) { if (tableTag.getVarTotals() != null) { Map<String, Double> totals = tableTag.getTotals(); this.pageContext.setAttribute(tableTag.getVarTotals(), totals); } // using int to avoid deprecation error in compilation using j2ee 1.3 (EVAL_BODY_TAG) return 2; } return SKIP_BODY; } /** * @see org.displaytag.util.MediaUtil.SupportsMedia#setSupportedMedia(java.util.List) */ public void setSupportedMedia(List<MediaTypeEnum> media) { this.supportedMedia = media; } /** * @see org.displaytag.util.MediaUtil.SupportsMedia#getSupportedMedia() */ public List<MediaTypeEnum> getSupportedMedia() { return this.supportedMedia; } /** * Tag setter. * @param media the space delimited list of supported types */ public void setMedia(String media) { MediaUtil.setMedia(this, media); } /** * @see javax.servlet.jsp.tagext.Tag#release() */ public void release() { this.supportedMedia = null; this.showAsLastRow = false; super.release(); } /** * Tag setter. * @param showAsLastRow the space delimited list of supported types */ public void setShowAsLastRow(boolean showAsLastRow) { this.showAsLastRow = showAsLastRow; } }