快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
实现了基本的验证逻辑,并将验证结果通过状态信息(IStatus)报告给用户 ,使用起来非常直观。

清单 3. 代码示例

public class NonEmptyNamesConstraint extends AbstractModelConstraint  {   public IStatus validate(IValidationContext ctx) {    EObject eObj = ctx.getTarget();    EMFEventType eType = ctx.getEventType();    // batch validation 时调用    if (eType == EMFEventType.NULL) {    String name = null;    if (eObj instanceof Writer) {     name = ((Writer)eObj).getName();    } else if (eObj instanceof Library) {     name = ((Library)eObj).getName();    } else if (eObj instanceof Book) {     name = ((Book)eObj).getTitle();    }    if (name == null || name.length() == 0) {   return ctx.createFailureStatus(new Object[] {eObj.eClass().getName ()});    }    }    return ctx.createSuccessStatus();   }   }

我们通过 IValidationContext 的 getTarget() 方法来获取等待验证的目标模型元素, 并且只有在 eventType 的值为 EMFEventType.NULL 也就是批量验证模式下才进行名字不为 空的验证。如果验证失败,会返回一个 FailureStatus 对象,验证成功则返回 SuccessStatus 对象。

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

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

第三步 创建 constraint provider extension

定义约束后,我们必须让框架底层的验证服务知道它的存在,这是通过创建一个 constraintProviders 扩展点来实现。

如清单 4 所示,在定义一个 constraintProviders 扩展点时,我们首先要指定一个名字 空间,这个名字空间就是我们要验证的模型,然后我们要指定约束的实现方式,实现类,触 发模式以及一个唯一的 statusCode。接下来我们要定义在验证失败时用户看到的提示消息 message,message 可以包含任意数目的替代符 {},这些替代符的值可以在验证失败时通过 调用 ctx.createFailureStatus(new Object[] {...}) 来进行设置。最后我们需要定义的就 是验证的目标对象了,这里我们设定对 Library,Writer,Book 都进行验证。

清单 4. 定义一个 constraintProviders 扩展点

<extension  point="org.eclipse.emf.validation.constraintProviders">     <category        name="Library Constraints"        id="org.eclipse.emf.validation.example.library"/>     <constraintProvider cache="true">       <package   namespaceUri="platform:/resource/test.emf.validation/model/Library.ecore"/>       <constraints categories="emf.validation.example.library">        <constraint           lang="Java"           class="emf.model.library.validation.constraints.NonEmptyNamesConstraint"           severity="ERROR"           mode="Batch"           name="Non-Empty Names"           id="emf.validation.example.library.NameNotEmpty"           statusCode="1">          <description>           All items in a library model should have some  unique identifier or name.          </descri

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