Package com.liferay.faces.bridge.renderkit.html_basic

Source Code of com.liferay.faces.bridge.renderkit.html_basic.RenderKitBridgeImpl

/**
* Copyright (c) 2000-2014 Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* 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.
*/
package com.liferay.faces.bridge.renderkit.html_basic;

import java.io.Writer;

import javax.faces.component.UIForm;
import javax.faces.component.UIOutput;
import javax.faces.component.UIPanel;
import javax.faces.context.ResponseWriter;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitWrapper;
import javax.faces.render.Renderer;

import com.liferay.faces.bridge.component.icefaces.DataPaginator;
import com.liferay.faces.bridge.component.primefaces.PrimeFacesFileUpload;
import com.liferay.faces.bridge.renderkit.bridge.ResponseWriterBridgeImpl;
import com.liferay.faces.bridge.renderkit.icefaces.DataPaginatorRenderer;
import com.liferay.faces.bridge.renderkit.icefaces.HeadRendererICEfacesImpl;
import com.liferay.faces.bridge.renderkit.primefaces.FileUploadRendererPrimeFacesImpl;
import com.liferay.faces.bridge.renderkit.primefaces.FormRendererPrimeFacesImpl;
import com.liferay.faces.bridge.renderkit.primefaces.HeadRendererPrimeFacesImpl;
import com.liferay.faces.bridge.renderkit.richfaces.FileUploadRendererRichFacesImpl;
import com.liferay.faces.util.product.Product;
import com.liferay.faces.util.product.ProductConstants;
import com.liferay.faces.util.product.ProductMap;


/**
* @author  Neil Griffin
*/
public class RenderKitBridgeImpl extends RenderKitWrapper {

  // Private Constants
  private static final String JAVAX_FACES_FORM = "javax.faces.Form";
  private static final String JAVAX_FACES_HEAD = "javax.faces.Head";
  private static final String JAVAX_FACES_OUTPUT = UIOutput.COMPONENT_FAMILY;
  private static final Object ICEFACES_HEAD_RENDERER = "org.icefaces.ace.renderkit.HeadRenderer";
  private static final String PRIMEFACES_FAMILY = "org.primefaces.component";
  private static final String PRIMEFACES_HEAD_RENDERER = "org.primefaces.renderkit.HeadRenderer";
  private static final String RICHFACES_FILE_UPLOAD_FAMILY = "org.richfaces.FileUpload";
  private static final String RICHFACES_FILE_UPLOAD_RENDERER_TYPE = "org.richfaces.FileUploadRenderer";
  private static final String SCRIPT_RENDERER_TYPE = "javax.faces.resource.Script";
  private static final String STYLESHEET_RENDERER_TYPE = "javax.faces.resource.Stylesheet";

  // Private Data Members
  private RenderKit wrappedRenderKit;

  public RenderKitBridgeImpl(RenderKit wrappedRenderKit) {
    this.wrappedRenderKit = wrappedRenderKit;
  }

  /**
   * Provides the bridge with the ability to wrap the HTML_BASIC ResponseWriter provided by the JSF implementation.
   */
  @Override
  public ResponseWriter createResponseWriter(Writer writer, String contentTypeList, String characterEncoding) {
    ResponseWriter wrappedResponseWriter = wrappedRenderKit.createResponseWriter(writer, contentTypeList,
        characterEncoding);
    ResponseWriter responseWriter = new ResponseWriterBridgeImpl(wrappedResponseWriter);

    return responseWriter;
  }

  @Override
  public Renderer getRenderer(String family, String rendererType) {

    Renderer renderer = super.getRenderer(family, rendererType);

    if (JAVAX_FACES_OUTPUT.equals(family) && JAVAX_FACES_HEAD.equals(rendererType)) {

      // For some reason Mojarra will cause the ICEfaces and PrimeFaces HeadRenderer instances to win, even though
      // the bridge's faces-config has <ordering><before><others/></before></ordering>. Need to override them with
      // renderers that are compatible with a portlet environment.
      String rendererClassName = renderer.getClass().getName();

      if (ICEFACES_HEAD_RENDERER.equals(rendererClassName)) {
        renderer = new HeadRendererICEfacesImpl();
      }
      else if (PRIMEFACES_HEAD_RENDERER.equals(rendererClassName)) {
        renderer = new HeadRendererPrimeFacesImpl();
      }
      else {
        renderer = new HeadRendererBridgeImpl();
      }
    }
    else if (UIForm.COMPONENT_FAMILY.equals(family) && JAVAX_FACES_FORM.equals(rendererType)) {

      // If the PrimeFaces p:fileUpload should be forced to use a ResourceURL, then return a special
      // form renderer. http://issues.liferay.com/browse/FACES-1194
      Product primeFaces = ProductMap.getInstance().get(ProductConstants.PRIMEFACES);

      if (primeFaces.isDetected() && (primeFaces.getMajorVersion() == 3) && (primeFaces.getMinorVersion() < 3)) {
        renderer = new FormRendererPrimeFacesImpl(renderer);
      }
    }
    else if (UIOutput.COMPONENT_FAMILY.equals(family) &&
        (SCRIPT_RENDERER_TYPE.equals(rendererType) || STYLESHEET_RENDERER_TYPE.equals(rendererType))) {
      renderer = new ResourceRendererBridgeImpl(renderer);
    }
    else if (UIPanel.COMPONENT_FAMILY.equals(family) && DataPaginator.RENDERER_TYPE.equals(rendererType)) {

      // Workaround for: http://jira.icesoft.org/browse/ICE-6398
      renderer = new DataPaginatorRenderer(renderer);
    }
    else if (PRIMEFACES_FAMILY.equals(family) && PrimeFacesFileUpload.RENDERER_TYPE.equals(rendererType)) {
      renderer = new FileUploadRendererPrimeFacesImpl(renderer);
    }
    else if (RICHFACES_FILE_UPLOAD_FAMILY.equals(family) &&
        RICHFACES_FILE_UPLOAD_RENDERER_TYPE.equals(rendererType)) {
      renderer = new FileUploadRendererRichFacesImpl(renderer);
    }

    return renderer;
  }

  @Override
  public RenderKit getWrapped() {
    return wrappedRenderKit;
  }

}
TOP

Related Classes of com.liferay.faces.bridge.renderkit.html_basic.RenderKitBridgeImpl

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.