Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2010, 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;
 
 import static org.richfaces.renderkit.RenderKitUtils.getFirstNonEmptyAttribute;
 import static org.richfaces.renderkit.TreeRendererBase.getToggleTypeOrDefault;
 
 import java.util.Map;
 
 import  javax.faces.component.UIComponent;
 import  javax.faces.context.FacesContext;
 import  javax.faces.context.PartialViewContext;
 import  javax.faces.context.ResponseWriter;
 
 import  org.richfaces.component.MetaComponentResolver;
 
 import  com.google.common.base.Strings;

Author(s):
Nick Belaevski
 
 public class TreeNodeRendererBase extends RendererBase implements MetaComponentRenderer {
     static final String AJAX_TOGGLED_NODE_ATTRIBUTE = TreeNodeRendererBase.class.getName() + ":AJAX_TOGGLED_NODE_ATTRIBUTE";
         + ":AJAX_TOGGLED_NODE_STATE_ATTRIBUTE";
     private static final String NEW_NODE_TOGGLE_STATE = "__NEW_NODE_TOGGLE_STATE";
     private static final String TRIGGER_NODE_AJAX_UPDATE = "__TRIGGER_NODE_AJAX_UPDATE";
     private static final String HANDLE_LOADING_FACET_NAME = "handleLoading";
 
     @Override
     public void decode(FacesContext context, UIComponent component) {
         super.decode(contextcomponent);
 
         final Map<StringStringmap = context.getExternalContext().getRequestParameterMap();
         String newToggleState = map.get(component.getClientId(context) + );
         if (newToggleState != null) {
 
             AbstractTreeNode treeNode = (AbstractTreeNodecomponent;
 
             boolean initialState = treeNode.isExpanded();
             boolean newState = Boolean.valueOf(newToggleState);
             if (initialState ^ newState) {
                 new TreeToggleEvent(treeNodenewState).queue();
             }
 
             PartialViewContext pvc = context.getPartialViewContext();
             if (pvc.isAjaxRequest() && map.get(component.getClientId(context) + ) != null) {
                 pvc.getRenderIds().add(
                     component.getClientId(context) + MetaComponentResolver.META_COMPONENT_SEPARATOR_CHAR
                         + .);
 
                 context.getAttributes().put(component.getClientId(context));
                 context.getAttributes().put(,
                     initialState ? . : .);
             }
         }
     }
 
     public void decodeMetaComponent(FacesContext context, UIComponent componentString metaComponentId) {
         throw new UnsupportedOperationException();
     }
 
     public void encodeMetaComponent(FacesContext context, UIComponent componentString metaComponentIdthrows IOException {
 
         if (..equals(metaComponentId)) {
             AbstractTreeNode treeNode = (AbstractTreeNodecomponent;
             new TreeEncoderPartial(contexttreeNode).encode();
         } else {
             throw new IllegalArgumentException(metaComponentId);
         }
     }
 
     protected TreeNodeState getNodeState(FacesContext context) {
         return (TreeNodeStatecontext.getAttributes().get(.);
    }
    protected UIComponent getTreeComponent(UIComponent treeNodeComponent) {
        return ((AbstractTreeNodetreeNodeComponent).findTreeComponent();
    }
    protected void encodeDefaultIcon(FacesContext context, UIComponent componentString styleClassthrows IOException {
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement(HtmlConstants.SPAN_ELEM, component);
        writer.writeAttribute(HtmlConstants.CLASS_ATTRIBUTE, styleClassnull);
        writer.endElement(HtmlConstants.SPAN_ELEM);
    }
    protected void encodeCustomIcon(FacesContext context, UIComponent componentString styleClassString iconSource)
        throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement(HtmlConstants.IMG_ELEMENT, component);
        writer.writeAttribute(HtmlConstants.CLASS_ATTRIBUTE, styleClassnull);
        writer.writeAttribute(HtmlConstants.ALT_ATTRIBUTE, ""null);
        writer.writeURIAttribute(HtmlConstants.SRC_ATTRIBUTE, RenderKitUtils.getResourceURL(iconSourcecontext), null);
        writer.endElement(HtmlConstants.IMG_ELEMENT);
    }
    protected void encodeIcon(FacesContext context, UIComponent componentthrows IOException {
        TreeNodeState nodeState = getNodeState(context);
        AbstractTreeNode treeNode = (AbstractTreeNodecomponent;
        AbstractTree tree = treeNode.findTreeComponent();
        if (nodeState.isLeaf()) {
            String iconLeaf = (StringgetFirstNonEmptyAttribute("iconLeaf"treeNodetree);
            encodeIconForNodeState(contexttreetreeNodenodeStateiconLeaf);
        } else {
            String iconExpanded = (StringgetFirstNonEmptyAttribute("iconExpanded"treeNodetree);
            String iconCollapsed = (StringgetFirstNonEmptyAttribute("iconCollapsed"treeNodetree);
            if (Strings.isNullOrEmpty(iconCollapsed) && Strings.isNullOrEmpty(iconExpanded)) {
                encodeIconForNodeState(contexttreetreeNodenodeStatenull);
            } else {
                SwitchType toggleType = getToggleTypeOrDefault(treeNode.findTreeComponent());
                if (toggleType == . || nodeState == .) {
                    encodeIconForNodeState(contexttreetreeNode.iconCollapsed);
                }
                if (toggleType == . || nodeState == .
                    || nodeState == .) {
                    encodeIconForNodeState(contexttreetreeNode.iconExpanded);
                }
            }
        }
    }
    protected void encodeIconForNodeState(FacesContext contextAbstractTree treeAbstractTreeNode treeNode,
        TreeNodeState nodeStateString customIconthrows IOException {
        if (Strings.isNullOrEmpty(customIcon)) {
            encodeDefaultIcon(
                context,
                treeNode,
                concatClasses(nodeState.getIconClass(), treeNode.getAttributes().get("iconClass"),
                    tree.getAttributes().get("iconClass")));
        } else {
            encodeCustomIcon(
                context,
                treeNode,
                concatClasses(nodeState.getCustomIconClass(), treeNode.getAttributes().get("iconClass"), tree.getAttributes()
                    .get("iconClass")), customIcon);
        }
    }
    protected void addClientEventHandlers(FacesContext facesContext, UIComponent component) {
        AbstractTreeNode treeNode = (AbstractTreeNodecomponent;
        // TODO check node state
        // TODO check toggle/selection types
        TreeRenderingContext renderingContext = TreeRenderingContext.get(facesContext);
        renderingContext.addHandlers(treeNode);
    }
    protected UIComponent getHandleLoadingFacetIfApplicable(UIComponent component) {
        AbstractTreeNode treeNode = (AbstractTreeNodecomponent;
        AbstractTree tree = treeNode.findTreeComponent();
        if (getToggleTypeOrDefault(tree) != .) {
            return null;
        }
        UIComponent facet = treeNode.getFacet();
        if (facet == null) {
            facet = tree.getFacet();
        }
        if (facet != null && facet.isRendered()) {
            return facet;
        }
        return null;
    }
New to GrepCode? Check out our FAQ X