基础条件
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
三告习习 阅读(1171)
评论(0) 编辑 收藏 所属分类:
emf/gef/gmf