Package org.ajax4jsf.templatecompiler.elements.std

Source Code of org.ajax4jsf.templatecompiler.elements.std.ScriptOptionTemplateElement

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

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.ajax4jsf.templatecompiler.builder.CompilationContext;
import org.ajax4jsf.templatecompiler.builder.CompilationException;
import org.ajax4jsf.templatecompiler.el.ELParser;
import org.ajax4jsf.templatecompiler.elements.A4JRendererElementsFactory;
import org.ajax4jsf.templatecompiler.elements.NameValuePair;
import org.ajax4jsf.templatecompiler.elements.TemplateElementBase;
import org.apache.velocity.VelocityContext;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

/**
* Processing c:scriptOption
* @author Nick Belaevski
* @since 3.3.2
*/
public class ScriptOptionTemplateElement extends TemplateElementBase {

  private static final String TEMPLATE = A4JRendererElementsFactory.TEMPLATES_TEMPLATECOMPILER_PATH+"/scriptOption.vm";

  private List<NameValuePair> values = new ArrayList<NameValuePair>();
 
  private String defaultValue;
 
  private String variables = null;
  private String attributes = null;

  private String name = null;
  private String value = null;

  private String wrapperName;
 
  private static boolean isEmpty(String s) {
    return s == null || s.length() == 0;
  }

  private static String getWrapperName(String wrapper) {
    String result = "DEFAULT";
   
    if (!isEmpty(wrapper)) {
      result = wrapper.replaceAll("(\\p{Upper})", "_$1").toUpperCase(Locale.US);
    }

    return result;
  }
 
  private void initializeSettings(Node element) {
    NamedNodeMap nnm = element.getAttributes();
   
    Node variablesNode = nnm.getNamedItem("variables");
    if (variablesNode != null) {
      variables = variablesNode.getNodeValue();
    }
   
    Node attributesNode = nnm.getNamedItem("attributes");
    if (attributesNode != null) {
      attributes = attributesNode.getNodeValue();
    }
   
    Node nameNode = nnm.getNamedItem("name");
    if (nameNode != null) {
      name = nameNode.getNodeValue();
    }
   
    Node valueNode = nnm.getNamedItem("value");
    if (valueNode != null) {
      value = valueNode.getNodeValue();
    }
   
    Node defaultValueNode = nnm.getNamedItem("defaultValue");
    if (defaultValueNode != null) {
      defaultValue = defaultValueNode.getNodeValue();
    }
   
    Node wrapperNode = nnm.getNamedItem("wrapper");
    String wrapperNodeValue = null;
    if (wrapperNode != null) {
      wrapperNodeValue = wrapperNode.getNodeValue();
    }
   
    wrapperName = getWrapperName(wrapperNodeValue);
  }
 
  private void checkSettings() {
    if (!isEmpty(attributes) || !isEmpty(variables)) {
      if (!isEmpty(name) || !isEmpty(value)) {
        throw new RuntimeException("c:scriptOption tag misconfiguration: use either 'attributes'/'variables' or 'name' and 'value'!");
      }
    } else {
      if (isEmpty(name) || isEmpty(value)) {
        throw new RuntimeException("c:scriptOption tag misconfiguration: 'name' and 'value' should be both set!");
      }
    }
  }
 
  private void addELValues(String namesList, String elFormat, CompilationContext componentBean) {
    if (!isEmpty(namesList)) {
      String[] attributesSet = namesList.split(",");
      for (String attribute : attributesSet) {
        String trimmedAttribute = attribute.trim();
        if (trimmedAttribute.length() != 0) {
          String elExpression = String.format(elFormat, trimmedAttribute);
          values.add(new NameValuePair(trimmedAttribute,
            ELParser.compileEL(elExpression, componentBean)));
        }
      }
    }
  }
 
  public ScriptOptionTemplateElement(Node element,
      CompilationContext componentBean) {
    super(element, componentBean);
   
    componentBean.addToImport("org.ajax4jsf.renderkit.RendererUtils.ScriptHashVariableWrapper");
   
    initializeSettings(element);
    checkSettings();
   
    addELValues(this.attributes, "#{component.attributes['%s']}", componentBean);
    addELValues(this.variables, "#{%s}", componentBean);
   
    if (!isEmpty(name) && !isEmpty(value)) {
      values.add(new NameValuePair(name.trim(), ELParser.compileEL(value.trim(), componentBean)));
    }
  }

  protected String getTemplateName() {
    return TEMPLATE;
  }

  public String getBeginElement() throws CompilationException {
    VelocityContext context = new VelocityContext();
   
    context.put("mapName", ScriptObjectTemplateElement.getVariableName());
    context.put("valuesList", values);
   
    if (!isEmpty(defaultValue)) {
      context.put("defaultValue", defaultValue);
    } else {
      context.put("defaultValue", null);
    }

    context.put("wrapperName", wrapperName);
   
    return this.getComponentBean().processTemplate(getTemplateName(), context);
  }

  public String getEndElement() throws CompilationException {
    return null;
  }
 
}
TOP

Related Classes of org.ajax4jsf.templatecompiler.elements.std.ScriptOptionTemplateElement

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.