Package org.richfaces.renderkit.html

Source Code of org.richfaces.renderkit.html.ColgroupRenderer

/**
* 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.html;

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.RendererUtils.HTML;
import org.richfaces.component.Column;
import org.richfaces.component.UIColumnGroup;
import org.richfaces.renderkit.AbstractRowsRenderer;
import org.richfaces.renderkit.TableHolder;

/**
* @author shura
*
*/
public class ColgroupRenderer extends AbstractRowsRenderer {

  //private static final String[] STYLE_ATTRS = { "style", "class" };
  public static final String[] EVENT_ATTRS ;

  static {
      EVENT_ATTRS = new String[AbstractRowsRenderer.TABLE_EVENT_ATTRS.length];
      for (int i = 0; i < AbstractRowsRenderer.TABLE_EVENT_ATTRS.length; i++) {
    EVENT_ATTRS[i]=AbstractRowsRenderer.TABLE_EVENT_ATTRS[i][0];
      }
  }
  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.renderkit.RendererBase#doEncodeBegin(javax.faces.context.ResponseWriter,
   *      javax.faces.context.FacesContext, javax.faces.component.UIComponent)
   */
  protected void doEncodeBegin(ResponseWriter writer, FacesContext context,
      UIComponent colgroup) throws IOException {
    encodeRowStart(context, colgroup, writer, 0);
  }

  public void encodeChildren(FacesContext context, UIComponent component)
      throws IOException {
    UIColumnGroup colgroup = (UIColumnGroup) component;
    ResponseWriter writer = context.getResponseWriter();
    String[] classes = null;
    String columnClasses = (String) component.getAttributes().get(
        "columnClasses");
    if (null != columnClasses) {
      classes = columnClasses.split(",");
    }
    Iterator<UIComponent> iter = colgroup.columns();
    boolean first = true;
    int currentColumn = 0;
    int currentRow = 0;
    UIComponent column = null;
    Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
    while (iter.hasNext()) {
      column = (UIComponent) iter.next();
      if (column instanceof Column) {
        boolean breakBefore = ((Column) column).isBreakBefore();
        if (breakBefore && !first) {
          // close current row
          writer.endElement(HTML.TR_ELEMENT);
          // reset columns counter.
          currentColumn = 0;
          currentRow++;
          // Start new row, expect a case of the detail table, wich
          // will be insert own row.
          encodeRowStart(context, colgroup, writer, currentRow);
        }
        String styleClass = null;
        if (null != classes) {
          styleClass = classes[currentColumn % classes.length];
        }
        encodeCellChildren(context, column, null, null, null,
            (String) requestMap
                .get(AbstractRowsRenderer.SKIN_CELL_CLASS_KEY),
            styleClass);
        // renderChild(context, column);
      } else {
        // UIColumn don't have own renderer
        if (column.isRendered()) {
          writer.startElement(HTML.td_ELEM, column);
          getUtils().encodeId(context, column);
          String styleClass;
          if (null != classes) {
            styleClass = classes[currentColumn % classes.length];
          } else {
            styleClass = (String) column.getAttributes().get(
                "styleClass");
          }
          encodeStyleClass(context.getResponseWriter(), requestMap
              .get(AbstractRowsRenderer.SKIN_CELL_CLASS_KEY),
              "dr-table-cell rich-table-cell", requestMap
                  .get(AbstractRowsRenderer.CELL_CLASS_KEY),
              styleClass);
          // TODO - encode column attributes.
          renderChildren(context, column);
          writer.endElement(HTML.td_ELEM);

        }
      }
      currentColumn++;
      first = false;
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.renderkit.RendererBase#doEncodeEnd(javax.faces.context.ResponseWriter,
   *      javax.faces.context.FacesContext, javax.faces.component.UIComponent)
   */
  protected void doEncodeEnd(ResponseWriter writer, FacesContext context,
      UIComponent component) throws IOException {
    writer.endElement(HTML.TR_ELEMENT);
  }

  private void encodeRowStart(FacesContext context, UIComponent colspan,
      ResponseWriter writer, int currentRow) throws IOException {
    writer.startElement(HTML.TR_ELEMENT, colspan);
    String styleClass;
    String rowClasses = (String) colspan.getAttributes().get("rowClasses");
    String style = (String) colspan.getAttributes().get("style");
    if (null != rowClasses) {
      String[] classes = rowClasses.split(",");
      styleClass = classes[currentRow % classes.length];
    } else {
      styleClass = (String) colspan.getAttributes().get("styleClass");
    }
    Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
    Object skinRowClass = currentRow == 0 ? requestMap
        .get(AbstractRowsRenderer.SKIN_FIRST_ROW_CLASS_KEY)
        : requestMap.get(AbstractRowsRenderer.SKIN_ROW_CLASS_KEY);
    encodeStyleClass(context.getResponseWriter(), skinRowClass,
        "dr-tablerow rich-tablerow", requestMap
            .get(AbstractRowsRenderer.ROW_CLASS_KEY), styleClass);
    encodeStyle(context.getResponseWriter(),null, null, null, style);
    getUtils().encodePassThruWithExclusionsArray(context, colspan,EVENT_ATTRS);
    // Search for enclosed DataAdaptor.
    UIComponent parent = colspan.getParent();
    // ENCODE event attributes. If component don't have own attribute, search in the parent table.
    boolean inRow = null != parent && parent.getChildren().contains(colspan);
    for (int i = 0; i < AbstractRowsRenderer.TABLE_EVENT_ATTRS.length; i++) {
        String[] attrs = AbstractRowsRenderer.TABLE_EVENT_ATTRS[i];
        String event = (String) colspan.getAttributes().get(attrs[0]);
        if(null == event && inRow){
      event = (String) parent.getAttributes().get(attrs[1]);
        }
        if(null != event){
      writer.writeAttribute(attrs[0], event, attrs[0]);
        }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.render.Renderer#getRendersChildren()
   */
  public boolean getRendersChildren() {

    return true;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.renderkit.RendererBase#getComponentClass()
   */
  protected Class<? extends UIComponent> getComponentClass() {
    // TODO Auto-generated method stub
    return UIColumnGroup.class;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.richfaces.renderkit.AbstractRowsRenderer#encodeOneRow(javax.faces.context.FacesContext,
   *      org.richfaces.renderkit.TableHolder)
   */
  public void encodeOneRow(FacesContext context, TableHolder holder)
      throws IOException {
    // this method don't used in columnGroup component.

  }
}
TOP

Related Classes of org.richfaces.renderkit.html.ColgroupRenderer

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.