Package org.ajax4jsf.renderkit

Source Code of org.ajax4jsf.renderkit.ChameleonRenderKitImpl

/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* 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.ajax4jsf.renderkit;

import java.io.OutputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import javax.faces.FactoryFinder;
import javax.faces.application.ApplicationFactory;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseStream;
import javax.faces.context.ResponseWriter;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
import javax.faces.render.Renderer;
import javax.faces.render.ResponseStateManager;

/**
* Wrapper for default applikation render kit. Only can append any
* custom renderers , all other methods delegate to default render kit.
*
* @see javax.faces.render.RenderKit
* @author shura
*
*/
public class ChameleonRenderKitImpl extends RenderKit implements ChameleonRenderKit {
   
    private RenderKit defaultRenderKit = null;
    public static final String RENDER_KIT_ID = "AJAX_HTML_BASIC";

    private Map renderers;


    //~ Constructors -------------------------------------------------------------------------------

    public ChameleonRenderKitImpl()
    {
        renderers = new HashMap();
    }

    //~ Methods ------------------------------------------------------------------------------------

    private String key(String componentFamily, String rendererType)
    {
        return componentFamily + "." + rendererType;
    }   
    /**
     * @param family
     * @param rendererType
     * @param renderer
     */
    public void addRenderer(String family, String rendererType,
            Renderer renderer) {
      if (renderer instanceof ChameleonRenderer) {
      ChameleonRenderer chameleonRenderer = (ChameleonRenderer) renderer;
//      chameleonRenderer.setConfiguration(getConfiguration().getRendererConfiguration(family,rendererType));
     
    }
        renderers.put(key(family, rendererType), renderer);
    }
    /**
     * @param writer
     * @param contentTypeList
     * @param characterEncoding
     * @return
     */
    public ResponseWriter createResponseWriter(Writer writer,
            String contentTypeList, String characterEncoding) {
        return getDefaultRenderKit().createResponseWriter(writer, contentTypeList,
                characterEncoding);
    }
    /**
     * @param family
     * @param rendererType
     * @return
     */
    public Renderer getRenderer(String family, String rendererType) {
        Renderer renderer = (Renderer) renderers.get(key(family, rendererType));
        if (renderer != null) {
            return renderer;
        }
        return getDefaultRenderKit().getRenderer(family, rendererType);
    }
    /**
     * @return
     */
    public ResponseStateManager getResponseStateManager() {
        return getDefaultRenderKit().getResponseStateManager();
    }
   
   
    /* (non-Javadoc)
     * @see javax.faces.render.RenderKit#createResponseStream(java.io.OutputStream)
     */
    public ResponseStream createResponseStream(OutputStream out)
    {
        return getDefaultRenderKit().createResponseStream(out);
    }

    /**
     * TODO - create own implementation for @see javax.faces.component.UIViewRoot ,
     * and get default renderKitId as value, setted at creation time.
     * in this case, we can substitute concrete renderKit even if it pointed
     * as value for <f:view> tag on 1.2 specification.
     * @return Returns the defaultRenderer.
     */
    protected RenderKit getDefaultRenderKit() {
        if (defaultRenderKit == null)
        {
          String defaultRenderkitId = null;
          FacesContext context = null;
            RenderKitFactory rdf = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
            try {
        context = FacesContext.getCurrentInstance();
              // IN JSF-RI verifications, context may be null !
              if(null != context) {
        defaultRenderkitId = context.getApplication()
            .getDefaultRenderKitId();
              } else {
                  ApplicationFactory appFactory =(ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
                  defaultRenderkitId = appFactory.getApplication().getDefaultRenderKitId();
        }
      } catch (Exception e) {
        // TODO: handle exception
      }
            if(defaultRenderkitId == null ){
                defaultRenderkitId = RenderKitFactory.HTML_BASIC_RENDER_KIT;
            }
            defaultRenderKit = rdf.getRenderKit(context, defaultRenderkitId);
           
        }

        return defaultRenderKit;
    }

  public void setDefaultRenderKit(RenderKit renderKit) {
    // TODO Auto-generated method stub
        this.defaultRenderKit = renderKit;
   
  }

}
TOP

Related Classes of org.ajax4jsf.renderkit.ChameleonRenderKitImpl

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.