/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.gui.legacy.taglib.display;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
/**
* This class is a two in one decorator/tag for use within the <code>TableTag</code>; it is a <code>
* ColumnDecorator</code> tag that that creates a column of image buttons.
*/
public class ImageButtonDecorator extends ColumnDecorator implements Tag {
//----------------------------------------------------static variables
private static Log log = LogFactory.getLog(ImageButtonDecorator.class.getName());
//----------------------------------------------------instance variables
private PageContext context;
private Tag parent;
private String form = null;
private String input = null;
private String page = null;
//----------------------------------------------------constructors
public ImageButtonDecorator() {
super();
}
//----------------------------------------------------public methods
public String getForm() {
return this.form;
}
public void setForm(String n) {
this.form = n;
}
public String getInput() {
return this.input;
}
public void setInput(String n) {
this.input = n;
}
public String getPage() {
return this.page;
}
public void setPage(String page) {
this.page = page;
}
public String decorate(Object obj) {
String formName = null;
try {
formName = (String) evalAttr("form", this.form, String.class);
} catch (NullAttributeException ne) {
log.debug("bean " + this.form + " not found");
return "";
} catch (JspException je) {
log.debug("can't evaluate form type [" + this.form + "]: ", je);
return "";
}
HttpServletRequest req = (HttpServletRequest) context.getRequest();
String src = req.getContextPath() + page;
StringBuffer buf = new StringBuffer();
buf.append("<input type=\"image\" ");
buf.append("src=\"");
buf.append(src);
buf.append("\" ");
buf.append("border=\"0\" onClick=\"clickSelect('");
buf.append(formName);
buf.append("', '");
buf.append(getInput());
buf.append("', '");
buf.append(obj.toString());
buf.append("');\">");
return buf.toString();
}
public int doStartTag() throws JspTagException {
ColumnTag ancestorTag = (ColumnTag) TagSupport.findAncestorWithClass(this, ColumnTag.class);
if (ancestorTag == null) {
throw new JspTagException("A CheckboxDecorator must be used within a ColumnTag.");
}
ancestorTag.setDecorator(this);
return SKIP_BODY;
}
public int doEndTag() {
return EVAL_PAGE;
}
public Tag getParent() {
return parent;
}
public void setParent(Tag t) {
this.parent = t;
}
public void setPageContext(PageContext pc) {
this.context = pc;
}
public void release() {
form = null;
input = null;
page = null;
parent = null;
context = null;
}
private Object evalAttr(String name, String value, Class type) throws JspException, NullAttributeException {
return ExpressionUtil.evalNotNull("imagebuttondecorator", name, value, type, this, context);
}
}