EObjectCondition ,從名稱上就可以意會到它是有關(guān)EObject的條件了。EObject和EMF的模型是關(guān)聯(lián)的,那么,EObjectCondition 當(dāng)然就是與EMF模型有關(guān)咯。比如,你的商店shop聚集了很多個商品的種類categories,你可以根據(jù)EObjectCondition 來查詢商店shop中是擁有某xxCategory的商品。條件怎么構(gòu)造?這個章節(jié)回有所介紹咯!呵呵,接著下去吧。
首先看看EObjectCondition,還是從結(jié)構(gòu)圖上分析:
EObjectCondition有很多內(nèi)嵌子類,但是很多你都不能直接實(shí)例化它們,它們是留給EObjectCondition做邏輯操作使用的,也可以說,條件用于復(fù)合時使用到這些類:如And,Or等等,你看看EObjectCondition的所擁有的操作就明白了。
ENot條件,看看名稱就懂,呵呵。
EObjectConditionAdapter是用于非EObject Condition 包裝成 EObject Condition 的適配器。感覺這個適配器作用同值條件的適配器還是很相似的,值條件適配器在前一篇帖子里有介紹http://www.aygfsteel.com/orangewhy/archive/2007/06/10/123180.html。
好了,看看相關(guān)的示例吧。再次強(qiáng)調(diào),模型怎么來?看http://www.cnblogs.com/bjzhanghao/category/38915.html系列的介紹吧(呵呵,不是刻意幫八兄做廣告,只是回溯一下模型從哪來的)。
現(xiàn)在假設(shè)一個簡單的使用場景:
1、假定廠家生成的物品種類有三種: “食物”, “日用品”, 和“體育器材”。
2、假定“人人樂”超市只進(jìn)貨“食物”, “日用品”這兩種物品,“體育器材”在“人人樂”沒有銷售。






















在看看另外一個EObjectCondition的結(jié)構(gòu),例子用要到了。
IN條件主要匹配“是否包含有”。它關(guān)聯(lián)了IEObjectSource。EMF 的對象資源都是來自與這個接口,這是使得查詢可以被嵌套。
EObjectTypeRelationCondition是同EMF對象類型有關(guān)的條件。例子會給出一種簡單使用方法。類型的判別,是通過它關(guān)聯(lián)的TypeRelation來定義的。能擴(kuò)展類型嗎?呵呵,我還沒試過。
看看例子吧。假設(shè)你要看看廠家是否生產(chǎn)了某中商品(從類別體現(xiàn)):


看看“人人樂”是否有某類商品出售:
這里要有個注意,IN條件好像不能直接滿足我們的要求,因?yàn)樗枰猄et類型的集合,但是商品類型卻是再shop中關(guān)聯(lián)。這里用了自定義的一個條件來擴(kuò)展EObjectCondition,然后實(shí)現(xiàn)我們需要的邏輯判斷,類定義如下(使用內(nèi)部靜態(tài)類形式):

































現(xiàn)在查詢“人人樂”是否有某類商品出售:







































































順便再看看EObjectInstanceCondition:







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