`
javatar
  • 浏览: 1680336 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

CommonTemplate完成外部构建树或表达式接口

    博客分类:
  • HTTL
阅读更多
CommonTemplate: http://www.commontemplate.org
问题来源:
http://javatar.iteye.com/blog/187669
解决方案:
在core包增加接口, 使外部构建树或表达式简化.
外部构建树或表达式通常分两种:
自顶向下: 也就是先创建父节点, 再压入子节点(通过栈的方式, 压入完所有子节点后弹出父节点).
自底向上: 也就是先创建子节点, 再创建父节点(在创建时将子节点传入).
基于这些, 提供了以下接口, 这些接口通过TemplateEngine和ExpressionEngine调用.
package org.commontemplate.core;

/**
 * 模板构建器, 为外部引擎或存储方式提供模板构建接口, 适合于自顶向下的构建方式.
 * (非线程安全)
 *
 * @author liangfei0201@163.com
 *
 */
public interface TemplateBudiler {

	/**
	 * 获取构建结果模板
	 *
	 * @return 模板
	 */
	public Template getTemplate();

	/**
	 * 开始模板
	 *
	 * @param templateName 模板名称
	 */
	public void beginTemplate(String templateName);

	/**
	 * 结束模板
	 */
	public void endTemplate();

	/**
	 * 开始块指令
	 *
	 * @param directiveName 指令名
	 * @param expression 指令表达式
	 */
	public void beginBlockDirective(String directiveName, Expression expression);

	/**
	 * 结束块指令
	 */
	public void endBlockDirective();

	/**
	 * 添加指令
	 *
	 * @param directiveName 指令名
	 * @param expression 指令表达式
	 */
	public void addDirective(String directiveName, Expression expression);

	/**
	 * 添加文本
	 *
	 * @param text 文本内容
	 */
	public void addText(String text);

	/**
	 * 添加注释内容
	 *
	 * @param comment 注释内容
	 */
	public void addComment(String comment);

}

package org.commontemplate.core;

import java.util.List;

/**
 * 模板元素工厂, 为外部引擎或存储方式提供模板组装元素, 适合于自底向上的构建方式.
 *
 * @author liangfei0201@163.com
 *
 */
public interface ElementFactory {

	/**
	 * 创建注释
	 *
	 * @param comment 注释内容
	 * @return 注释
	 */
	public Comment createComment(String comment);

	/**
	 * 创建文本
	 *
	 * @param text 文本内容
	 * @return 文本
	 */
	public Text createText(String text);

	/**
	 * 创建行指令
	 *
	 * @param name 指令名
	 * @param expression 指令表达式
	 * @return 行指令
	 */
	public Directive createDirective(String name, Expression expression);

	/**
	 * 创建块指令
	 *
	 * @param name 指令名
	 * @param expression 指令表达式
	 * @param elements 块指令内部元素
	 * @return 块指令
	 */
	public BlockDirective createBlockDirective(String name, Expression expression, List elements);

}

package org.commontemplate.core;

/**
 * 表达式	构建器, 为外部引擎或存储方式提供自顶向下的构建方式.
 * (非线程安全)
 *
 * @author liangfei0201@163.com
 *
 */
public interface ExpressionBuilder {

	/**
	 * 获取表达式结果
	 *
	 * @return 表达式
	 */
	public Expression getExpression();

	/**
	 * 添加一元操作符, 将把紧随其后添加表达式(包括操作符,变量,常量)作为参数.
	 *
	 * @param operatorName 操作符名
	 */
	public void addUnaryOperator(String operatorName);

	/**
	 * 添加二元操作符, 将把紧随其后添加的两个表达式(包括操作符,变量,常量)作为参数.
	 *
	 * @param operatorName 操作符名
	 */
	public void addBinaryOperator(String operatorName);

	/**
	 * 添加变量
	 *
	 * @param variableName 变量名
	 */
	public void addVariable(String variableName);

	/**
	 * 添加常量
	 *
	 * @param value 常量值
	 */
	public void addConstant(Object value);

}

package org.commontemplate.core;

/**
 * 表达式组件工厂, 为外部引擎或存储方式提供表达式组装元素, 适合于自底向上的构建方式.
 *
 * @author liangfei0201@163.com
 *
 */
public interface ExpressionFactory {

	/**
	 * 创建常量
	 *
	 * @param constantValue 常量值
	 * @return 常量表达式
	 */
	public Constant createConstant(Object constantValue);

	/**
	 * 创建变量
	 *
	 * @param variableName 变量名
	 * @return 变量表达式
	 */
	public Variable createVariable(String variableName);

	/**
	 * 创建一元操作符
	 *
	 * @param operatorName 操作符名
	 * @param operand 操作数
	 * @return 一元操作符表达式
	 */
	public UnaryOperator createUnaryOperator(String operatorName, Expression operand);

	/**
	 * 创建二元操作符
	 *
	 * @param operatorName 操作符名
	 * @param leftOperand 左操作数
	 * @param rightOperand 右操作数
	 * @return 二元操作符表达式
	 */
	public BinaryOperator createBinaryOperator(String operatorName, Expression leftOperand, Expression rightOperand);

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics