Package org.ajax4jsf.templatecompiler.elements

Source Code of org.ajax4jsf.templatecompiler.elements.A4JRendererElementsFactory

/**
* 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.templatecompiler.elements;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;

import org.ajax4jsf.templatecompiler.builder.CompilationContext;
import org.ajax4jsf.templatecompiler.builder.CompilationException;
import org.ajax4jsf.templatecompiler.elements.html.CDATAElement;
import org.ajax4jsf.templatecompiler.elements.html.CommentElement;
import org.ajax4jsf.templatecompiler.elements.html.PIElement;
import org.ajax4jsf.templatecompiler.elements.html.TextElement;
import org.ajax4jsf.templatecompiler.elements.std.ForEachTemplateElement;
import org.ajax4jsf.templatecompiler.elements.std.IFTemplateElement;
import org.ajax4jsf.templatecompiler.elements.std.ObjectTemplateElement;
import org.ajax4jsf.templatecompiler.elements.std.ScriptObjectTemplateElement;
import org.ajax4jsf.templatecompiler.elements.std.ScriptOptionTemplateElement;
import org.ajax4jsf.templatecompiler.elements.std.SetTemplateElement;
import org.ajax4jsf.templatecompiler.elements.vcp.AjaxRenderedAreaElement;
import org.ajax4jsf.templatecompiler.elements.vcp.FClientIDTemplateElement;
import org.ajax4jsf.templatecompiler.elements.vcp.FWriteAsScript;
import org.ajax4jsf.templatecompiler.elements.vcp.HeaderScriptsElement;
import org.ajax4jsf.templatecompiler.elements.vcp.HeaderStylesElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Node;

/**
* Tag processors factory.
*
* @author ayukhovich@exadel.com (latest modification by $Author:
*         maksimkaszynski $)
* @version $Revision: 1.1.2.2 $ $Date: 2007/02/26 20:48:44 $
*
*/
public class A4JRendererElementsFactory implements ElementsFactory {

  private static final Log log = LogFactory.getLog(A4JRendererElementsFactory.class);
 
  public static final String TEMPLATES_PATH = "META-INF/templates";

  public static final String TEMPLATES_TEMPLATECOMPILER_PATH = TEMPLATES_PATH+"/templatecompiler";

  private final static String DEFAULT_CLASS_ELEMENT_PROCESSOR = "org.ajax4jsf.templatecompiler.elements.html.HTMLElement";

  private final static Class[] paramClasses = new Class[] { Node.class,
      CompilationContext.class };

  private final static HashMap<String, String> mapClasses = new HashMap<String, String>();

  static {
    mapClasses.put("c:scriptObject", ScriptObjectTemplateElement.class.getName());
    mapClasses.put("c:scriptOption", ScriptOptionTemplateElement.class.getName());
    mapClasses.put("c:set", SetTemplateElement.class.getName());
    mapClasses.put("c:object", ObjectTemplateElement.class.getName());
    mapClasses.put("c:if", IFTemplateElement.class.getName());
    mapClasses.put("c:forEach", ForEachTemplateElement.class.getName());
    mapClasses.put("f:clientid", FClientIDTemplateElement.class.getName());
    mapClasses.put("f:clientId", FClientIDTemplateElement.class.getName());
    mapClasses.put("f:writeAsScript", FWriteAsScript.class.getName());
    mapClasses.put("f:insertComponent",
        "org.ajax4jsf.templatecompiler.elements.vcp.InsertComponent");

    mapClasses
        .put("f:call",
            "org.ajax4jsf.templatecompiler.elements.vcp.FCallTemplateElement");
    mapClasses
        .put("f:resource",
            "org.ajax4jsf.templatecompiler.elements.vcp.FResourceTemplateElement");

    mapClasses
        .put("u:insertFacet",
            "org.ajax4jsf.templatecompiler.elements.vcp.UInsertFacetTemplateElement");

    mapClasses
        .put("vcp:body",
            "org.ajax4jsf.templatecompiler.elements.vcp.VcpBodyTemplateElement");
    mapClasses.put("vcp:mock", "");

    mapClasses.put("jsp:scriptlet",
        "org.ajax4jsf.templatecompiler.elements.jsp.Scriptlet");
    mapClasses.put("jsp:declaration",
        "org.ajax4jsf.templatecompiler.elements.jsp.Declaration");
    mapClasses.put("jsp:directive.page",
        "org.ajax4jsf.templatecompiler.elements.jsp.DirectivePage");
    mapClasses.put("jsp:expression",
        "org.ajax4jsf.templatecompiler.elements.jsp.Expression");
    mapClasses.put("h:styles", HeaderStylesElement.class.getName());
    mapClasses.put("h:scripts", HeaderScriptsElement.class.getName());
    mapClasses.put("f:template", RootElement.class.getName());
    mapClasses.put("f:root", RootElement.class.getName());
    mapClasses.put("jsp:root", RootElement.class.getName());
    mapClasses.put("ajax:update", AjaxRenderedAreaElement.class.getName());
  }

  /* (non-Javadoc)
   * @see org.ajax4jsf.templatecompiler.elements.ElementsFactory#getProcessor(org.w3c.dom.Node, org.ajax4jsf.templatecompiler.builder.CompilationContext)
   */
  public  TemplateElement getProcessor(final Node nodeElement,
      final CompilationContext componentBean) throws CompilationException {
    TemplateElement returnValue = null;

    short nodeType = nodeElement.getNodeType();
    if (Node.CDATA_SECTION_NODE == nodeType) {
      returnValue =new CDATAElement(nodeElement, componentBean);
    } else if (Node.TEXT_NODE == nodeType) {
      returnValue =new TextElement(nodeElement, componentBean);
    } else if (Node.COMMENT_NODE == nodeType) {
      returnValue =new CommentElement(nodeElement, componentBean);
    } else if (Node.PROCESSING_INSTRUCTION_NODE == nodeType) {
      returnValue =new PIElement(nodeElement, componentBean);
    } else if (Node.ELEMENT_NODE == nodeType) {
      String className = (String) mapClasses.get(nodeElement.getNodeName());

    if (className == null) {
      className = DEFAULT_CLASS_ELEMENT_PROCESSOR;
    }

    if (!className.equals("")) {
      Class class1;
      try {
        log.debug("loading class: " + className);

        class1 = Class.forName(className);
        Object[] objects = new Object[2];
        objects[0] = nodeElement;
        objects[1] = componentBean;

        returnValue = (TemplateElement) class1.getConstructor(
            paramClasses).newInstance(objects);
      } catch (InstantiationException e) {
        throw new CompilationException("InstantiationException: "
            + e.getLocalizedMessage(), e);
      } catch (IllegalAccessException e) {
        throw new CompilationException("IllegalAccessException: "
            + e.getLocalizedMessage(), e);
      } catch (IllegalArgumentException e) {
        e.printStackTrace();
      } catch (SecurityException e) {
        e.printStackTrace();
      } catch (InvocationTargetException e) {
        e.printStackTrace();
        throw new CompilationException("InvocationTargetException: "
            + e.getMessage(), e);
      } catch (NoSuchMethodException e) {
        e.printStackTrace();
      } catch (ClassNotFoundException e) {
        throw new CompilationException(" error loading class: "
            + e.getLocalizedMessage());
      }
    }
    }
    return returnValue;
  }
}
TOP

Related Classes of org.ajax4jsf.templatecompiler.elements.A4JRendererElementsFactory

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.