一种基于EMF模型的在GEF中判断创建连接线有效性的方法 - 编程入门网
的结构,它们之间的关系是通过属性来标识,具体的关 系要在设计时确定)。 这个 XMI 文件一般作为一种中间格式来保存,当我们想要按照自己的格式来保存 各个模型和它们之间的关系时(比如说树状结构),最好的办法就是对 EMF 保存的 XMI 文件进行二次 XML 处理。
图 1. GEF 的 MVC 架构图 连接线创建时的验证方法 在使用图形化来设计工作流的时候,为了把具体的流程和逻辑表现清楚,需要在不同的模型之间建立 关联关系,通常的方式就是在模型对应的图形之间创建一条连接线(连接线本身也是一个模型,代表了某 个特定的关联关系)。关联关系可以是多种多样的,比如说一对一、一对多、多对多等。 如图2所示,模 型 A 同时跟三个模型 B1、B2 和 B3 建立了连接(假定均为一对一的关系)。每条连接线都有起始端和 目的端,当创建一条连接线时,连接线两端对应的模型都要进行添加连接线的操作。在建模的时候,对于 每个模型都允许从其引出一条连接线或者作为连接线的终点,而连接线是保存在模型内部的一个集合中。 连接线的创建是在一个 Command 里面实现的。 Command 是 GEF 里包含的一个基类,提供了重新执行、 撤销执行和执行条件判断等操作。 图 2. 一般的连接线创建 一种基于EMF模型的在GEF中判断创建连接线有效性的方法(3)时间:2011-08-11 IBM 赵迎威由 EMF 生成的模型对应的 Java 代码有着特定格式的。 假设有模型 A、B1、B2 和 B3,模型A 和 B1 、B2、B3 的关系分别为一对一、一对多和多对多。 每个模型分别对应着两个类(一个接口、一个接口实 现类)。 比如模型 A对应着 interface ModelA 和 class ModelAImpl(此处用的是假设的类名)。 图3 为 EMF 生成模型的类图。可以看出,当模型间的关系不同时,其对应类的成员方法是有规律可循的。A 和 B1是一对一的,对应的 ModelA 类就含有ModelB1 getModelB1( ) 和void setModelB1(ModelB1)方法 ;而 A 和 B2 是一对多的,ModelA 类就含有 EList getModelB2( ) 方法。 图 3. EMF 生成模型的类图 在创建连接线之前先定义好不同的连接线分别代表的关联关系(一对一、一对多和多对多)。在创建 某种连接线时,根据该连接线代表的关联关系,分别对连接线两端模型对应的类进行上面所述的方法验证 ,如果符合的话,就允许创建该连接线,否则,撤销刚刚建立的连接线。 一个 Schema 验证的例子 该部分给出了一个通过 Schema 定义来验证连接线有效性的例子。 可以直接使用 EMF 导入Schema 文 件,Schema 文件中定义的各个复杂类型和其元素都被生成对应的模型,模型间的关系和 Schema 文件中 定义的一样。图4是一个定义复杂类型 A 的 Schema 文件,可以看出类型 A 里面包含 B1、B2、 sourceConn 和 targetConn 元素和 a 属性。 当编写一个 xml 文档用到 A 标签时,它的后继标签只能 是 B1、B2、sourceConn 和 targetConn。同时通过 Schema 文件里对各个元素最大出现次数属性 maxOccurs 的赋值可知:B1 的出现次数最多只能是一次,而其它标签可以出现任意多次。 如果 A 的后 继标签中出现了 B3 之类的标签时,将不能通过 Schema 的验证,说明该 xml 文档是非法的。 图 4. 复杂类型 A 的 Schema 文件内容 一种基于EMF模型的在GEF中判断创建连接线有效性的方法(4)时间:2011-08-11 IBM 赵迎威我们定义连接线代表的关联关系是:连接线发起端和目的端的模型分别对应的标签符合 Schema 中的 定义。 假如现在有四个图形分别对应着模型 A、B1、B2 和 B3。 如果在它们之间建立连接线的时候,想 让连接线目的端模型 B1 作为发起端模型 A 的子模型,即后台保存的 XMI 文档中,B1 对应的标签是作 为子标签嵌套在 A 对应标签里的,这时就需要用Schema 验证该 XMI 文 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |