EObjectCondition ,從名稱上就可以意會到它是有關EObject的條件了。EObject和EMF的模型是關聯的,那么,EObjectCondition 當然就是與EMF模型有關咯。比如,你的商店shop聚集了很多個商品的種類categories,你可以根據EObjectCondition 來查詢商店shop中是擁有某xxCategory的商品。條件怎么構造?這個章節回有所介紹咯!呵呵,接著下去吧。
首先看看EObjectCondition,還是從結構圖上分析:
EObjectCondition有很多內嵌子類,但是很多你都不能直接實例化它們,它們是留給EObjectCondition做邏輯操作使用的,也可以說,條件用于復合時使用到這些類:如And,Or等等,你看看EObjectCondition的所擁有的操作就明白了。
ENot條件,看看名稱就懂,呵呵。
EObjectConditionAdapter是用于非EObject Condition 包裝成 EObject Condition 的適配器。感覺這個適配器作用同值條件的適配器還是很相似的,值條件適配器在前一篇帖子里有介紹http://m.tkk7.com/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:







在這一篇章中,條件主要都是做一些邏輯的判斷,如果要查詢出來具體的對象合著對象集合呢?不要著急,下一篇就是咯,呵呵。