All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.webui.jsf.renderkit.html.CheckboxGroupRenderer Maven / Gradle / Ivy

There is a newer version: 4.4.0.1
Show newest version
/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License).  You may not use this file except in
 * compliance with the License.
 * 
 * You can obtain a copy of the license at
 * https://woodstock.dev.java.net/public/CDDLv1.0.html.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 * 
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at https://woodstock.dev.java.net/public/CDDLv1.0.html.
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * you own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 * 
 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
 */
package com.sun.webui.jsf.renderkit.html;

import com.sun.faces.annotation.Renderer;
import java.io.IOException;
import java.util.Map;
import java.util.Collection;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import com.sun.webui.jsf.component.Checkbox;
import com.sun.webui.jsf.component.CheckboxGroup;
import com.sun.webui.jsf.model.Option;
import com.sun.webui.theme.Theme;
import com.sun.webui.jsf.theme.ThemeStyles;
import com.sun.webui.jsf.util.ConversionUtilities;
import com.sun.webui.jsf.util.ThemeUtilities;

/**
 * The CheckboxGroupRenderer renders a CheckboxGroup
 * component as set of checkboxes. The CheckboxGroupRenderer
 * creates an instance of Checkbox for each
 * Option instance in the Array, Map, or
 * Collection returned by the CheckboxGroup
 * getItems() method and renders them. It also creates
 * a Label component and renders it as the label for the group.
 * 

* Zero or more checkboxes may be selected. * The value of the CheckboxGroup will determine * which checkboxes shall be initially selected and subsequetly hold * the current selections. *

*

* The checkboxes are rendered as a single column or some number of * rows and columns. The rows and columns are rendered as a table as * defined by the {@link com.sun.webui.jsf.renderkit.html.RowColumnRenderer} superclass. * The elements * that make up the checkbox occupy a cell in the table. * The style class selector for the group elements is identified by a java * constants defined in the {@link com.sun.webui.jsf.theme.ThemeStyles} class. *

*
    *
  • CHECKBOX_GROUP for the TABLE element.
  • *
  • CHECKBOX_GROUP_CAPTION for the TD element containing the group label
  • *
  • CHECKBOX_GROUP_LABEL for the LABEL element used as the CAPTION
  • *
  • CHECKBOX_GROUP_LABEL_DISABLED for the LABEL used as the CAPTION if the * group is disabled
  • *
  • CHECKBOX_GROUP_ROW_EVEN for even TR elements
  • *
  • CHECKBOX_GROUP_ROW_ODD for odd TR elements
  • *
  • CHECKBOX_GROUP_CELL_EVEN for even TD elements
  • *
  • CHECKBOX_GROUP_CELL_ODD for odd TD elements
  • *
  • CHECKBOX for the INPUT element
  • *
  • CHECKBOX_DISABLED for the INPUT element for disabled checkbox
  • *
  • CHECKBOX_LABEL for a LABEL element of a checkbox
  • *
  • CHECKBOX_LABEL_DISABLED for a LABEL element of a disabled checkbox
  • *
  • CHECKBOX_IMAGE for an IMG element of a checkbox
  • *
  • CHECKBOX_IMAGE_DISABLED for an IMG element of a disabled checkbox
  • *
*

* The name property of each checkbox is the component id of the * CheckboxGroup instance. The id of a Checkbox * component is cbgrpid_N where cbgrpid is the id of the * CheckboxGroup instance and _N is the nth checkbox. *

*

* The CheckboxGroup is decoded by identifying the * CheckboxGroup instance component id which is * returned as a request parameter. It represents the name attribute * of the selected checkbox's <input> element. The values of the * identified request parameter are assigned as the submitted value of the * CheckboxGroup component. *

*

* If the items property of the CheckboxGroup is null or * zero length, no output is produced. *

*/ @Renderer(@Renderer.Renders(componentFamily = "com.sun.webui.jsf.CheckboxGroup")) //FIXME check about making SelectGroupRenderer a public abstract class public class CheckboxGroupRenderer extends SelectorGroupRenderer { private final String MSG_COMPONENT_NOT_CHECKBOXGROUP = "CheckboxGroupRenderer only renders CheckboxGroup components.";//NOI18N /** * Creates a new instance of CheckboxGroupRenderer */ public CheckboxGroupRenderer() { super(); } /** * Ensure that the component to be rendered is a CheckboxGroup instance. * Actual rendering occurs during the renderEnd method. * * @param context FacesContext for the request we are processing. * @param component UIComponent to be decoded. */ public void renderStart(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { // Bail out if the component is not a CheckboxGroup component. if (!(component instanceof CheckboxGroup)) { throw new IllegalArgumentException(MSG_COMPONENT_NOT_CHECKBOXGROUP); } } /** * CheckboxGroupRenderer renders the entire CheckboxGroup * component within the renderEnd method. * * @param context FacesContext for the request we are processing. * @param component UIComponent to be decoded. */ public void renderEnd(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { // Use only the cols value. If not valid render a single column. // If there are more items than columns, render additional rows. // CheckboxGroup cbgrp = (CheckboxGroup) component; Theme theme = ThemeUtilities.getTheme(context); renderSelectorGroup(context, component, theme, writer, cbgrp.getColumns()); } /** * Return a Checkbox component to render. * * @param context FacesContext for the current request * @param component CheckboxGroup component rendered * @param theme Theme for the component * @param option the Option being rendered. */ protected UIComponent getSelectorComponent(FacesContext context, UIComponent component, Theme theme, String id, Option option) { CheckboxGroup cbgrp = (CheckboxGroup) component; Checkbox cb = new Checkbox(); cb.setId(id); cb.setParent(cbgrp); cb.setName(cbgrp.getClientId(context)); cb.setToolTip(option.getTooltip()); cb.setImageURL(option.getImage()); cb.setSelectedValue(option.getValue()); cb.setLabel(option.getLabel()); cb.setDisabled(cbgrp.isDisabled()); cb.setReadOnly(cbgrp.isReadOnly()); cb.setTabIndex(cbgrp.getTabIndex()); // mbohm 6300361,6300362 // transfer event attributes from cbgrp to cb // see RowColumnRenderer.renderRowColumnLayout transferEventAttributes(cbgrp, cb); // Default to not selected // cb.setSelected(null); // Need to check the submittedValue for immediate condition // String[] subValue = (String[]) cbgrp.getSubmittedValue(); if (subValue == null) { if (isSelected(option, cbgrp.getSelected())) { cb.setSelected(cb.getSelectedValue()); } } else if (subValue.length != 0) { Object selectedValue = cb.getSelectedValue(); String selectedValueAsString = ConversionUtilities.convertValueToString(component, selectedValue); for (int i = 0; i < subValue.length; ++i) { if (subValue[i] != null && subValue[i].equals(selectedValueAsString)) { cb.setSelected(cb.getSelectedValue()); break; } } } return cb; } /** * Return true if the item argument is the currently * selected checkbox. Equality is determined by the equals * method of the object instance stored as the value of * item. Return false otherwise. * * @param item the current checkbox being rendered. * @param currentValue the value of the current selected checkbox. */ private boolean isSelected(Option item, Object currentValue) { // How is the selected value determined ? // Is it the Selection value on CheckboxGroup or // the boolean value on the current Selection being processed ? // Object value = item.getValue(); if (value == null || currentValue == null) { return false; } if (currentValue instanceof Map) { return ((Map) currentValue).containsValue(value); } else if (currentValue instanceof Collection) { return ((Collection) currentValue).contains(value); } else if (currentValue instanceof Object[]) { Object[] selectedValues = (Object[]) currentValue; for (int i = 0; i < selectedValues.length; ++i) { if (value.equals(selectedValues[i])) { return true; } } } return false; } /** * The style constants defined in {@link com.sun.webui.jsf.theme.ThemeStyles} mapped * to the value of constants defined in * {@link com.sun.webui.jsf.renderkit.html.SelectorGroupRenderer}. */ protected String[] styles = { ThemeStyles.CHECKBOX_GROUP, /* GRP */ ThemeStyles.CHECKBOX_GROUP_CAPTION, /* GRP_CAPTION */ ThemeStyles.CHECKBOX_GROUP_LABEL, /* GRP_LABEL */ ThemeStyles.CHECKBOX_GROUP_LABEL_DISABLED, /* GRP_LABEL_DIS */ ThemeStyles.CHECKBOX_GROUP_ROW_EVEN, /* GRP_ROW_EVEN */ ThemeStyles.CHECKBOX_GROUP_ROW_ODD, /* GRP_ROW_EVEN */ ThemeStyles.CHECKBOX_GROUP_CELL_EVEN, /* GRP_CELL_EVEN */ ThemeStyles.CHECKBOX_GROUP_CELL_ODD, /* GRP_CELL_ODD */ ThemeStyles.CHECKBOX, /* INPUT */ ThemeStyles.CHECKBOX_DISABLED, /* INPUT_DIS */ ThemeStyles.CHECKBOX_LABEL, /* LABEL */ ThemeStyles.CHECKBOX_LABEL_DISABLED, /* LABEL_DIS */ ThemeStyles.CHECKBOX_IMAGE, /* IMAGE */ ThemeStyles.CHECKBOX_IMAGE_DISABLED, /* IMAGE_DIS */ ThemeStyles.LABEL_LEVEL_ONE_TEXT, /* LABEL_LVL1 */ ThemeStyles.LABEL_LEVEL_TWO_TEXT, /* LABEL_LVL2 */ ThemeStyles.LABEL_LEVEL_THREE_TEXT /* LABLE_LVL3 */}; /** * Return style constants for a Checkbox component. */ protected String[] getStyles() { return styles; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy