WEB开发网
开发学院软件开发Java 一种基于 EMF 模型的在 GEF 中判断创建连接线有效... 阅读

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

 2010-04-02 00:00:00 来源:WEB开发网   
核心提示: 表1中列出了 A 和 B 之间是否允许创建连接线的真值表,可以很清楚地看出满足什么条件下 A 和 B 之间才可以建立连接线,一种基于 EMF 模型的在 GEF 中判断创建连接线有效性的方法(6), 本文的最后给出了对连接线进行 Schema 验证的详细步骤,表 1. 创建连接线真值表首先建一个

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

表 1. 创建连接线真值表

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

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

判断 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 来进行建模和图形化开发的基础上,提出了对创建的连接线有效性验证的方法。将其用于业务流程设计中能提高规范化设计的效率。 由于本文中所讨论的模型都是由 EMF 导入的,具体的验证方法也都是依赖于 EMF 生成的 Java 代码的特定格式,因此如果模型对应的 Java 代码采用其它的格式时,该验证方法就不能适用。如何提出一种通用的连接线验证机制有待于更进一步的研究。

上一页  1 2 3 4 5 6 

Tags:基于 EMF 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接