Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright ${year}, Red Hat, Inc. and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software 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
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.richfaces.renderkit.html;
 
 import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE;
 import static org.richfaces.renderkit.HtmlConstants.TBODY_ELEMENT;
 import static org.richfaces.renderkit.HtmlConstants.TD_ELEM;
 import static org.richfaces.renderkit.HtmlConstants.TR_ELEMENT;
 import static org.richfaces.renderkit.html.TogglePanelRenderer.addEventOption;
 import static org.richfaces.renderkit.html.TogglePanelRenderer.getAjaxOptions;
 
 import java.util.Map;
 
 import  javax.faces.component.UIComponent;
 import  javax.faces.context.FacesContext;
 import  javax.faces.context.ResponseWriter;
 import  javax.faces.event.ActionEvent;
 
 import  org.ajax4jsf.javascript.JSObject;
 import  org.richfaces.component.ComponentIterators;
 import  org.richfaces.renderkit.HtmlConstants;
 import  org.richfaces.renderkit.util.PanelIcons;
 import  org.richfaces.renderkit.util.PanelIcons.State;
 
 import  com.google.common.base.Predicate;

Author(s):
akolonitsky
Since:
2010-10-25
 
 @JsfRenderer(type = "org.richfaces.PanelMenuItemRenderer", family = .)
 public class PanelMenuItemRenderer extends DivPanelRenderer {
     public static final String UNSELECT = "unselect";
     public static final String SELECT = "select";
     public static final String BEFORE_SELECT = "beforeselect";
     private static final String CSS_CLASS_PREFIX = "rf-pm-itm";
     private static final String TOP_CSS_CLASS_PREFIX = "rf-pm-top-itm";
 
     @Override
     protected void doDecode(FacesContext context, UIComponent component) {
 
         Map<StringStringrequestMap = context.getExternalContext().getRequestParameterMap();
 
         AbstractPanelMenuItem menuItem = (AbstractPanelMenuItemcomponent;
         String compClientId = component.getClientId(context);
         if (requestMap.get(compClientId) != null) {
             AbstractPanelMenu pm = getParentPanelMenu(menuItem);
 
             if (pm.isImmediate()) {
                 menuItem.setImmediate(true);
             }
             new ActionEvent(menuItem).queue();
 
             context.getPartialViewContext().getRenderIds().add(component.getClientId(context));
         }
     }
 
     @Override
     protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent componentthrows IOException {
         super.doEncodeBegin(writercontextcomponent);
 
         AbstractPanelMenuItem menuItem = (AbstractPanelMenuItemcomponent;
         encodeHeaderGroupBegin(writercontextmenuItemgetCssClass(menuItem""));
     }
 
     private void encodeHeaderGroupBegin(ResponseWriter writer, FacesContext contextAbstractPanelMenuItem menuItem,
         String classPrefixthrows IOException {
         writer.startElement("table"null);
         writer.writeAttribute(CLASS_ATTRIBUTE, classPrefix + "-gr"null);
         writer.startElement(TBODY_ELEMENT, null);
         writer.startElement(TR_ELEMENT, null);
 
         encodeHeaderGroupLeftIcon(writercontextmenuItemclassPrefix);
        writer.startElement(TD_ELEM, null);
        writer.writeAttribute(CLASS_ATTRIBUTE, classPrefix + "-lbl"null);
        String label = menuItem.getLabel();
        if (label != null) {
            writer.writeText(labelnull);
        }
    }
    private void encodeHeaderGroupEnd(ResponseWriter writer, FacesContext contextAbstractPanelMenuItem menuItem,
        String classPrefixthrows IOException {
        writer.endElement(TD_ELEM);
        encodeHeaderGroupRightIcon(writercontextmenuItemclassPrefix);
        writer.endElement(TR_ELEMENT);
        writer.endElement(TBODY_ELEMENT);
        writer.endElement("table");
    }
    private PanelIcons.State getState(AbstractPanelMenuItem item) {
        return PanelMenuItemRenderer.isParentPanelMenuDisabled(item) || item.isDisabled() ? State.commonDisabled : State.common;
    }
    private void encodeHeaderGroupRightIcon(ResponseWriter writer, FacesContext contextAbstractPanelMenuItem menuItem,
        String classPrefixthrows IOException {
        String icon = PanelMenuItemRenderer.isParentPanelMenuDisabled(menuItem) || menuItem.isDisabled() ? menuItem
            .getRightDisabledIcon() : menuItem.getRightIcon();
        String cssClasses = concatClasses(classPrefix + "-exp-ico"menuItem.getRightIconClass());
        if (icon == null || icon.trim().length() == 0) {
            icon = PanelIcons.transparent.toString();
        }
        encodeTdIcon(writercontextcssClassesicongetState(menuItem));
    }
    private void encodeHeaderGroupLeftIcon(ResponseWriter writer, FacesContext contextAbstractPanelMenuItem menuItem,
        String classPrefixthrows IOException {
        String icon = PanelMenuItemRenderer.isParentPanelMenuDisabled(menuItem) || menuItem.isDisabled() ? menuItem
            .getLeftDisabledIcon() : menuItem.getLeftIcon();
        String cssClasses = concatClasses(classPrefix + "-ico"menuItem.getLeftIconClass());
        if (icon == null || icon.trim().length() == 0) {
            icon = PanelIcons.transparent.toString();
        }
        encodeTdIcon(writercontextcssClassesicongetState(menuItem));
    }
    private boolean isIconRendered(String attrIconValue) {
        if (attrIconValue != null && attrIconValue.trim().length() > 0 && !PanelIcons.none.toString().equals(attrIconValue)) {
            return true;
        }
        return false;
    }
    // TODO nick - the same as in PanelMenuGroupRenderer
    public void encodeTdIcon(ResponseWriter writer, FacesContext contextString classPrefixString attrIconValue,
        PanelIcons.State statethrows IOException {
        if (!isIconRendered(attrIconValue)) {
            return;
        }
        writer.startElement(TD_ELEM, null);
        try {
            PanelIcons icon = PanelIcons.valueOf(attrIconValue);
            writer.writeAttribute(CLASS_ATTRIBUTE, concatClasses(classPrefixstate.getCssClass(icon)), null);
        } catch (IllegalArgumentException e) {
            writer.writeAttribute(CLASS_ATTRIBUTE, classPrefixnull);
            if (attrIconValue != null && attrIconValue.trim().length() != 0) {
                writer.startElement(HtmlConstants.IMG_ELEMENT, null);
                writer.writeAttribute(HtmlConstants.ALT_ATTRIBUTE, ""null);
                writer.writeURIAttribute(HtmlConstants.SRC_ATTRIBUTE, RenderKitUtils.getResourceURL(attrIconValuecontext),
                    null);
                writer.endElement(HtmlConstants.IMG_ELEMENT);
            }
        }
        writer.endElement(TD_ELEM);
    }
    @Override
    protected String getStyleClass(UIComponent component) {
        AbstractPanelMenuItem menuItem = (AbstractPanelMenuItemcomponent;
        return concatClasses(
            getCssClass(menuItem""),
            attributeAsString(component"styleClass"),
            PanelMenuItemRenderer.isParentPanelMenuDisabled(menuItem) || menuItem.isDisabled() ? getCssClass(menuItem"-dis")
                : "",
            (menuItem.isActiveItem() ? getCssClass(menuItem"-sel") : ""),
            PanelMenuItemRenderer.isParentPanelMenuDisabled(menuItem) || menuItem.isDisabled() ? attributeAsString(component,
                "disabledClass") : "");
    }
    public String getCssClass(AbstractPanelMenuItem itemString postfix) {
        return (item.isTopItem() ?  : ) + postfix;
    }
    @Override
    protected JSObject getScriptObject(FacesContext context, UIComponent component) {
        return new JSObject("RichFaces.ui.PanelMenuItem"component.getClientId(context), getScriptObjectOptions(context,
            component));
    }
    @Override
    protected Map<StringObjectgetScriptObjectOptions(FacesContext context, UIComponent component) {
        AbstractPanelMenuItem panelMenuItem = (AbstractPanelMenuItemcomponent;
        Map<StringObjectoptions = new HashMap<StringObject>();
        // TODO nick - ajax options should not be rendered in client mode
        options.put("ajax"getAjaxOptions(contextpanelMenuItem));
        options.put("disabled", PanelMenuItemRenderer.isParentPanelMenuDisabled(panelMenuItem) || panelMenuItem.isDisabled());
        options.put("mode"panelMenuItem.getMode());
        options.put("name"panelMenuItem.getName());
        options.put("selectable"panelMenuItem.getSelectable());
        options.put("unselectable"panelMenuItem.getUnselectable());
        options.put("stylePrefix"getCssClass(panelMenuItem""));
        addEventOption(contextpanelMenuItemoptions);
        addEventOption(contextpanelMenuItemoptions);
        addEventOption(contextpanelMenuItemoptions);
        return options;
    }
    @Override
    protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent componentthrows IOException {
        AbstractPanelMenuItem menuItem = (AbstractPanelMenuItemcomponent;
        encodeHeaderGroupEnd(writercontextmenuItemgetCssClass(menuItem""));
        super.doEncodeEnd(writercontextcomponent);
        Map<StringStringrequestMap = context.getExternalContext().getRequestParameterMap();
        if (requestMap.get(component.getClientId(context)) != null) {
            if (context.getPartialViewContext().isPartialRequest()) {
                addOnCompleteParam(contextcomponent.getClientId(context));
            }
        }
    }
    @Override
    protected Class<? extends UIComponent> getComponentClass() {
        return AbstractPanelMenuItem.class;
    }
    private static AbstractPanelMenu getParentPanelMenu(AbstractPanelMenuItem menuItem) {
        return (AbstractPanelMenu) ComponentIterators.getParent(menuItem);
    }
    static boolean isParentPanelMenuDisabled(AbstractPanelMenuItem menuItem) {
        AbstractPanelMenu parentPanelMenu = (AbstractPanelMenu) ComponentIterators.getParent(menuItem,
            );
        if (parentPanelMenu != null) {
            return parentPanelMenu.isDisabled();
        }
        return false;
    }
    private static class ParentPanelMenuPredicate implements Predicate<UIComponent> {
        public boolean apply(UIComponent comp) {
            return comp instanceof AbstractPanelMenu;
        }
    }
New to GrepCode? Check out our FAQ X