EMF提供了两类三种方式来校验EMF模型。
1> EMF ECore规则校验
2> Live校验
3> Batch校验
· EMF校验代码
这里用到的代码可以在EMF提供的例子中查看到。Example->EMF Validation Framework Plug-ins->General Validation Example)
· EMF ECore规则校验
主要由org.eclipse.emf.ecore.util.EObjectValidator来完成,主要校验EFeature和EAttribute(EXTLibraryPackageImpl.initializePackageContents())
或者,通过EOperation/EAnnotation添加操作来实现自定义[1]的校验。
如果在Ecore中设置的属性,需要有特殊的考虑,可以通过实现自定义的EValidator来代替EMF默认的EObjectValidator。注册方式如下:
// Register package validator
EValidator.Registry.INSTANCE.put
(theEcorePackage,
new EValidator.Descriptor()
{
public EValidator getEValidator()
{
return EcoreValidator.INSTANCE;
}
});
可以通过下面两种方式来注册:
1) 在初始化ModelPackage时实现: org.eclipse.emf.ecore.impl.EcorePackageImpl.init()
2) 通过StartUp扩展点来实现: org.eclipse.ui.startup [2]
· Batch模型校验 & Live实时校验 [3][4]
主要是通过扩展点来注册,实现AbstractModelConstraint(#validate)校验类,并把该类添加到扩展点的constraint节点上:
需要注意的是,constraintProvider的package的Uri需要和模型中的package-uri对应。如图所示:
参考文章:
[1] 八进制-模型的验证 http://www.cnblogs.com/bjzhanghao/archive/2006/08/09/472607.html
官方EMF Validation Overview http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.emf.doc%2Freferences%2Foverview%2FEMF.Validation.html
[2] EMF Validation Adapter http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.emf.validation.doc/tutorials/validationAdapterTutorial.html
[3] 使用 EMF Validation 框架来验证 EMF 模型 http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-emfvldt/index.html
Validator Service http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.emf.validation.doc/tutorials/validationAdapterTutorial.html