使用EMF进行建模,第3部分:使用Eclipse的JMerge定制生成的代码和编辑器

概述

本系列文章的 前一篇介绍了有关 Eclipse 的 Java Emitter Templates (JET)和代码生成的知识,在那篇文章中,您已经看到如何通过使用模板和代码生成器 来节省时间,并实现模式级的代码重用。然而在大部分情况中,这都还不够。您需要能够 将所生成的代码插入现有的代码中,或者允许以后的开发人员来定制所生成的代码,而不 需要在重新生成代码时重新编写任何内容。理想情况下,代码生成器的创建者希望可以支 持今后开发人员所有的需求:从修改方法的实现、修改各种方法签名,到修改所生成类的 继承结构。这是一个非常有趣的问题,目前还没有很好的通用解决方案;但是有一个很好 的纯 Java 的解决方案,称为 JMerge。

JMerge 是 EMF 中包含的一个开放源代码的工具,可以让您定制所生成的模型和编辑 器,而重新生成的代码不会损坏已经修改过的内容。如果描述了如何将新生成的代码合并 到现有定制过的代码中,那么 JETEmitter 就可以支持 JMerge。本文通过一个例子来展 示其中的一些可用选项。

第一步

假设您已经添加了一个新项目,在这个项 目中需要为编写的每个类都创建一个 JUnit 测试类,这样必须要对编写的每个方法都进 行测试。作为一个认真且高效的(或者比较懒的)程序员来说,您决定要编写一个插件, 它接受一个 Java 类作为输入,并生成 JUnit 测试例子的存根(stub)。您热情高涨地 创建了 JET 和插件,现在想允许用户定制所生成的测试类;然而在原有类的接口发生变 化时,仍然需要重新生成代码。要实现这种功能,可以使用 JMerge。

从插件中调 用 JMerge 的代码非常简单(参见清单 1)。这会创建一个新的 JMerger 实例,以及一 个 URI merge.xml,设置要合并的来源和目标,并调用 merger.merge() 。然后合并的内 容就可以展开为 merger.getTargetCompilationUnit() 。

清单 1. 调用 JMerge

 // ...
 JMerger merger =  getJMerger();

 // set source
  merger.setSourceCompilationUnit(
  merger.createCompilationUnitForContents(generated));

 // set  target
 merger.setTargetCompilationUnit(
  merger.createCompilationUnitForInputStream(
  new FileInputStream (target.getLocation().toFile())));

 // merge source and  target
 merger.merge();
 // extract merged contents
  InputStream mergedContents = new ByteArrayInputStream(
  merger.getTargetCompilationUnit().getContents().getBytes());

 //  overwrite the target with the merged contents
 target.setContents (mergedContents, true, false, monitor);
 // ...
// ...
private JMerger getJMerger() {
 // build URI for merge  document
 String uri =
  Platform.getPlugin (PLUGIN_ID).getDescriptor().getInstallURL().toString();
 uri +=  "templates/merge.xml";

 JMerger jmerger = new JMerger();
 JControlModel controlModel = new JControlModel( uri );
  jmerger.setControlModel( controlModel );
 return jmerger;
}

时间: 2024-10-01 12:55:26

使用EMF进行建模,第3部分:使用Eclipse的JMerge定制生成的代码和编辑器的相关文章

使用Topcased改进EMF模型编辑视图

EMF 是 Eclipse 建模框架,它是 Eclipse MDA(Model Driven Architecture)的重要组成部分,其 元模型 ECore 是 MOF 的 Java 实现,根据 Java 语言特性对 MOF 适当简化并增加 Java 特性.EMF 主 要提供了元模型的创建,利用模型生成 java 代码,并且提供了一个基本的模型文件编辑环境.通过 EMF 可以自动生成模型的编辑视图.但 EMF 的默认编辑视图功能简单,用户界面不够灵活,难以满足大型业 务系统要求.Topcase

浅析Eclipse建模框架(EMF)及其动态能力

如果给定一个模型,那么EMF能够自动生成Java源代码-该源码允许你创建.查询.更新.串行化.反串行化.检验和追踪你的模型实例的变化.EMF提供了一组有效的反射API并且允许你用动态的(非生成的)模型进行工作. 一.引言 Eclipse建模框架(EMF)是一个Java开源框架与代码生成工具-用于基于结构化的模型来构建工具和其它应用程序.在Eclipse平台在用户界面和文件级上提供一个强有力的集成框架的同时,EMF加强了这种能力来实现工具和应用程序之间良好粒度的数据分享. 类似于其它的Java绑定

