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 java.util.Locale;
24
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.jsp.JspException;
27 import javax.servlet.jsp.tagext.BodyContent;
28
29 import net.mlw.vlh.web.ValueListConfigBean;
30 import net.mlw.vlh.web.tag.support.ColumnInfo;
31 import net.mlw.vlh.web.util.JspUtils;
32
33 import org.apache.commons.beanutils.PropertyUtils;
34
35 /***
36 *
37 * @ author Matthew L. Wilson, Andrej Zachar
38 * @version $Revision: 1.10 $ $Date: 2006/01/06 10:53:54 $
39 */
40 public class DefaultColumnCheckBoxTag extends BaseColumnTag
41 {
42
43 private String name;
44
45 private String property;
46
47 /***
48 * @see javax.servlet.jsp.tagext.Tag#doEndTag()
49 */
50 public int doEndTag() throws JspException
51 {
52
53 ValueListSpaceTag rootTag = (ValueListSpaceTag) JspUtils.getParent(this, ValueListSpaceTag.class);
54 ValueListConfigBean config = rootTag.getConfig();
55
56 DefaultRowTag rowTag = (DefaultRowTag) JspUtils.getParent(this, DefaultRowTag.class);
57 appendClassCellAttribute(rowTag.getRowStyleClass());
58
59 Locale locale = config.getLocaleResolver().resolveLocale((HttpServletRequest) pageContext.getRequest());
60
61 if (rowTag.getCurrentRowNumber() == 0)
62 {
63 String titleKey = getTitleKey();
64 String label = (titleKey == null) ? getTitle() : config.getMessageSource().getMessage(titleKey, null, titleKey, locale);
65
66 StringBuffer header = new StringBuffer(512);
67 if (label != null)
68 {
69 header.append(label);
70 }
71
72 header
73 .append("<input type=\"checkbox\" onclick=\"for(i=0; i < this.form.elements.length; i++) {if (this.form.elements[i].name=='")
74 .append(getName()).append("') {this.form.elements[i].checked = this.checked;}}\"/>");
75
76 ColumnInfo columnInfo = new ColumnInfo(config.getDisplayHelper().help(pageContext, header.toString()), property, null,
77 getAttributes());
78
79
80
81 String toolTipKey = getToolTipKey();
82 columnInfo.setToolTip((toolTipKey == null) ? getToolTip() : config.getMessageSource().getMessage(toolTipKey, null, toolTipKey,
83 locale));
84
85 rowTag.addColumnInfo(columnInfo);
86 }
87
88 Object bean = pageContext.getAttribute(rowTag.getBeanName());
89 Object value = "na";
90
91 try
92 {
93 value = PropertyUtils.getProperty(bean, property);
94 }
95 catch (Exception e)
96 {
97 }
98
99 StringBuffer sb = new StringBuffer();
100
101 sb.append(rowTag.getDisplayProvider().getCellPreProcess(getCellAttributes()));
102
103 BodyContent bodyContent = getBodyContent();
104 if (bodyContent != null && bodyContent.getString() != null && bodyContent.getString().length() > 0)
105 {
106 sb.append(bodyContent.getString());
107 bodyContent.clearBody();
108 }
109 else
110 {
111 sb.append("<input type=\"checkbox\" name=\"").append(name).append("\" value=\"").append(value).append("\"/>");
112 }
113
114 sb.append(rowTag.getDisplayProvider().getCellPostProcess());
115 JspUtils.write(pageContext, sb.toString());
116
117 release();
118
119 return EVAL_PAGE;
120 }
121
122 /***
123 * @return Returns the property.
124 */
125 public String getProperty()
126 {
127 return this.property;
128 }
129
130 /***
131 * @param property The property to set.
132 */
133 public void setProperty(String property)
134 {
135 this.property = property;
136 }
137
138 /***
139 * @return Returns the name.
140 */
141 public String getName()
142 {
143 return this.name;
144 }
145
146 /***
147 * @param name The name to set.
148 */
149 public void setName(String name)
150 {
151 this.name = name;
152 }
153
154 private void reset()
155 {
156 this.name = null;
157 this.property = null;
158 }
159
160 /***
161 * Called on a Tag handler to release state.
162 * The page compiler guarantees that JSP page implementation
163 * objects will invoke this method on all tag handlers,
164 * but there may be multiple invocations on doStartTag and doEndTag in between.
165 *
166 * @see javax.servlet.jsp.tagext.Tag#release()
167 */
168 public void release()
169 {
170 super.release();
171 reset();
172 }
173 }