Package org.apache.myfaces.trinidadinternal.ui.laf.base.desktop

Source Code of org.apache.myfaces.trinidadinternal.ui.laf.base.desktop.GlobalHeaderRenderer

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.myfaces.trinidadinternal.ui.laf.base.desktop;

import java.io.IOException;

import javax.faces.context.ResponseWriter;

import org.apache.myfaces.trinidad.component.UIXNavigationLevel;
import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
import org.apache.myfaces.trinidadinternal.ui.UINode;
import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LinkUtils;
import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.XhtmlLafUtils;
import org.apache.myfaces.trinidad.skin.Icon;
import org.apache.myfaces.trinidad.style.Style;

/**
* GlobalHeader Renderer for the desktop implementation of the
* Base Look And Feel.
*
* The base.desktop.GlobalHeaderRenderer exposes a single customizable
* icon:
* <ul>
* <li>af|menuBar::separator-icon: The separator between global header items.
* </ul>
*
* @version $Name:  $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/ui/laf/base/desktop/GlobalHeaderRenderer.java#0 $) $Date: 10-nov-2005.18:55:16 $
* @deprecated This class comes from the old Java 1.2 UIX codebase and should not be used anymore.
*/
@Deprecated
public class GlobalHeaderRenderer extends HtmlLafRenderer
{
  @Override
  protected String getElementName(
    UIXRenderingContext context,
    UINode           node
    )
  {
    return DIV_ELEMENT;
  }

