Package org.ajax4jsf.context

Source Code of org.ajax4jsf.context.ViewResources

/**
*
*/
package org.ajax4jsf.context;

import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

import javax.faces.FactoryFinder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
import javax.faces.render.Renderer;

import org.ajax4jsf.renderkit.HeaderResourceProducer;
import org.ajax4jsf.renderkit.UserResourceRenderer;

/**
* @author asmirnov
*
*/
public class ViewResources {

  LinkedHashSet scripts = new LinkedHashSet();
  LinkedHashSet styles = new LinkedHashSet();
  LinkedHashSet userScripts = new LinkedHashSet();
  LinkedHashSet userStyles = new LinkedHashSet();
  boolean processStyles = true;
  boolean processScripts = true;
  RenderKit renderKit = null;

  public void collect(FacesContext context) {
    UIViewRoot root = context.getViewRoot();
    RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
        .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
    renderKit = rkFactory.getRenderKit(context, context
        .getViewRoot().getRenderKitId());
    processHeadResources(context, root);
    //styles.addAll(userStyles);
    scripts.addAll(userScripts);
  }

  /**
   * Append nessesary scripts and styles from component ( if renderer
   * implements {@link HeaderResourceProducer}) and recursive process all
   * facets and childrens.
   *
   * @param context
   *            TODO
   * @param root
   */
  private void processHeadResources(FacesContext context, UIComponent root) {
    Renderer renderer = getRenderer(context, root);
    if (null != renderer) {
      if ((processScripts || processStyles ) && renderer instanceof HeaderResourceProducer) {
        HeaderResourceProducer producer = (HeaderResourceProducer) renderer;
        if (processScripts) {
          Set set = producer.getHeaderScripts(context, root);
          if (null != set) {
            scripts.addAll(set);
          }

        }
        if (processStyles) {
          Set set = producer.getHeaderStyles(context, root);
          if (null != set) {
            styles.addAll(set);
          }

        }
      } else if (renderer instanceof UserResourceRenderer) {
        UserResourceRenderer producer = (UserResourceRenderer) renderer;
        Set set = producer.getHeaderScripts(context, root);
        if (null != set) {
          userScripts.addAll(set);
        }
        set = producer.getHeaderStyles(context, root);
        if (null != set) {
          userStyles.addAll(set);
        }
      }

    }
    for (Iterator iter = root.getFacets().values().iterator(); iter
        .hasNext();) {
      UIComponent child = (UIComponent) iter.next();
      processHeadResources(context, child);
    }
    for (Iterator iter = root.getChildren().iterator(); iter.hasNext();) {
      UIComponent child = (UIComponent) iter.next();
      processHeadResources(context, child);
    }
  }

  /**
   * Find renderer for given component.
   *
   * @param context
   * @param comp
   * @param renderKit
   * @return
   */
  private Renderer getRenderer(FacesContext context, UIComponent comp) {

    String rendererType = comp.getRendererType();
    if (rendererType != null) {
      return (renderKit.getRenderer(comp.getFamily(), rendererType));
    } else {
      return (null);
    }

  }

  /**
   * @return the processStyles
   */
  public boolean isProcessStyles() {
    return processStyles;
  }

  /**
   * @param processStyles the processStyles to set
   */
  public void setProcessStyles(boolean processStyles) {
    this.processStyles = processStyles;
  }

  /**
   * @return the processScripts
   */
  public boolean isProcessScripts() {
    return processScripts;
  }

  /**
   * @param processScripts the processScripts to set
   */
  public void setProcessScripts(boolean processScripts) {
    this.processScripts = processScripts;
  }

  /**
   * @return the scripts
   */
  public Set getScripts() {
    return scripts;
  }

  /**
   * @return the styles
   */
  public Set getStyles() {
    return styles;
  }

  /**
   * @return user styles
   */
  public Set getUserStyles() {
    return userStyles;
  }
 
  public void addScript(String scriptUrl) {
    scripts.add(scriptUrl);
  }

  public void addStyle(String styleUrl) {
    styles.add(styleUrl);
  }
}
TOP

Related Classes of org.ajax4jsf.context.ViewResources

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.