http://blog.csdn.net/javaman_chen/article/details/6020050

//这里的验证强调的是condition的构造,基于查找来判断验证结果。支持OCL也支持java自己编写。

quary的基本逻辑是:编写约束条件,执行语句条件的查询,根据查询结果判断验证结果。

OCL的实现本身也依赖于Quary

Quary依赖于条件,条件集成自java的条件,基本的验证逻辑是:构造条件,根据isSatisfied(object)函数执行判断是否满足。

emf的验证可以采用上述的方式,可以采用较为复杂的形式,即通过select语句执行验证。

EMF查询框架主要由 org.eclipse.emf.query 这个plugin提供,创建并执行一个EMF查询,大概分为如下几步:
1. 创建查询数据源;
2. 构造EObjectCondition查询条件; 

(1)用java构造

  (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;
        }
    }

  (b)利用框架已提供的条件

  EObjectCondition inShopCondition = new IN(categorySet);

(2)用OCL构造

  1. EObjectCondition tolerableRead = new BooleanOCLCondition<EClassifier, EClass, EObject>(
  2. ocl.getEnvironment(),//ocl根环境
  3. "self.category <> BookCategory::Mystery implies self.pages < 200",//ocl约束
  4. EXTLibraryPackage.Literals.BOOK);//约束上下文

  构造参数中,还可以不指定约束的上下文(即第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();

  1. IQueryResult result = new SELECT(//查询结果封装成IQueryResult对象
  2. new FROM(searchScope),
  3. new WHERE(conditions))
  4. .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的实例开发

EMF学习,为了实现可扩展可自定义的模型验证 - emf quary 与 OCL的更多相关文章

  1. EMF学习,为了实现可扩展可自定义的模型验证 - 各种实现方法学习

    自: http://blog.csdn.net/javaman_chen/article/details/6057033 http://www.ibm.com/developerworks/cn/op ...

  2. ASP.NET Core - 实现自定义WebApi模型验证

    Framework时代 在Framework时代,我们一般进行参数验证的时候,以下代码是非常常见的 [HttpPost] public async Task<JsonResult> Sav ...

  3. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  4. 【转发】NPAPI学习(Firefox和Chrome扩展开发 )

    NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...

  5. Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮

    上次介绍了 Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 现在开始介绍如何配置审批流,首先在form上添加三个按钮,Submit, Agree, Reject: 1. ...

  6. Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)

    前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...

  7. C#Winform使用扩展方法自定义富文本框(RichTextBox)字体颜色

    在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示 和错误等类别.为了更好地区分不同类型的日志,我们需要使 ...

  8. Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  9. Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置

    Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...

随机推荐

  1. 2016年11月28日--ADO.Net 查、插、删、改 小练习

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. XCTest各种断言

    XCTFail(format…) 生成一个失败的测试: XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过: XCTAssertNotNil(a1, forma ...

  3. nodejs开发指南demo

    由于手上拿的教程是2012年出版的,到如今已历经N个版本,所以在写代码时报过一堆错.这是解决错误后的版本. 源码下载

  4. centOS 虚拟机设置固定IP:图形化设置

    右键单击图形化标志,Edit Connection 设置一下就可以了.

  5. ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟

    中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...

  6. Select标签下拉列表二级联动级联

    首先从服务器端,绑定下拉列表,二级下拉的text命名按照一定规则加上一级下拉的ID. var options=new Array(); $(document).ready(function(){ // ...

  7. JDK各个版本的新特性jdk1.5-jdk8

    JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一 ...

  8. Struts2 动态方法调用

    01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...

  9. 【Spring】获取资源文件+从File+从InputStream对象获取正文数据

    1.获取资源文件或者获取文本文件等,可以通过Spring的Resource的方式获取 2.仅有File对象即可获取正文数据 3.仅有InputStream即可获取正文数据 package com.sx ...

  10. IC解密DS2431芯片解密DS2432、DS2433解密多少钱?

    IC解密DS2431芯片解密DS2432.DS2433解密多少钱? DS24系列可成功芯片解密的型号: DS2430A | DS2431 | DS2432 | DS2433 | DS2434 | DS ...