Package org.richfaces.renderkit

Source Code of org.richfaces.renderkit.PanelMenuRendererBase

/**
* License Agreement.
*
*  JBoss RichFaces - Ajax4jsf Component Library
*
* Copyright (C) 2007  Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/

package org.richfaces.renderkit;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
import org.ajax4jsf.renderkit.compiler.TemplateContext;
import org.ajax4jsf.util.style.CSSFormat;
import org.richfaces.component.UIPanelMenu;
import org.richfaces.component.UIPanelMenuGroup;
import org.richfaces.component.UIPanelMenuItem;
import org.richfaces.renderkit.html.PanelMenuGroupRenderer;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconChevron;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconChevronDown;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconChevronLeft;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconChevronUp;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconDisc;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconGrid;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconSpacer;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconTriangle;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconTriangleDown;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconTriangleLeft;
import org.richfaces.renderkit.html.iconimages.PanelMenuIconTriangleUp;

/**
* @author hans
*
*/
public abstract class PanelMenuRendererBase extends HeaderResourcesRendererBase {
 
  public final static String PANEL_MENU_SPACER_ICON_NAME = "spacer";
 
  public void insertSpacerImages(FacesContext context , UIComponent component) throws IOException {
    ResponseWriter writer   = context.getResponseWriter();
    int level = calculateLevel(component);
    //StringBuffer buffer = new StringBuffer();
    String src = getIconByType("custom",false,context,component);
    int w = 16; //width(context);
   
    for (int i=0;i<level;i++){
      writer.startElement("img", component);
      writer.writeAttribute("src", src, null);
      writer.writeAttribute("alt", " ", null);
      writer.writeAttribute("hspace", "0", null);
      writer.writeAttribute("vspace", "0", null);
      writer.writeAttribute("height", String.valueOf(w), null);
      writer.writeAttribute("width", String.valueOf(w), null);
      writer.endElement("img");
    }
  }
 
  protected int calculateLevel (UIComponent component){
    int level = 0;
    UIComponent parent = component.getParent();
    while(parent != null){
      if(parent instanceof UIPanelMenu){
        return level;
      } else if(parent instanceof UIPanelMenuGroup){
        level++;
      }
      parent = parent.getParent();
    }
    return level;
  }
 
