View Javadoc

1   /**
2    * Licensed under the Artistic License; you may not use this file
3    * except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    *      http://displaytag.sourceforge.net/license.html
7    *
8    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
9    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10   * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11   */
12  package org.displaytag.tags;
13  
14  import java.util.List;
15  import java.util.Map;
16  
17  import javax.servlet.jsp.JspException;
18  import javax.servlet.jsp.tagext.BodyTagSupport;
19  
20  import org.displaytag.exception.TagStructureException;
21  import org.displaytag.properties.MediaTypeEnum;
22  import org.displaytag.util.MediaUtil;
23  
24  
25  /**
26   * Display a table footer. Html only, not included in export.
27   * @author Fabrizio Giustina
28   * @author rapruitt
29   * @version $Revision: 1081 $ ($Author: fgiust $)
30   */
31  public class TableFooterTag extends BodyTagSupport implements MediaUtil.SupportsMedia
32  {
33  
34      /**
35       * D1597A17A6.
36       */
37      private static final long serialVersionUID = 899149338534L;
38  
39      /**
40       * The media supported attribute.
41       */
42      private List supportedMedia;
43  
44      /**
45       * Show the footer as a last table row.
46       */
47      private boolean showAsLastRow;
48  
49      /**
50       * @see javax.servlet.jsp.tagext.Tag#doEndTag()
51       */
52      public int doEndTag() throws JspException
53      {
54          TableTag tableTag = (TableTag) findAncestorWithClass(this, TableTag.class);
55  
56          if (tableTag == null)
57          {
58              throw new TagStructureException(getClass(), "footer", "table");
59          }
60  
61          MediaTypeEnum currentMediaType = (MediaTypeEnum) this.pageContext.findAttribute(TableTag.PAGE_ATTRIBUTE_MEDIA);
62          if (currentMediaType != null && !MediaUtil.availableForMedia(this, currentMediaType))
63          {
64              return SKIP_BODY;
65          }
66  
67          if (tableTag.isLastIteration())
68          {
69              if (getBodyContent() != null)
70              {
71                  tableTag.setFooter(getBodyContent().getString());
72              }
73          }
74  
75          return EVAL_PAGE;
76      }
77  
78      /**
79       * @see javax.servlet.jsp.tagext.Tag#doStartTag()
80       */
81      public int doStartTag() throws JspException
82      {
83          TableTag tableTag = (TableTag) findAncestorWithClass(this, TableTag.class);
84  
85          if (tableTag == null)
86          {
87              throw new TagStructureException(getClass(), "footer", "table");
88          }
89  
90          MediaTypeEnum currentMediaType = (MediaTypeEnum) this.pageContext.findAttribute(TableTag.PAGE_ATTRIBUTE_MEDIA);
91          if (!MediaUtil.availableForMedia(this, currentMediaType))
92          {
93              return SKIP_BODY;
94          }
95  
96          // Run the footer only when all of the cells have been populated
97          if (tableTag.isLastIteration())
98          {
99              if (tableTag.getVarTotals() != null)
100             {
101                 Map totals = tableTag.getTotals();
102                 this.pageContext.setAttribute(tableTag.getVarTotals(), totals);
103             }
104             // using int to avoid deprecation error in compilation using j2ee 1.3 (EVAL_BODY_TAG)
105             return 2;
106         }
107 
108         return SKIP_BODY;
109     }
110 
111     /**
112      * @see org.displaytag.util.MediaUtil.SupportsMedia#setSupportedMedia(java.util.List)
113      */
114     public void setSupportedMedia(List media)
115     {
116         this.supportedMedia = media;
117     }
118 
119     /**
120      * @see org.displaytag.util.MediaUtil.SupportsMedia#getSupportedMedia()
121      */
122     public List getSupportedMedia()
123     {
124         return this.supportedMedia;
125     }
126 
127     /**
128      * Tag setter.
129      * @param media the space delimited list of supported types
130      */
131     public void setMedia(String media)
132     {
133         MediaUtil.setMedia(this, media);
134     }
135 
136     /**
137      * @see javax.servlet.jsp.tagext.Tag#release()
138      */
139     public void release()
140     {
141         this.supportedMedia = null;
142         this.showAsLastRow = false;
143         super.release();
144     }
145 
146     /**
147      * Tag setter.
148      * @param showAsLastRow the space delimited list of supported types
149      */
150     public void setShowAsLastRow(boolean showAsLastRow)
151     {
152         this.showAsLastRow = showAsLastRow;
153     }
154 }