基礎條件
EMF Model Query Framework 提供了很多方便使用的條件,這些條件實現了用于簡單的數據類型斷言。包括strings, numbers, 和 booleans. 這些條件用于模型元素的EAttribute之間所進行的邏輯操作.。
看看這些條件結構:

從結構圖上可以看出,Condition是最為條件的最頂層父類,它能作各種條件的邏輯操作,AND、OR等,說明條件是可以復合的。而且,Comdition類依賴ConditionPolicy的依賴使得條件能滿足全匹配(ALL)或者任意匹配(ANY)的策略。
Condition三個子類CompoundCondition(復合條件),Not(非條件)和ObjectInstanceCondition(對象實例條件)
很容易也看出,CompoundCondition的子類都是一些有關復合的條件類。這些都是可以進行邏輯上的復合的。
注意到Implies(蘊含),在數學上蘊含是有這樣的規則:當第一個表達式為真,且第二個表達式為假時,結果為假,否則為真。記住哦,否則很容易搞錯的。特別是在條件進行復合時運用蘊含操作,要認真分析前后的表達式。
簡單條件類型
看看下面的結構圖就知道條件是如何與簡單類型進行匹配:

可以很容易看出,這些其實都是一些值類型條件,只是有些條件作了一些擴展的匹配功能,比如字符串條件可以不但可以從字符串內容上(包括子串和正則表達式匹配),還可一從字符長度上匹配。
下面來舉一些使用例子來看看條件是如果匹配的。
public static void queryExample1()

{
Object subject = 100d;
Condition a = new NumberCondition.DoubleValue(10.0d,1000.0d); //是否在100-1000的double內
System.out.println("100 是否在10-1000范圍? " + a.isSatisfied(subject));
Condition b = new BooleanCondition(false);
System.out.println("true 是否滿足false條件? " + b.isSatisfied(true));

Condition c = new StringValue("EMF-Query", true, new StringAdapter()
{
public String getString(Object object)

{
return object.toString();
}
});
System.out.println("“EMF-Query” 是否滿足c條件?" + c.isSatisfied("emf-query"));
Condition a1 = new NumberCondition.DoubleValue(10.0d,15.0d); //是否在100-1000的double內
Condition a2 = new NumberCondition.DoubleValue(108d,1000.0d); //是否在100-1000的double內
//蘊含:當第一個表達式為真,且第二個表達式為假時,結果為假,否則為真。
Condition complex = a.IMPLIES(a1.OR(a2));//
System.out.println("復合條件測試:" + complex.isSatisfied(subject));
StringCondition cond = new StringRegularExpressionValue("A+");
System.out.println("正則表達式測試:" + cond.isSatisfied("CATGGTGCCAC"));
Collection subjects = new ArrayList(); //多個將要匹配的主題
subjects.add(100d);
subjects.add(200d);
subjects.add(209d);
subjects.add(2000d);
Condition interzone= new NumberCondition.DoubleValue(100.0d,1000.0d);
//全匹配策略
System.out.println("全匹配策略: " + ConditionPolicy.ALL.isSatisfied(interzone, subjects));
//任意匹配策略
System.out.println("任意匹配策略: " + ConditionPolicy.ANY.isSatisfied(interzone, subjects));
}
例子很簡單,不需要再作太多的說明了吧。想提提的就是條件一般是用這個condition.isSatisfied(subject) 方法來匹配的。ObjectInstanceCondition留到后面的例子吧。看看輸出的結果:
100 是否在10-1000范圍? true
true 是否滿足false條件? false
“EMF-Query”是否滿足c條件?false
復合條件測試:false
正則表達式測試:true
全匹配策略: false
任意匹配策略: true
posted on 2007-06-10 03:37
三告習習 閱讀(1179)
評論(0) 編輯 收藏 所屬分類:
emf/gef/gmf