All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.richfaces.cdk.templatecompiler.statements.HelperMethodFactoryImpl Maven / Gradle / Ivy

The newest version!
/*
 * $Id$
 *
 * 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.richfaces.cdk.templatecompiler.statements;

import java.io.IOException;
import java.util.EnumMap;
import java.util.List;

import org.richfaces.cdk.Generator;
import org.richfaces.cdk.Logger;
import org.richfaces.cdk.generate.freemarker.FreeMarkerRenderer;
import org.richfaces.cdk.templatecompiler.TemplateModel;
import org.richfaces.cdk.templatecompiler.builder.model.Argument;
import org.richfaces.cdk.templatecompiler.builder.model.JavaMethod;
import org.richfaces.cdk.templatecompiler.builder.model.JavaModifier;
import org.richfaces.cdk.templatecompiler.el.types.ELType;
import org.richfaces.cdk.templatecompiler.el.types.TypesFactory;

import com.google.common.collect.Maps;
import com.google.inject.Inject;
import com.google.inject.name.Named;

/**
 * 

*

* * @author [email protected] * */ public class HelperMethodFactoryImpl implements HelperMethodFactory { private TypesFactory typesFactory; @Inject(optional = true) @Named(Generator.RENDERER_UTILS_CLASS) private String rendererUtilsClass = "org.richfaces.renderkit.RenderKitUtils"; private FreeMarkerRenderer renderer; private final EnumMap helperMethods = Maps.newEnumMap(HelperMethod.class); private final Logger log; @Inject public HelperMethodFactoryImpl(Logger log) { this.log = log; } /** *

* Initialization code. It should be called after field injection, so render kit utils class name should have proper value * here. *

* * @param renderer * @param typesFactory */ @Inject public void initHelperMethods(@TemplateModel FreeMarkerRenderer renderer, TypesFactory typesFactory) { this.renderer = renderer; this.typesFactory = typesFactory; buildHelperMethod(HelperMethod.EMPTINESS_CHECK, false, "emptiness-check-method", "object"); buildHelperMethod(HelperMethod.EQUALS_CHECK, false, "equals-check-method", "o1", "o2"); buildHelperMethod(HelperMethod.TO_BOOLEAN_CONVERSION, false, "conversion-to-boolean-method", "object"); buildHelperMethod(HelperMethod.TO_INTEGER_CONVERSION, false, "conversion-to-integer-method", "object"); buildHelperMethod(HelperMethod.TO_STRING_CONVERSION, false, "conversion-to-string-method", "object"); buildHelperMethod(HelperMethod.SHOULD_RENDER_ATTRIBUTE, true, "should-render-attribute", "attributeValue"); buildHelperMethod(HelperMethod.RENDER_ATTRIBUTE, true, "render-attribute", "attributeValue").getExceptions().add( typesFactory.getType(IOException.class)); JavaMethod renderAttributes = buildHelperMethod(HelperMethod.RENDER_ATTRIBUTES_SET, true, "render-attributes-set", "context", "component"); // TODO - put unknown 'Attributes' class into HelperMethod. List arguments = renderAttributes.getArguments(); arguments.add(new Argument("attributes", typesFactory.getType("Attributes"))); renderAttributes.getExceptions().add(typesFactory.getType(IOException.class)); buildHelperMethod(HelperMethod.CREATE_ATTRIBUTES, true, "create-attributes"); buildHelperMethod(HelperMethod.ADD_TO_SCRIPT_HASH, true, null); buildHelperMethod(HelperMethod.ADD_TO_SCRIPT_HASH_ATTRIBUTES, true, null); buildHelperMethod(HelperMethod.TO_SCRIPT_ARGS, true, null); buildHelperMethod(HelperMethod.CONCAT, true, null); buildHelperMethod(HelperMethod.HAS_FACET, true, null); } private JavaMethod buildHelperMethod(HelperMethod helperMethod, boolean utilsMethod, String templateName, String... argumentNames) { JavaMethod helperJavaMethod; if (utilsMethod && !RendererUtilsMethod.BUILT_IN.equals(rendererUtilsClass)) { helperJavaMethod = new RendererUtilsMethod(helperMethod, rendererUtilsClass); } else { String[] argumentTypes = helperMethod.getArgumentTypes(); Argument[] arguments = new Argument[argumentNames.length]; for (int i = 0; i < argumentNames.length; i++) { arguments[i] = new Argument(argumentNames[i], typesFactory.getType(argumentTypes[i])); } ELType returnType = typesFactory.getType(helperMethod.getReturnType()); helperJavaMethod = new JavaMethod(helperMethod.getName(), returnType, arguments); helperJavaMethod.addModifier(JavaModifier.PRIVATE); helperJavaMethod.addModifier(JavaModifier.STATIC); helperJavaMethod.setMethodBody(new FreeMarkerTemplateStatementBase(renderer, templateName)); } helperMethods.put(helperMethod, helperJavaMethod); return helperJavaMethod; } /* * (non-Javadoc) * * @see org.richfaces.cdk.templatecompiler.statements.HelperMethodFactory#getHelperMethod(org.richfaces.cdk.templatecompiler * .el.HelperMethod) */ @Override public JavaMethod getHelperMethod(HelperMethod helper) { return helperMethods.get(helper); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy