Package com.agilejava.docbkx.maven

Source Code of com.agilejava.docbkx.maven.ExpressionHandler

/*
* #%L
* Docbkx Maven Base
* %%
* Copyright (C) 2006 - 2014 Wilfred Springer, Cedric Pronzato
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.agilejava.docbkx.maven;

import java.lang.reflect.Method;

import javax.servlet.jsp.el.ELException;
import javax.servlet.jsp.el.ExpressionEvaluator;
import javax.servlet.jsp.el.FunctionMapper;
import javax.servlet.jsp.el.VariableResolver;

import org.apache.commons.el.ExpressionEvaluatorImpl;

import org.apache.maven.plugin.logging.Log;

import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;

/**
* A {@link ProcessingInstructionHandler} that evaluates expressions passed as data as JSP
* expression language expressions.
*
* @author Wilfred Springer
*/
public class ExpressionHandler implements ProcessingInstructionHandler {
  /**
   * The name of the processing instruction.
   */
  private final String PI_NAME = "eval";

  /**
   * The object responsible for resolving variables.
   */
  private VariableResolver resolver;

  /**
   * The object used for logging.
   */
  private Log log;

  /**
   * A simplified function mapper that basically does not support any functions at all.
   */
  private FunctionMapper mapper = new FunctionMapper() {
    public Method resolveFunction(String prefix, String localName) {
      return null;
    }
  };

  /**
   * Constructs a new instance.
   *
   * @param resolver
   *            The object used for resolving variables. (Not
   *            <code>null</code>.)
   * @param log
   *            The object used for logging. (Not <code>null</code>.)
   */
  public ExpressionHandler(VariableResolver resolver, Log log) {
    this.resolver = resolver;
    this.log = log;
  }

  // JavaDoc inherited
  /**
   * DOCUMENT ME!
   *
   * @param data DOCUMENT ME!
   * @param handler DOCUMENT ME!
   */
  public void handle(String data, ContentHandler handler) {
    ExpressionEvaluator evaluator = new ExpressionEvaluatorImpl();
    Object value;

    try {
      value = evaluator.evaluate(data, Object.class, resolver, mapper);

      if (value != null) {
        char[] result = value.toString().toCharArray();
        handler.characters(result, 0, result.length);
      } else {
        log.debug("Failed to resolve " + data);
      }
    } catch (ELException ele) {
      log.error("Failed to handle EL expression.", ele);
    } catch (SAXException saxe) {
      log.error("Failed to generate content.", saxe);
    }
  }

  // JavaDoc inherited
  /**
   * DOCUMENT ME!
   *
   * @param target DOCUMENT ME!
   *
   * @return DOCUMENT ME!
   */
  public boolean matches(String target) {
    return PI_NAME.matches(target);
  }
}
TOP

Related Classes of com.agilejava.docbkx.maven.ExpressionHandler

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.