  /**
   * If icon type is a pre-defined value, return corresponding image, otherwise
   * otherwise 
   * @param iconType
   * @param context
   * @param component
   * @return URI of requested image
   */
  protected String getIconByType(String iconType, boolean isTopLevel, FacesContext context,
      UIComponent component){
   
    String source = "";
   
    Boolean topLevel = new Boolean(isTopLevel);
   
    if(iconType != null && !iconType.equals("none")){
      if (iconType.equals("custom") || "".equals(iconType)){
        source = getResource(PanelMenuIconSpacer.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("spacer")){
        source = getResource(PanelMenuIconSpacer.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("triangle")) {
        source = getResource(PanelMenuIconTriangle.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("triangleLeft")) {
        source = getResource(PanelMenuIconTriangleLeft.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("triangleDown")) {
        source = getResource(PanelMenuIconTriangleDown.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("triangleUp")) {
        source = getResource(PanelMenuIconTriangleUp.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("chevron")) {
        source = getResource(PanelMenuIconChevron.class.getName()).getUri(context, topLevel);
      else if (iconType.equals("chevronLeft")) {
        source = getResource(PanelMenuIconChevronLeft.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("chevronUp")) {
        source = getResource(PanelMenuIconChevronUp.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("chevronDown")) {
        source = getResource(PanelMenuIconChevronDown.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("disc")) {
        source = getResource(PanelMenuIconDisc.class.getName()).getUri(context, topLevel);
      } else if (iconType.equals("grid")) {
        source = getResource(PanelMenuIconGrid.class.getName()).getUri(context, topLevel);
      } else {
        //TODO by nick - dima - TemplateContext is deprecated and shouldn't be used
        source = (String)getUtils().encodeResourceURL(new  TemplateContext(this,context,component),iconType);
      }
    }
    return source;
  }
 
  protected UIPanelMenu findMenu (UIComponent component){
    if (component instanceof UIPanelMenu) return (UIPanelMenu)component;
    UIComponent parent = component;
    while(parent != null){
      if(parent instanceof UIPanelMenu){
        return (UIPanelMenu) parent;
      }
      parent = parent.getParent();
    }
    return (UIPanelMenu) parent;
  }
 
  public String getHideStyle(FacesContext context, UIComponent component) {
    if (!(component.getParent() instanceof UIPanelMenu)) {
      CSSFormat format = new CSSFormat();
      format.add("display", "none");
      if(component.getParent() instanceof UIPanelMenuGroup) {
        UIPanelMenuGroup parent = (UIPanelMenuGroup)component.getParent();
        PanelMenuGroupRenderer renderer = (PanelMenuGroupRenderer) context.getRenderKit().getRenderer(parent.getFamily(), parent.getRendererType());
        try {
          if ( renderer.isOpened(context, parent) ){
            return "";
          } else
            return format.toString();
        } catch (IOException e) {
          e.printStackTrace();
        }
      } else return format.toString();
    }
    return "";
  }
 
  public void insertLabel(FacesContext context, UIComponent component) throws IOException {
    Object value = component.getAttributes().get("label");
    if (value!=null){
      context.getResponseWriter().writeText(value, null);
    }
  }
 
  protected boolean isChildrenExpanded(UIComponent component){
    if (component.getChildren() != null){
      Iterator itr = component.getChildren().iterator();
      while(itr.hasNext()){
        UIComponent child = (UIComponent)itr.next();
        if(child instanceof UIPanelMenuGroup){
          if(  ((UIPanelMenuGroup)child).isExpanded() ){
            return true;
          } else {
            return isChildrenExpanded(child);
          }
        }
      }
    }
    return false;
  }
 
  protected boolean isParentDisabled(UIComponent component){
    boolean returnValue = false;
    UIComponent parent = component.getParent();
    if(parent instanceof UIPanelMenuGroup){
      UIPanelMenuGroup parentGroup = (UIPanelMenuGroup)parent;
      if(parentGroup.isDisabled()){
        returnValue = true;
      } else {
        returnValue = isParentDisabled(parentGroup);
      }
    }
    return returnValue;
  }
 
  protected boolean isSubmitted(FacesContext context, UIComponent component){
        boolean submitted = false;
    String clientId = component.getClientId(context);
    Map requestParameterMap = context.getExternalContext().getRequestParameterMap();
   
    Object value = requestParameterMap.get("panelMenuAction"+clientId);
    if (clientId!=null&&value!=null){
      if (value.equals(clientId)) {
        submitted = true;
      }
    }
    return submitted;
  }
 
  protected String getItemMode(UIComponent component) {
    String parentExpandMode = findMenu(component).getExpandMode();
    String parentMode = findMenu(component).getMode();
    if (null == parentMode || "".equals(parentMode))
      parentMode = "server";
    if (null == parentExpandMode || "".equals(parentExpandMode))
      parentExpandMode = "none";
    String mode = "none";
    if (component instanceof UIPanelMenuGroup) {
      UIPanelMenuGroup group = (UIPanelMenuGroup) component;
      if (null != group.getExpandMode() && ! "".equals(group.getExpandMode()))
        mode = group.getExpandMode();
      else
        mode = parentExpandMode;
    } else if (component instanceof UIPanelMenuItem) {
      UIPanelMenuItem item = (UIPanelMenuItem) component;
      if (null != item.getMode() && ! "".equals(item.getMode()))
        mode = item.getMode();
      else
        mode = parentMode;
    }
    return mode;
  }
 
  /**
   *
   * @param component
   * @return
   */
  public boolean isTopLevel(UIComponent component){
    UIComponent parent = component.getParent();
    while( !(parent instanceof UIPanelMenu) && !(parent instanceof UIPanelMenuGroup)) {
      parent = parent.getParent();
   
    if(parent instanceof UIPanelMenu){
      return true;
    } else {
      return false;
    }
  }
 
  /**
   *
   * @param writer
   * @param iconType
   * @param imageSrc
   * @param component
   * @throws IOException
   */
  public void drawIcon(ResponseWriter writer, String iconType, String imageSrc, UIComponent component, String id, boolean drawHidden) throws IOException{
    if (iconType != null && !iconType.equals("") && !iconType.equals("none")){
      int h = 16; //width(context);
      writer.startElement("img", component);
      if (drawHidden) {
        writer.writeAttribute("style", "display: none;", null);
      }
      writer.writeAttribute("src", imageSrc, null);
      writer.writeAttribute("alt", " ", null);
      writer.writeAttribute("vspace", "0", null);
      writer.writeAttribute("hspace", "0", null);
      writer.writeAttribute("width", String.valueOf(h), null);
      writer.writeAttribute("height", String.valueOf(h), null);
      writer.writeAttribute("id", id, null);
      writer.endElement("img");
   
   
  }

}
TOP

Related Classes of org.richfaces.renderkit.PanelMenuRendererBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.