Package org.richfaces.renderkit.html

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

package org.richfaces.renderkit.html;

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

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

import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.component.AbstractLayout;
import org.richfaces.component.LayoutStructure;
import org.richfaces.renderkit.RendererBase;
import org.richfaces.ui.common.HtmlConstants;

@JsfRenderer(family = AbstractLayout.COMPONENT_FAMILY, type = LayoutRenderer.RENDERER_TYPE)
public class LayoutRenderer extends
        RendererBase {
// ------------------------------ FIELDS ------------------------------

    public static final String LAYOUT_STRUCTURE_ATTRIBUTE = AbstractLayout.class.getName() + ".structure";

    public static final String RENDERER_TYPE = "org.richfaces.LayoutRenderer";
    private static final String[] LAYOUT_EXCLUSIONS = {HtmlConstants.ID_ATTRIBUTE, HtmlConstants.STYLE_ATTRIBUTE};

// -------------------------- OTHER METHODS --------------------------

    @Override
    public boolean getRendersChildren() {
        return true;
    }

    public void renderLayout(ResponseWriter writer, FacesContext context, AbstractLayout layout)
            throws IOException {
        LayoutStructure structure = new LayoutStructure(layout);
        structure.calculateWidth();
        Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
        Object oldLayout = requestMap.get(LAYOUT_STRUCTURE_ATTRIBUTE);
        requestMap.put(LAYOUT_STRUCTURE_ATTRIBUTE, structure);
        // Detect layout content;
        if (null != structure.getTop()) {
            structure.getTop().encodeAll(context);
        }
        if (structure.getColumns() > 0) {
            // Reorder panels to fill ordeg left->center->right.
            if (null != structure.getLeft()) {
                structure.getLeft().encodeAll(context);
            }
            if (null != structure.getCenter()) {
                structure.getCenter().encodeAll(context);
            }
            if (null != structure.getRight()) {
                structure.getRight().encodeAll(context);
            }
        }
        // line separator.
        writer.startElement(HtmlConstants.DIV_ELEM, layout);
        writer.writeAttribute(HtmlConstants.STYLE_ATTRIBUTE, "display: block; height: 0;line-height:0px; font-size:0px; clear: both; visibility: hidden;", null);
        writer.writeText(".", null);
        writer.endElement(HtmlConstants.DIV_ELEM);
        if (null != structure.getBottom()) {
            renderChildren(context, structure.getBottom());
        }
        requestMap.put(LAYOUT_STRUCTURE_ATTRIBUTE, oldLayout);
    }

    @Override
    protected void doEncodeBegin(ResponseWriter writer, FacesContext context,
                                 UIComponent component) throws IOException {
        writer.startElement(HtmlConstants.DIV_ELEM, component);
        getUtils().encodeCustomId(context, component);
        getUtils().encodePassThruWithExclusionsArray(context, component, LAYOUT_EXCLUSIONS, null);
        Object style = component.getAttributes().get("style");
        writer.writeAttribute(HtmlConstants.STYLE_ATTRIBUTE, null == style ? "" : (style.toString() + ";") + "zoom:1;", "style");
    }

    @Override
    protected void doEncodeChildren(ResponseWriter writer,
                                    FacesContext context, UIComponent component) throws IOException {
        renderLayout(writer, context, (AbstractLayout) component);
    }

    @Override
    protected void doEncodeEnd(ResponseWriter writer, FacesContext context,
                               UIComponent component) throws IOException {
        writer.endElement(HtmlConstants.DIV_ELEM);
    }

    @Override
    protected Class<? extends UIComponent> getComponentClass() {
        return AbstractLayout.class;
    }
}
TOP

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

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.