Package org.lilystudio.ordinary.util

Source Code of org.lilystudio.ordinary.util.VelocityParser

package org.lilystudio.ordinary.util;

import java.util.HashMap;
import java.util.Map;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.context.InternalContextAdapterImpl;
import org.apache.velocity.runtime.RuntimeInstance;
import org.apache.velocity.runtime.parser.node.SimpleNode;
import org.lilystudio.ordinary.web.result.VelocityResult;
import org.lilystudio.util.StringReader;
import org.lilystudio.util.StringWriter;

/**
* Velocity文本转换器, 这里的附加参数是指需要回写的参数名称列表, 否则,
* 传入的数据集合不会被velocity语句改变
*
* @version 0.1.4, 2009/03/01
* @author 欧阳先伟
* @since Ordinary 0.1
*/
public class VelocityParser implements IParser {

  /** Velocity引擎对象 */
  private static RuntimeInstance engine = VelocityResult.getEngine();

  /** 模板语句 */
  private SimpleNode node;

  /** 需要回写保存的参数名称 */
  private String[] names;

  public void init(String text, String... objects) throws Exception {
    node = engine.parse(new StringReader(text), "");
    names = objects;
  }

  public String parse(Map<String, Object> map) throws Exception {
    VelocityContext context = new VelocityContext(new HashMap<String, Object>(
        map));
    // 进行临时的输出, 成功才真正的返回得到的结果
    StringWriter out = new StringWriter();

    InternalContextAdapterImpl ica = new InternalContextAdapterImpl(context);
    node.init(ica, engine);
    node.render(ica, out);

    // 回写指定的参数
    if (names != null) {
      for (String name : names) {
        map.put(name, context.get(name));
      }
    }
    return out.toString();
  }
}
TOP

Related Classes of org.lilystudio.ordinary.util.VelocityParser

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.