http://blog.csdn.net/javaman_chen/article/details/6020050java
//这里的验证强调的是condition的构造,基于查找来判断验证结果。支持OCL也支持java本身编写。框架
quary的基本逻辑是:编写约束条件,执行语句条件的查询,根据查询结果判断验证结果。eclipse
OCL的实现自己也依赖于Quaryide
Quary依赖于条件,条件集成自java的条件,基本的验证逻辑是:构造条件,根据isSatisfied(object)函数执行判断是否知足。函数
emf的验证能够采用上述的方式,能够采用较为复杂的形式,即经过select语句执行验证。学习
EMF查询框架主要由 org.eclipse.emf.query 这个plugin提供,建立并执行一个EMF查询,大概分为以下几步:
1. 建立查询数据源;
2. 构造EObjectCondition查询条件; spa
(1)用java构造.net
(a)继承EObjectCondition,实现isSatistied函数来编写本身的约束。对象
private static class ProductsLessThan3Condition extends EObjectCondition { public ProductsLessThan3Condition() {
super(PruneHandler.NEVER);
}
@Override
public boolean isSatisfied(EObject eObject) {
if (eObject instanceof Category) {
Category category = (Category) eObject;
EList products = category.getProducts();
if (products.size() < 3)
return true;
}
return false;
}
}blog
(b)利用框架已提供的条件
EObjectCondition inShopCondition = new IN(categorySet);
(2)用OCL构造
构造参数中,还能够不指定约束的上下文(即第3个构造参数为null),这样任何EMF实体若是含有category属性都会在该实体类上执行
"self.category <> BookCategory::Mystery implies self.pages < 200"约束检测。
3. 使用EMF查询框架提供的SELECT对象和UPDATE对象编写查询和更新语句;
statement = new SELECT(new FROM(shop), new WHERE(new ProductsLessThan3Condition()));
4. 执行语句获得查询或更新结果;
results = statement.execute();
5. 对执行结果进行检测,确保执行过程当中没有发生异常。
for(Object object : results)
{
System.out.println(object);
}
EMF提供了两套Query对象,SELECT和UPDATE,分别用于模型的查询操做和更新操做。
评估:
1.OCL语句能够灵活插入,主体语句放在第二个参数,约束上下文的定义放在第三个参数。所以比较符合可扩展验证的特性。
2.emf的验证若是采用OCL能够不采用select执行的方式,而是擦用condition自带的isSatisfied的方法。找一下OCL有没有?
3.OCL条件的开发须要再学习一下。
4.能够经过模型遍历,而后判断类型,以后分配给对应的satisfied,这个比较适合,须要查看一下输入的模型类型
5.看例子中须要本身构造集合,集合须要什么类型的,如何进行遍历。。。。
6.validation framework可以给定一个root而后进行遍历, 可是在这里,须要本身去找全部的对象集合。
7.在执行约束是就须要可以识别对应的元模型类别,即在编译时已经有全部的元模型类经过编译,而元模型类的导入只能在运行时执行,因此这里须要反射机制?
遍历,构造集合,交给对应的条件的isSatisfied
进一步的OCL开发
http://blog.csdn.net/javaman_chen/article/details/6017948
下一步:OCL的实例开发