使用 EMF Validation 框架来验证 EMF 模型
2010-03-03 00:00:00 来源:WEB开发网图 5. 修改 Library 模型的 Base Package 属性
接下来,我们就可以生成 Library 模型的 Java 实现了。如图 6 所示,在 Library 包上单击右键,并在弹出菜单中选择 Generate Model Code 项,在 test.emf.validation 项目中生成 Library 的 Java 实现。
图 6. 生成 Library 模型的 Java 实现
同样地,选择 Generate Edit Code 菜单项和 Generate Editor Code 菜单项可以生成 Library 模型的编辑器代码。在进行完迄今为止的这些步骤之后,我们可以开始编写代码来利用 EMF Validation Framework“保护”Library 模型了。
第二步 定义 batch constraint
前面提到过,用 JAVA 实现的约束都需要扩展 AbstractModelConstrain,实现 validate() 方法。在清单 3 的代码中,我们定义了一个 constraint 用来验证图书馆,书籍,作者三者的名字都不能为空,这个方法通过输入的验证上下文(IValidationContext)获取目标对象,实现了基本的验证逻辑,并将验证结果通过状态信息(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();
}
}
Tags:使用 EMF Validation
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接