快速业务通道

使用EMF Validation框架来验证EMF模型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

使用EMF Validation框架来验证EMF模型

时间:2011-04-23 IBM 仇璐 杨晓峰

EMF(Eclipse Modeling Framework)建模框架能够帮助我们将模型 (UML, XSD 等 ) 转 换成为健壮且功能丰富的 Java 代码。使用 EMF 来搭建应用程序,不但能极大的提高开发效 率,而且还能利用 EMF 提供的很多特性来保证模型的健壮和完善,主要包括模型变化通知机 制,模型的持久化以及模型验证框架。本文将要介绍的 EMF Validation Framework,是 EMF 的一个重要部分,通过使用 EMF Validation Framework,我们能方便的对定义的 EMF 模型 添加验证约束,以保证模型数据遵从于用户自定义的约束。

EMF Validation Framework 提供了对 EMF eObjects 的校验框架,和 EMF EValidator API 相比

它能提供更复杂全面的验证并且易用易扩展。EMF Validation Framework 提供了灵活的 验证定义方式,支持两种验证触发机制:Batch 和 Live。它支持用 JAVA 和 OCL 语言来实 现约束,此外它还支持自定义验证时的模型扫描算法,并提供了一个 Validation Client Context 来规避不必要的验证。

EMF Validation Framework 的实现原理

在 EMF Validation Framework 框架中有几个重要的概念,这些概念构成了验证框架的基 本部分,我们在下面对其逐一介绍:

约束(constraints)

所有的约束必须实现 IModelConstraint 接口,定义了验证执行的逻辑(validate()), 并拥有一个约束描述符(一个实现 IConstraintDescriptor 接口的类),该描述符包含了这 个约束的源信息,例如,验证模式是 live 还是 batch,验证的目标对象等,图 1 可以给您 一个基本的概念。

图 1. 约束

使用EMF Validation框架来验证EMF模型(2)

时间:2011-04-23 IBM 仇璐 杨晓峰

约束的具体实现可以用 JAVA 或者 OCL 语言,用 JAVA 实现的您可以参考下面的图 2, 其约束都是 AbstractModelConstraint 的子类,它必须实现 validate() 方法。这个方法通 过输入的验证上下文(IValidationContext)获取目标对象、触发的事件类型等信息,实现 业务验证逻辑,并将验证结果通过状态信息(IStatus)报告给用户。

图 2. 约束抽象类和约束上下文等

验证上下文(Validation Context)

在上面的图 2 中,我们简单说明了约束和约束上下文之间的关系,约束上下文记录了当 前验证操作的有关信息,包括验证的目标对象,触发实时验证的事件类型,模型变化值等。除了记录这些上下文信息外,validation context 还提供了一些提高验证效率的方法。例如 方法 skipCurrentConstraintFor()可以用来指定一些的目标对象是“合格的”可以不执行 某些验证方法,方法 get/putCurrentConstraintData() 可以用来缓存验证对象。

验证模式(Validation Modes)

EMF Validation Framework 提供两种验证模式:批量验证模式(Batch) 和实时验证模 式(Live)。

批量验证模式可以对一个集合内的 EObjects 进行校验 , 通常由用户的动作触发,例如 用户点击验证菜单项对整个模型进行验证。批量验证模式时,输入的通常是一个模型元素集 合,输出的验证状态信息(IStatus)包括验证过程中所发现的所有问题 ,因此这个结果通 常是多状态的。

使用EMF Validation框架来验证EMF模型(3)

时间:2011-04-23 IBM 仇璐 杨晓峰

批量验证模式的示例代码如清单 1 所示:

清单 1. 批量验证模式的示例代码

List objects = myResource.getContents();   IValidator validator = ModelValidationService.getInstance ().newValidator(EvaluationMode.BATCH);   IStatus results = validator.validate(objects);   if (!results.isOK()) {    ErrorDialog.openError(null, "Validation&qu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号