WEB开发网
开发学院软件开发Java 使用 EMF Validation 框架来验证 EMF 模型 阅读

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

 2010-03-03 00:00:00 来源:WEB开发网   
核心提示: 图 5. 修改 Library 模型的 Base Package 属性接下来,我们就可以生成 Library 模型的 Java 实现了,使用 EMF Validation 框架来验证 EMF 模型(5),如图 6 所示,在 Library 包上单击右键,实现了基本的验证逻辑,并将验证结果通过状态

图 5. 修改 Library 模型的 Base Package 属性
使用 EMF Validation 框架来验证 EMF 模型

接下来,我们就可以生成 Library 模型的 Java 实现了。如图 6 所示,在 Library 包上单击右键,并在弹出菜单中选择 Generate Model Code 项,在 test.emf.validation 项目中生成 Library 的 Java 实现。

图 6. 生成 Library 模型的 Java 实现
使用 EMF Validation 框架来验证 EMF 模型

同样地,选择 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(); 
 } 
 } 

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:使用 EMF Validation

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接