一种基于EMF模型的在GEF中判断创建连接线有效性的方法

简介: 结合目前比较受欢迎的 EMF(Eclipse Modeling Framework)和 GEF(Graphical Editing Framework)技术,提出了一种在图形化开发中创建连接线时普遍适用的验证方法. 最后给出了一个创建 连接线时动态 Schema 验证的例子,并根据 Schema 的定义列出创建连接线的真值表.针对该真值表的每 项进行验证,保证不符合 Schema 定义规则的模型对应的图形之间不能创建连接线,降低了 Schema 验证 和修改的复杂性. 一种基于 EMF

使用EMF实现模型驱动开发,第1部分:创建UML模型并生成代码

EMF 究竟是什么? Eclipse Modeling Framework(EMF)是一个开放源代码的 框架,它的目标是实现模型驱动架构(Model-Driven Architecture)的开发.如果我们 当中的少数人有幸得到了某个 UML 模型,那么这个框架就可以帮助我们将文档变成代码 .至于其他人,这个工具也使您又有一次机会向老板证实,把时间花在为解决方案建模上 是值得的.除了可以生成令人赞叹的 Java 代码之外,EMF 还可以生成 Eclipse 插件, 以及图形化的可定制编辑器.当您

PowerDesigner UML 建模简介(第一部分)

PowerDesigner UML 建模简介David Dichmann,PowerDesigner 产品经理,Sybase, Inc. 由于引入了 UML,PowerDesigner 8.0 支持使用例图.序列图和类图的面向对象分析与设计(OOAD).在即将发布的 9.0 版中,PowerDesigner 加强了对 UML 的支持,提供了活动图表和组件图表.改进了分析方法并增强了与开发过程的集成. PowerDesigner 能够帮助您构建适应现代 IT 发展的传统商务和电子商务系统,使用 J

基于GEF和EMF的JavaEE快速开发工具设计

0 引言 作为Java语言的缔造者,Sun公司在1999年底发布了企业级Java平台J2EE--Java 2 Enterise Edition.随着J2EE 1.5标准的发布,Sun将J2EE正式更名为JavaEE.JavaEE并非是一个产品,而是一系列技术和标准的集合.具体JavaEE平台下的产品由各厂商实现,并遵循同一个标准.本文描述了一款基于GEF和EMF技术的JavaEE应用快速开发工具--jStudio,它可以快速.高效地自动生成基于Struts+Spring+Hibernate的Ja

NetBeans UML建模模块

利用NetBeans UML建模功能,设计者和开发者可以分别专注于各自的工作,即设计者专注于应用程序的设计,而开发者专注于编写代码.首先,设计者和分析人员将使用标准的建模语言 UML 来设计应用程序,然后开发者通过UML模型来编写源代码.当然,UML建模功能具有两种工作方式(正向工程和逆向工程),您不仅可以通过UML模型来生成源代码,还可以通过对源代码执行的更改来更新模型. 注意:NetBeans 的更新中心为您提供了 UML模块.您需要了解有关如何在 NetBeans IDE 中添加模块的信息

服务站: Web服务软件工厂建模版本

Web 服务软件工厂:建模版本也称为"服务工厂",它是一个资源集合,这些资源可帮助您以简单有效的方式在 Windows Communication Foundation (WCF) 和 ASMX 中建模和构建 Web 服务.与先前版本的服务工厂相比,最新版本使用的是模型,而先前版本使用的是基于 Guidance Automation Toolkit (GAT) 的向导.服务工厂现在允许您通过创建三种不同的模型来构建 Web 服务:数据约定模型.服务约定模型和宿主模型.我们将首先讨论这三

EMF介绍系列(六、自定义命令)

EMF生成的应用程序里,用户的发出的每一条命令都是可以撤销(Undo)的,例如修改了 产品的价格,按一下撤销按钮就能恢复原来的价格,当然还可以通过重做(Redo)再回到新 的价格.为了实现这个功能,应用程序里维护了一个用于存放命令的类似栈的数据结构 (CommandStack),每一条执行过的命令都被存放在那里,需要撤销时取出最近一条命令进 行撤销.这个数据结构是由EditingDomain对象负责维护的, EditingDomain相当于编辑模型 时的环境. 在EMF里命令框架实际上可以分为两