/* * RHQ Management Platform * Copyright (C) 2009-2010 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.core.gui.table.component; import org.ajax4jsf.event.AjaxSource; import org.jetbrains.annotations.NotNull; import org.rhq.core.gui.util.FacesExpressionUtility; import javax.el.ValueExpression; import javax.faces.component.html.HtmlCommandButton; import javax.faces.context.FacesContext; /** * An HTML component that allows rows in data tables (i.e. h:dataTables or rich:*dataTables) to be selected via either * checkboxes (if in multi-select mode) or via radio buttons (if in single-select mode). TODO * * @author Ian Springer */ public class SelectedRowsCommandButtonComponent extends HtmlCommandButton { private String dataTableId; private Integer minimum = DEFAULT_MINIMUM; private Integer maximum; public static final String COMPONENT_TYPE = "org.rhq.SelectedRowsCommandButton"; public static final String COMPONENT_FAMILY = "org.rhq.SelectedRowsCommandButton"; private static final Integer DEFAULT_MINIMUM = 1; @Override public String getFamily() { return COMPONENT_FAMILY; } public String getDataTableId() { if (this.dataTableId != null) { return this.dataTableId; } this.dataTableId = (String) getBinding("dataTableId"); return this.dataTableId; } public void setDataTableId(String dataTableId) { this.dataTableId = dataTableId; } @NotNull public Integer getMinimum() { if (this.minimum != null) { return this.minimum; } ValueExpression valueExpression = this.getValueExpression("minimum"); if (valueExpression != null) { Object value = FacesExpressionUtility.getValue(valueExpression, Object.class); // If the user explicitly specified null, this means there is no minimum. We store this internally as 0. this.minimum = (value == null) ? 0 : minimum; } else { this.minimum = DEFAULT_MINIMUM; } return this.minimum; } public void setMinimum(Integer minimum) { if (minimum != null && minimum < 0) { throw new IllegalArgumentException("value of 'minimum' attribute is not >= 0."); } // If the user explicitly specified null, this means there is no minimum. We store this internally as 0. this.minimum = (minimum == null) ? 0 : minimum; } public Integer getMaximum() { if (this.maximum != null) { return this.maximum; } this.maximum = (Integer) getBinding("maximum"); return this.maximum; } public void setMaximum(Integer maximum) { if (maximum != null && maximum < 0) { throw new IllegalArgumentException("value of 'maximum' attribute is not >= 0."); } this.maximum = maximum; } @Override public Object saveState(FacesContext context) { Object[] values = new Object[4]; values[0] = super.saveState(context); values[1] = this.dataTableId; values[2] = this.minimum; values[3] = this.maximum; return values; } @Override public void restoreState(FacesContext context, Object state) { Object[] values = (Object[]) state; super.restoreState(context, values[0]); this.dataTableId = (String) values[1]; this.minimum = (Integer) values[2]; this.maximum = (Integer) values[3]; } private Object getBinding(@NotNull String attributeName) { ValueExpression valueExpression = this.getValueExpression(attributeName); return (valueExpression != null) ? FacesExpressionUtility.getValue(valueExpression, Object.class) : null; } }