快速业务通道

使用EMF Query查询EMF模型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
查询的结果中。在EMF Query框架中,已经提供了大量我们立刻可用的Condition子类。

图 5 使用Hierachy视图查看Condition类型

通常情况下,我们既可以使用已有的Condition类也可以创建新的Condition类。对于在EMF模型中进行查询而言,我们最常用到的是EObjectCondition类及其子类。

表 1 用于EMF的一些Condition类

类名 用途
EObjectCondition 所有用于检查EMF模型的条件类都应该继承EObjectCondition类。这个条件类接收一个PruneHandler类的对象。PruneHandler用于判断是否需要处理当前正在比较的EMF对象的子对象。
EObjectAttributeValueCondition 这个条件类用于判断当前正在处理的EMF对象的属性是否满足特定的条件。这个条件类接收一个PruneHandler对象和另一个Condition对象。传入的Condition对象将被用于对属性的值进行判断。
EObjectReferencerCondition 这个条件类用于判断当前正在处理的EMF对象是否引用了一个特定的EMF对象。

使用EMF Query查询EMF模型(3)

时间:2011-02-12 IBM 郝萍

当我们了解了一些常用的Condition之后,我们就可以开始编写代码来对我们的EMF模型进行查询了。下面的代码演示了如何利用EObjectAttributeValueCondition和EObjectReferencerCondition来进行模型的查询。

代码 1 查询超过500页的书籍

public Collection queryLargeBook(EObject root) {  SELECT select = new SELECT(new FROM(root), new WHERE(   new EObjectAttributeValueCondition(LibraryPackage.eINSTANCE  |-------10--------20--------30--------40--------50--------60--------70--------80--------9| |-------- XML error: The previous line is longer than the max of 90 characters ---------|    .getBook_Pages(), new NumberCondition.IntegerValue( |-------10--------20--------30--------40--------50--------60--------70--------80--------9| |-------- XML error: The previous line is longer than the max of 90 characters ---------|    new Integer(500), new Integer(Integer.MAX_VALUE))))); |-------10--------20--------30--------40--------50--------60--------70--------80--------9| |-------- XML error: The previous line is longer than the max of 90 characters ---------|  return select.execute();  }

在上面的代码中,我们检查每个Book对象的Pages属性。对于Pages属性的检查是通过一个NumberCondition对象进行的。

代码 2 查询某个作者创作的所有书籍

public Collection queryBookByWriter(EObject root, Writer writer) {  SELECT select = new SELECT(new FROM(root), new WHERE(   new EObjectReferencerCondition(writer)));  return select.execute();  }

在上面的代码中,我们查询了一个作者所写的所有书籍。除了使用已有的条件类之外,我们也可以创建新的条件类,例如,如果希望查询所有具有三个作者的书籍,那么我们可以编写如下的条件类:

代码 3 查询拥有三个作者的所有书籍

private class ThreeWriterCondition extends EObjectCondition {  public ThreeWriterCondition() {   super(PruneHandler.NEVER);  }  @Override   public boolean isSatisfied(EObject eObject) {   if (eObject instanceof Book) {   Book book = (Book) 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号