快速业务通道

一种基于EMF模型的在GEF中判断创建连接线有效性的方法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
档的合法性。现在想在创建连接 线的时候进行动态的验证,即如果连接线发现目的端和发起端对应的模型不符合 Schema 中的定义时,该 连接线就不被创建。由于B3 不是 A 的元素,所以在 A 和 B3 之间创建连接线时该连接线就不能创建, 如图5所示。

图 5. A 和 B3 不允许建立连接

图4 Schema 文件中复杂类型 A 对应的模型生成的 Java 类中有 interface AType 和 class ATypeImpl(此处为真实的类名)。当规定元素 B1 的最大出现次数为1的话,则在 interface AType 和 class ATypeImpl 中会有相应的 void setB1(B1Type) 和 B1 getB1( ) 方法;若元素B2 的最大出现次数 不限的话,则在 interface AType 和 class ATypeImpl 中会有相应的 EList getB2( )方法。

另外,类型 A 里面包含了元素 sourceConn 和 targetConn。 在 interface AType 和 class ATypeImpl 中会有 EList getSourceConn( ) 和 EList getTargetConn( ) 方法。这两个方法是为了维护 从 A 出发或者结束到 A 的连接线。

表1中列出了 A 和 B 之间是否允许创建连接线的真值表,可以很清楚地看出满足什么条件下 A 和 B 之间才可以建立连接线。 本文的最后给出了对连接线进行 Schema 验证的详细步骤。

表 1. 创建连接线真值表

首先建一个 ConnectionCreateCommand 类,内部创建一个成员方法 boolean validateConnection( ) ,该类继承了 GEF 的 Command 类。根据以上的真值表,把验证过程分为三个部分:判断 A 是否包含 B 、判断 A 和 B之间是否存在连接线、判断 B 在 A 中出现的次数限制。

一种基于EMF模型的在GEF中判断创建连接线有效性的方法(5)

时间:2011-08-11 IBM 赵迎威

判断 A 是否包含 B

获取连接线两端的模型对应的Java类,即 ATypeImpl 和 BTypeImpl;

获取 ATypeImpl 类(包括其父类)的所有方法名中包含 “set” 或者 “get” 字符串的成员方法集 合,并循环判断方法集合中是否含有 “void setB(B)” 或者 “EList getB( )” 方法;

如果2)中的条件成立则说明 A 包含 B,否则说明 A 不包含 B。

判断 A和 B之间是否存在连接线

在 ATypeImpl 中调用 getSourceConn( ) 方法返回一个从 A 出发的连接线的集合;

获取该集合中的每个元素(连接线),判断其目的端对应类的名称是否为 BTypeImpl;

如果2)中的条件成立则说明 A 和 B 之间已经存在连接线,否则说明不存在连接线。

判断 B在 A中出现的次数限制

同 “判断 A是否包含 B” 中的一样,获取 ATypeImpl 类(包括其父类)的所有方法名中包含 “set ” 或者 “get” 字符串的成员方法集合;

循环判断方法集合中是否含有 “void setB(B)” 或者 “EList getB( )” 方法;

如果含有 “void setB(B)” 方法,说明 B 在 A 中最多出现一次;

如果含有 “EList getB( )” 方法,说明 B 在 A 中可以出现多次。

由以上三个判断,并且参照表1,可以确定 A 和 B 之间是否可以创建连接线,即确定 validateConnection( ) 方法的返回值。 在 ConnectionCreateCommand 的回调函数 execute( ) 中判断 validateConnection( ) 方法的返回值,如果为 false 的话,则不创建该连接线;反之如果为 true 的 话,则创建该连接线,并且

在 ATypeImpl 中调用 getSourceConn( ) 方法返回一个从 A 出发的连接线的集合,然后向该集合中 添加一个刚才创建的连接线;

在 BTypeImpl 中调用 getTargetConn( ) 方法返回一个目的点是 B 的连接线的集合,然后向该集合 中添加一个刚才创建的连接线。

这样整个验证过程就结束了,保证了后台生成的 XML 文件的规范性。

结束语

本文在 GEF 和 EMF 来进行建模和图形化开发

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号