  @Override
  protected void renderAttributes(
    UIXRenderingContext context,
    UINode           node
    )throws IOException
  {
    super.renderAttributes(context, node);

    ResponseWriter writer = context.getResponseWriter();
    writer.writeAttribute("width", "100%", null);   
 

  /**
   *
   */
  @Override
  protected void prerender(
    UIXRenderingContext context,
    UINode           node
    )
    throws IOException
  {  
    renderRelatedLinksBlockStart(context, "af_menuBar.BLOCK_TITLE");


    super.prerender(context, node);

    if (isEmpty(context, node))
    {
      renderEmptyGlobalHeader(context, node);
    }
    else
    {
      // Disabled link default style class rendering
      LinkUtils.startDefaultStyleClassDisabled(context);

      ResponseWriter writer = context.getResponseWriter();
      writer.startElement(TABLE_ELEMENT, null);
      renderLayoutTableAttributes(context, "0", null);
      writer.startElement(TABLE_ROW_ELEMENT, null);

      // Get the separator icon and store it away for later
      Icon icon = context.getIcon(AF_MENU_BAR_SEPARATOR_ICON_NAME);
      context.setLocalProperty(_SEPARATOR_ICON_KEY, icon);
    }
  }

  @Override
  protected void renderContent(
    UIXRenderingContext context,
    UINode           node
    ) throws IOException
  {
    boolean initialLinkSelectedStatus = LinkUtils.isSelected(context);
   
    UIXNavigationLevel component = (UIXNavigationLevel) node.getUIComponent();    
    
    UINode stamp = node.getNamedChild(context, NODE_STAMP_CHILD);
   
    if(stamp != null)
    {

      // Save the current key
      Object oldKey = component.getRowKey();     
      int size = component.getRowCount();
      int rowIndex = component.getRowIndex();
     
      for (int i = 0; i < size; i++)
      {
        component.setRowIndex(i);
        renderStamp(context, stamp,i == rowIndex);
       
        if ( i < (size - 1))
          renderBetweenNodes(context);
      }
     
      if (getVisibleIndexedChildCount(context, node) > 0)
        renderBetweenNodes(context);
     
      // Restore the old path
      component.setRowKey(oldKey);

    }
   
    super.renderContent(context, node);
    //Reset the selected status, which might have been changed on rendering
    //  indexed children.
    LinkUtils.setSelected(context, initialLinkSelectedStatus);
  }

  /**
   *
   */
  @Override
  protected void postrender(
    UIXRenderingContext context,
    UINode           node
    )
    throws IOException
  {
    if (!isEmpty(context, node))
    {
      ResponseWriter writer = context.getResponseWriter();
      writer.endElement(TABLE_ROW_ELEMENT);        
      writer.endElement(TABLE_ELEMENT);

      // Re-enable link default style class rendering
      LinkUtils.endDefaultStyleClassDisabled(context);
    }

    super.postrender(context, node);

    renderRelatedLinksBlockEnd(context);
  }
 
  @Override
  protected void renderIndexedChild(
    UIXRenderingContext context,
    UINode           node,
    int              index
    )throws IOException
  {
    ResponseWriter writer = context.getResponseWriter();

    // Start the table cell
    writer.startElement(TABLE_DATA_ELEMENT, null);

    // Render style attributes
    boolean selected = (index == getResolvedSelectedIndexFromCache(context, node));
    renderItemStyleAttrs(context, node, index, selected);

    //Record the selected status so that in case this child happens to be
    //  a link, some special aspects like accessibility are taken care of.
    LinkUtils.setSelected(context, selected);

    // Render the global header link
    super.renderIndexedChild( context, node, index);

    writer.endElement(TABLE_DATA_ELEMENT);
 

    protected void renderStamp(
    UIXRenderingContext context,
    UINode           stamp,
    boolean          selected
    )throws IOException
  {
    ResponseWriter writer = context.getResponseWriter();

    // Start the table cell
    writer.startElement(TABLE_DATA_ELEMENT, null);
    // todo - the index isn't used so putting -1 for now
    renderItemStyleAttrs(context, stamp, -1, selected);

    //Record the selected status so that in case this child happens to be
    //  a link, some special aspects like accessibility are taken care of.
    LinkUtils.setSelected(context, selected);

    stamp.render(context);

    writer.endElement(TABLE_DATA_ELEMENT);
 

  /**
   * Override of renderBetweenIndexedChildren() which
   * renders the separator Icon.
   */
    @Override
  protected void renderBetweenIndexedChildren(
    UIXRenderingContext context,
    UINode           node
    ) throws IOException
  {
    renderBetweenNodes(context);
  }

/**
   * Override of renderBetweenIndexedChildren() which
   * renders the separator Icon.
   */
  protected void renderBetweenNodes(
    UIXRenderingContext context
    ) throws IOException
  {
    // Get the separator icon and render it in a table cell
    Icon icon = getSeparatorIcon(context);

    renderTableDataIcon(context, icon, AF_MENU_BAR_SEPARATOR_STYLE_CLASS);
  }

  /**
   * Override of getStyleClass() which forces style class
   * to OraGlobalHeader.
   */
  @Override
  protected Object getStyleClass(
    UIXRenderingContext context,
    UINode           node
    )
  {
    return AF_MENU_BAR_STYLE_CLASS;
  }

  /**
   * Renders the style attributes for global header items
   */
  protected void renderItemStyleAttrs(
    UIXRenderingContext context,
    UINode           node,
    int              index,
    boolean          selected
    ) throws IOException
  {
    String styleClass = null;

    if (selected)
      styleClass = AF_MENU_BAR_SELECTED_STYLE_CLASS;
    else
      styleClass = AF_MENU_BAR_ENABLED_STYLE_CLASS;

    renderStyleClassAttribute(context, styleClass);
  }

  /**
   * Returns the separator Icon
   */
  protected Icon getSeparatorIcon(UIXRenderingContext context)
  {
    return (Icon)context.getLocalProperty(0, _SEPARATOR_ICON_KEY, null);
  }

  /**
   * Checks to see whether the globalHeader is empty (contains no
   * indexed children).
   */
  protected boolean isEmpty(
    UIXRenderingContext context,
    UINode           node
    )
  {
    if (getVisibleIndexedChildCount(context, node) != 0)
      return false;
     
         
    UIXNavigationLevel component = (UIXNavigationLevel) node.getUIComponent();  
    int rowCount = component.getRowCount();     
   
    if (rowCount > 0 )
      return false;
     
    return true;
  }

  /**
   * Renders the empty global header
   */
  protected void renderEmptyGlobalHeader(
    UIXRenderingContext context,
    UINode           node
    ) throws IOException
  {
    Object text = node.getAttributeValue(context, TEXT_ATTR);

    if (text != null)
    {
      ResponseWriter writer = context.getResponseWriter();
      writer.writeText(text, TEXT_ATTR.getAttributeName());
    }
    else if (isIE(context))
    {
      Style style =XhtmlLafUtils.getClassStyle(context,
                                              AF_MENU_BAR_STYLE_CLASS);
      if (style != null)
      {
        String minHeight = style.getProperties().get("min-height");
        renderSpacer(context, null, minHeight);
      }
    }
  }
  // Key for local property which holds the separator icon
  private static final Object _SEPARATOR_ICON_KEY = new Object();
}
TOP

Related Classes of org.apache.myfaces.trinidadinternal.ui.laf.base.desktop.GlobalHeaderRenderer

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.