/* * 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.common.table; import javax.el.ValueExpression; import javax.faces.component.UIInput; import javax.faces.context.FacesContext; import org.rhq.core.gui.util.FacesExpressionUtility; public class Select extends UIInput { private String name; private String type; private String label; private Object value; private Boolean disabled; private String onchange; public static final String COMPONENT_TYPE = "org.jboss.on.Select"; public static final String COMPONENT_FAMILY = "org.jboss.on.Select"; @Override public String getFamily() { return COMPONENT_FAMILY; } /* * Currently not used; the renderer needs to be updated to support labeling the radio/checkbox */ public String getLabel() { if (label != null) { return label; } return (String) getBinding("label"); } public void setLabel(String label) { this.label = label; } /* * The attribute off of which other components are registered, such as AllSelect and SelectCommandButton */ public String getName() { if (name != null) { return name; } return (String) getBinding("name"); } public void setName(String name) { this.name = name; } /* * Each of this component's instances, when selected, will fire a javascript method which enabled / disables itself * conditionally */ public String getOnclick() { return "updateButtons('" + getName() + "');"; } public String getOnchange() { return this.onchange; } public void setOnchange(String onchange) { this.onchange = onchange; } /* * This is the content that will be stored behind the radio/checkbox dom element; when the form is submitted, this * is the value that will be passed to the managed bean. */ @Override public Object getValue() { if (value != null) { return value; } return getBinding("value"); } @Override public void setValue(Object value) { this.value = value; } /* * "radio" or "checkbox" - i.e. select one or select many */ public String getType() { return type; } public void setType(String type) { this.type = type; } /* * It is preferred to use the disabled attribute of this component instead of the rendered attribute. This will * provide consistency to the rendered table such as regardless of what items appear in the table, the check-able * column will always be rendered with a consistent thickness. */ public Boolean isDisabled() { if (disabled != null) { return disabled; } try { disabled = (Boolean) getBinding("disabled"); } catch (NullPointerException npe) { return false; } return (disabled != null) && disabled; } public void setDisabled(Boolean disabled) { this.disabled = disabled; } @Override public Object saveState(FacesContext context) { Object[] values = new Object[6]; values[0] = super.saveState(context); values[1] = name; values[2] = label; values[3] = value; values[4] = disabled; values[5] = type; return values; } @Override public void restoreState(FacesContext context, Object state) { Object[] values = (Object[]) state; super.restoreState(context, values[0]); name = (String) values[1]; label = (String) values[2]; value = values[3]; disabled = (Boolean) values[4]; type = (String) values[5]; } public Object getBinding(String attr) { if (attr == null) { throw new NullPointerException("passed attribute is null"); } ValueExpression valueExpression = this.getValueExpression(attr); Object attribValue = (valueExpression != null) ? FacesExpressionUtility.getValue(valueExpression, Object.class) : null; return attribValue; } }