快速业务通道

基于Eclipse平台的代码生成技术 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
perty("line.separator")) : nl;   protected final String TEXT_1 = "Hello, ";   protected final String TEXT_2 = "!" + NL + "The current time is ";   protected final String TEXT_3 = ". ";   protected final String TEXT_4 = NL;   public String generate(Object argument)   {   final StringBuffer stringBuffer = new StringBuffer();   stringBuffer.append(TEXT_1);   stringBuffer.append(((List)argument).get(0).toString());   stringBuffer.append(TEXT_2);   stringBuffer.append(new java.util.Date());   stringBuffer.append(TEXT_3);   stringBuffer.append(TEXT_4);   return stringBuffer.toString();   }   }

基于Eclipse平台的代码生成技术(3)

时间:2012-02-26 IBM 吕锋 于沛 王轩

调用 JET 执行模板生成操作的代码如下:

清单 3. 生成操作代码

// 模板文件所在插件项目的名称   String pluginId = "jet3";   // 通过插件项目获得其路径(basePath)   String basePath = Platform.getBundle(pluginId).getEntry("/").toString();   // 模板文件在项目中的路径及文件名    String uri = "templates/echo.jet";   JETEmitter emitter = new JETEmitter(basePath + uri);   IProgressMonitor progress = new NullProgressMonitor();   // 声明一个 List 作为数据变量集的 container   List<String> argument = new ArrayList<String>();   argument.add(fileName);   argument.add("12334");   // 对当前模板进行转换并将需要输出成实际文件的内容返回以便通过输出流输出   String result = emitter.generate(progress, new Object[] { argument });

示例 2 骨架(skeleton)的使用(demo2)

实际应用中往往会有多个代码执行类调用公用的方法或变量的情况,这时候我们通常会希望能够对代码执行类加入特定的方法,或在代码的生成过程中定制处理。对这类问题 JET 提供了一种强大的解决方案,骨架(skeleton)。

所谓骨架,简单来说是修改编译后的模板文件代码的样子。比如我们希望模板文件编译后的代码执行类要继承某个基类、实现某个接口、包含某个常量或方法,就应采用骨架技术。

以下对示例 1 中的模板进行少许修改,以对骨架有一个基本的了解。

在 templates 目录中,创建 demo.skeleton 文件,编辑其内容为

清单 4. demo.skeleton 文件内容

import java.util.Date;   public class CLASS {   public String s = "Mission Completed!";   private Date getCurrentDate() {   return new Date();   }   public String generate(Object argument) {   return "";   }   }

在该文件中,我们 import java.util.Date 类,声明了 String s 及声明了方法 getCurrentDate(),这些内容将被合并到对模板文件进行编译后的代码中。此外,在文件中的类名“ CLASS ”在代码执行类中会被模板文件中的代码执行类类名替换。

将 demo1.jet 文件修改为以下内容,并将文件另存为 demo2.jet 。

清单 5. demo2.jet

<%@jet package="demo.translated" imports="java.util.List" class="Demo2"   skeleton="demo.skeleton"%>   Hello, <%=((List)argument).get(0).toString()%>!   The current time is <%=getCurrentDate()%>.   <

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号