EObjectCondition ,从名称上就可以意会到它是有关EObject的条件了。EObject和EMF的模型是关联的,那么,EObjectCondition 当然就是与EMF模型有关咯。比如,你的商店shop聚集了很多个商品的种类categories,你可以根据EObjectCondition 来查询商店shop中是拥有某xxCategory的商品。条件怎么构造?这个章节回有所介绍咯!呵呵,接着下去吧。
首先看看EObjectCondition,还是从结构图上分析:
EObjectCondition有很多内嵌子类,但是很多你都不能直接实例化它们,它们是留给EObjectCondition做逻辑操作使用的,也可以说,条件用于复合时使用到这些类:如And,Or等等,你看看EObjectCondition的所拥有的操作就明白了。
ENot条件,看看名称就懂,呵呵。
EObjectConditionAdapter是用于非EObject Condition 包装成 EObject Condition 的适配器。感觉这个适配器作用同值条件的适配器还是很相似的,值条件适配器在前一篇帖子里有介绍http://www.blogjava.net/orangewhy/archive/2007/06/10/123180.html。
好了,看看相关的示例吧。再次强调,模型怎么来?看http://www.cnblogs.com/bjzhanghao/category/38915.html系列的介绍吧(呵呵,不是刻意帮八兄做广告,只是回溯一下模型从哪来的)。
现在假设一个简单的使用场景:
1、假定厂家生成的物品种类有三种: “食物”, “日用品”, 和“体育器材”。
2、假定“人人乐”超市只进货“食物”, “日用品”这两种物品,“体育器材”在“人人乐”没有销售。
在看看另外一个EObjectCondition的结构,例子用要到了。
IN条件主要匹配“是否包含有”。它关联了IEObjectSource。EMF 的对象资源都是来自与这个接口,这是使得查询可以被嵌套。
EObjectTypeRelationCondition是同EMF对象类型有关的条件。例子会给出一种简单使用方法。类型的判别,是通过它关联的TypeRelation来定义的。能扩展类型吗?呵呵,我还没试过。
看看例子吧。假设你要看看厂家是否生产了某中商品(从类别体现):
看看“人人乐”是否有某类商品出售:
这里要有个注意,IN条件好像不能直接满足我们的要求,因为他需要Set类型的集合,但是商品类型却是再shop中关联。这里用了自定义的一个条件来扩展EObjectCondition,然后实现我们需要的逻辑判断,类定义如下(使用内部静态类形式):
现在查询“人人乐”是否有某类商品出售:
顺便再看看EObjectInstanceCondition:
在这一篇章中,条件主要都是做一些逻辑的判断,如果要查询出来具体的对象合着对象集合呢?不要着急,下一篇就是咯,呵呵。