Package org.richfaces.renderkit

Source Code of org.richfaces.renderkit.AbstractPageRenderer

/**
*
*/
package org.richfaces.renderkit;

import java.io.IOException;
import java.util.HashMap;
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.RendererUtils.HTML;
import org.richfaces.component.UIPage;
import org.richfaces.skin.SkinFactory;
import org.richfaces.skin.Theme;

/**
* @author asmirnov
*
*/
public abstract class AbstractPageRenderer extends HeaderResourcesRendererBase {

  public static final String RENDERER_TYPE = "org.richfaces.PageRenderer";

  private static final Map<String, String[]> doctypes;

  static {
    // Fill doctype, content-type and namespace map for different formats.
    doctypes = new HashMap<String, String[]>();
    doctypes
        .put(
            "html-transitional",
            new String[] {
                "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n",
                "text/html", null });
    doctypes.put("html", new String[] {
        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n"
            + "\"http://www.w3.org/TR/html4/strict.dtd\">\n",
        "text/html", null });
    doctypes.put("html-frameset", new String[] {
        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\"\n"
            + "\"http://www.w3.org/TR/html4/frameset.dtd\">\n",
        "text/html", null });
    doctypes
        .put(
            "xhtml",
            new String[] {
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
                    + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n",
                "application/xhtml+xml",
                "http://www.w3.org/1999/xhtml" });
    doctypes
        .put(
            "xhtml-transitional",
            new String[] {
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n"
                    + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n",
                "application/xhtml+xml",
                "http://www.w3.org/1999/xhtml" });
    doctypes
        .put(
            "xhtml-frameset",
            new String[] {
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\n"
                    + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n",
                "application/xhtml+xml",
                "http://www.w3.org/1999/xhtml" });
    doctypes.put("html-3.2", new String[] {
        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n",
        "text/html", null });
  }

  public String prolog(FacesContext context, UIComponent component)
      throws IOException {
    ResponseWriter out = context.getResponseWriter();
    Map<String, Object> attributes = component.getAttributes();
    String format = (String) attributes.get("markupType");
    String contentType = null;
    String namespace = null;
    // String characterEncoding = out.getCharacterEncoding();
    String[] docType = null;
    if (null != format) {
      docType = (String[]) doctypes.get(format);
    } else {
      contentType = out.getContentType();
      for (Iterator<String[]> iterator = doctypes.values().iterator(); iterator
          .hasNext();) {
        String[] types = (String[]) iterator.next();
        if (types[1].equals(contentType)) {
          docType = types;
          break;
        }
      }
    }
    if (null != docType) {
      contentType = docType[1];
      namespace = docType[2];
      out.write(docType[0]);
    }
    if (null == contentType) {
      contentType = (String) attributes.get("contentType");
    }
    if (null != contentType) {
      // response.setContentType(contentType /*+ ";charset=" +
      // characterEncoding*/);
    }
    return namespace;
  }


  public Theme getTheme(FacesContext context, UIPage page) {
    Theme theme = null;
    String themeName = page.getTheme();
    if(null != themeName && themeName.length()>0){
      theme = SkinFactory.getInstance().getTheme(context, themeName);
    }
    return theme;
  }
 
  public void themeStyle(FacesContext context, UIPage component) throws IOException{
    Theme theme = getTheme(context, component);
    if(null != theme){
      String style = theme.getStyle();
      if(null != style){
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement(HTML.LINK_ELEMENT, component);
        writer.writeAttribute(HTML.TYPE_ATTR, "text/css", null);
        writer.writeAttribute(HTML.REL_ATTR, "stylesheet", null);
        writer.writeAttribute(HTML.class_ATTRIBUTE, "component", null);
        style = context.getApplication().getViewHandler().getResourceURL(context, style);
        style= context.getExternalContext().encodeResourceURL(style);
        writer.writeAttribute(HTML.HREF_ATTR, style, null);
        writer.endElement(HTML.LINK_ELEMENT);
      }
    }
   
  }

  public void themeScript(FacesContext context, UIPage component) throws IOException{
    Theme theme = getTheme(context, component);
    if(null != theme){
      String script = theme.getScript();
      if(null != script){
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement(HTML.SCRIPT_ELEM, component);
        writer.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
        script = context.getApplication().getViewHandler().getResourceURL(context, script);
        script= context.getExternalContext().encodeResourceURL(script);
        writer.writeAttribute(HTML.src_ATTRIBUTE, script, null);
        writer.endElement(HTML.SCRIPT_ELEM);
      }
    }
   
  }

 
 
  public void pageStyle(FacesContext context, UIComponent component)
      throws IOException {
    // Write body class.
    ResponseWriter writer = context.getResponseWriter();
    Map<String, Object> attributes = component.getAttributes();
    writer.startElement("style", component);
    writer.writeAttribute(HTML.TYPE_ATTR, "text/css", null);
    // Calculate page width
    Integer width = (Integer) attributes.get("width");
    if (null != width && width.intValue() > 0) {
      float nonIeWidth = (width.floatValue() / 13.0f);
      float ieWidth = (width.floatValue() / 13.333f);
      StringBuilder format = new StringBuilder(
          ".rich-page{margin:auto;text-align:left;");
      format.append("width:").append(nonIeWidth).append("em;");
      format.append("*width:").append(ieWidth).append("em;}\n");
      writer.write(format.toString());
    } else {
      writer.write(".rich-page{margin:auto 10px;width:auto;}\n");
    }
    // Calculate sidebar width
    if (component.getFacet("sidebar") != null) {
      Object sidebarPosition = attributes.get("sidebarPosition");
      String position;
      if ("right".equals(sidebarPosition)) {
        writer
            .write(".rich-page-main{float:left;margin-right:-30em;}\n");
        position = "right";
      } else {
        writer
            .write(".rich-page-main{float:right;margin-left:-30em;}\n");
        position = "left";
      }
      Integer sidebarWidth = (Integer) attributes.get("sidebarWidth");
      if (null != sidebarWidth && sidebarWidth.intValue() > 0) {
        float nonIeWidth = (sidebarWidth.floatValue() / 13.0f);
        float ieWidth = (sidebarWidth.floatValue() / 13.333f);
        StringBuilder format = new StringBuilder(
            ".rich-page-sidebar{float:");
        format.append(position).append(";");
        format.append("width:").append(nonIeWidth).append("em;");
        format.append("*width:").append(ieWidth).append("em;}\n");
        format.append(".rich-page-body{margin-");
        format.append(position).append(":").append(nonIeWidth + 1.0f)
            .append("em;");
        ;
        format.append("*margin").append(position).append(":").append(
            ieWidth + .975f).append("em;}\n");
        writer.write(format.toString());
      }

    } // Cleanup
    writer.write(".rich-page-body{float:none;width:auto;}\n");
    writer.endElement("style");
  }

  public boolean hasFacet(UIComponent component, String facet) {
    return null != component.getFacet(facet);
  }

}
TOP

Related Classes of org.richfaces.renderkit.AbstractPageRenderer

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.