1 /***
2 * Copyright (c) 2003 held jointly by the individual authors.
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published
6 * by the Free Software Foundation; either version 2.1 of the License, or
7 * (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; with out even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation,
16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17 *
18 * > http://www.gnu.org/copyleft/lesser.html
19 * > http://www.opensource.org/licenses/lgpl-license.php
20 */
21 package net.mlw.vlh.web.tag;
22
23 import javax.servlet.jsp.JspException;
24 import javax.servlet.jsp.tagext.BodyTagSupport;
25
26 import net.mlw.vlh.web.tag.support.Attributeable;
27 import net.mlw.vlh.web.tag.support.Attributes;
28
29 /***
30 * @author mwilson, azachar
31 * @todo refactor resetCellAtributes to resetAttributes and include attributesString = null.
32 */
33 public class ConfigurableTag extends BodyTagSupport implements Attributeable
34 {
35 private Attributes cellAttributes = new Attributes();
36
37 private String attributesString = null;
38
39 private String initialClassCellAttributes = null;
40
41 /***
42 * It sets initialClassCellAttibutes, if found as name 'class'
43 * @see net.mlw.vlh.web.tag.support.Attributeable#setCellAttribute(java.lang.String,
44 * java.lang.String)
45 */
46 public void setCellAttribute(String name, String value)
47 {
48 cellAttributes.setCellAttribute(name, value);
49 if (name.equalsIgnoreCase("class"))
50 {
51 initialClassCellAttributes = value;
52 }
53 }
54
55 /***
56 * Append to initialClassCellAttibutes this class attribute value
57 * @param value The class attribute value
58 */
59 public void appendClassCellAttribute(String value)
60 {
61 cellAttributes.setCellAttribute("class", initialClassCellAttributes);
62 cellAttributes.appendCellAttribute("class", value);
63 }
64
65 public Attributes getCellAttributes()
66 {
67 return cellAttributes;
68 }
69
70 /***
71 * @return Returns the attributes.
72 */
73 public String getAttributes()
74 {
75 return attributesString;
76 }
77
78 /***
79 * @param attributes
80 * The attributes to set.
81 */
82 public void setAttributes(String attributes)
83 {
84 this.attributesString = attributes;
85 }
86
87 /***
88 * @see javax.servlet.jsp.tagext.Tag#doEndTag()
89 */
90 public int doEndTag() throws JspException
91 {
92 int result = super.doEndTag();
93 resetAttributes();
94 return result;
95 }
96
97 protected void resetAttributes()
98 {
99 cellAttributes.reset();
100 initialClassCellAttributes = null;
101 attributesString = null;
102 }
103
104 /***
105 * Called on a Tag handler to release state.
106 * The page compiler guarantees that JSP page implementation
107 * objects will invoke this method on all tag handlers,
108 * but there may be multiple invocations on doStartTag and doEndTag in between.
109 *
110 * @see javax.servlet.jsp.tagext.Tag#release()
111 */
112 public void release()
113 {
114 super.release();
115 resetAttributes();
116 }
117 }