使用 EMF Validation 框架来验证 EMF 模型
2010-03-03 00:00:00 来源:WEB开发网下面清单 8 的代码是对 constraintProviders 扩展点的修改,可以看到首先验证模式由 batch 变成了 live,此外我们定义了感兴趣的验证目标 EClass, 目标属性 EStructuralFeature 和触发事件类型。
清单 8. 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="Live"
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.
</description>
<message>
A {0} has been found to have no unique identifier (name or title).
</message>
<target class="Library">
<event name="Set">
<feature name="name"/>
</event>
<event name="Unset">
<feature name="name"/>
</event>
</target>
<target class="Writer">
<event name="Set">
<feature name="name"/>
</event>
<event name="Unset">
<feature name="name"/>
</event>
</target>
<target class="Book">
<event name="Set">
<feature name="title"/>
</event> <event name="Unset">
<feature name="title"/>
</event>
</target>
</constraint>
</constraints>
</constraintProvider>
</extension>
第八步 调用 live constraint
live constraint 的调用方式和之前介绍的 batch constraint 的调用方式有所不同,请参考清单 9 中的代码。我们知道 live validation 在收到注册目标对象属性(值)变更的通知消息时触发,因此在调用 live constraint 之前需要先定义一个 EContentAdapter,然后这个 EContentAdapter 绑定到目标资源,这样目标资源发生属性(值)变更时所发出的通知消息就能被我们的 constraint 获知。
清单 9. live constraint 的调用方式
Resource r = (Resource)i.next();
if (!resourceHasAdapter(r)) {
EContentAdapter liveValidationContentAdapter =
new LiveValidationContentAdapter();
r.eAdapters().add(liveValidationContentAdapter);
}
总结
通过一个简单的例子您已经基本了解了使用 EMF Validation Framework 进行模型验证的基本过程,可以看到通过使用 EMF Validation Framework 我们能方便地对 EMF 模型添加验证约束来保证模型数据遵从于用户自定义的规则。
Tags:使用 EMF Validation
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接