您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

用GMF生成简化的数据库设计器

2024/4/1 4:01:02发布13次查看
eclipse graphical modeling framework (gmf)能够帮助我们快速构造基于emf和gef的图形化编辑器,实际上对于不是很复杂的应用来说,开发人员并不需要了解emf和gef就可以使用gmf。这篇帖子通过从零开始生成一个数据库设计器的全过程,演示了在使用gmf创建应用
 eclipse graphical modeling framework (gmf)能够帮助我们快速构造基于emf和gef的图形化编辑器,实际上对于不是很复杂的应用来说,开发人员并不需要了解emf和gef就可以使用gmf。这篇帖子通过从零开始生成一个数据库设计器的全过程,演示了在使用gmf创建应用程序时,构造ecore模型、构造.gmfgraph文件、构造.gmftool 文件、构造.gmfmap文件和生成编辑器的这几个步骤。
一、开发环境
由于目前gmf还没有发布正式版,所以这篇帖子使用的是相对稳定的gmf 1.0m4版本,1.0正式版将在2006年7月初发布。gmf对eclipse平台和一些插件的要求比较高,所以你可能要对你的开发环境进行一些升级更新才能感受gmf带来的方便,具体要求是这样的:eclipse 3.2m4、emf 2.2.0m4、gef 3.2m4和uml2 2.0m2;此外还要下载一个名为antlr的包,解压后要把antlr.jar文件放在gmf插件目录的antlr/lib下,这个依赖只是暂时的,gmf正式版发布之前会去掉它。
二、构造ecore模型
因为只是为了演示gmf,这里构造的是一个非常简化的数据库设计器。用户通过设计器可以创建表格,为每个表格增加一些列,定义这些列的属性,以及在表格之间建立外键关系。所以在ecore模型里应该有database、table和column这几个类,此外还有一个fkrelation类代表表格之间的连接,在database类下有一个名为fkrelations的引用用来记录一个数据库设计中所有的这些连接。
创建名为com.my.dbdesigner的empty emf project项目,有多种方式可以创建ecore文件,在gmf的example里有一个例子是ecore文件的图形编辑器,如果你安装了这个例子,可以在项目的根目录下new->other->examples->ecore diagram创建名为dbdesigner的文件,这将生成dbdesigner.ecore和dbdesigner.ecore_diagram文件。我在使用它编辑ecore文件时遇到了一些同步的问题,所以后来还是用eclipseuml来编辑的,不过这只是一个方法问题了。总之,我们这个数据库设计器的ecore模型如图1所示(如果嫌麻烦,可以点这里下载现成的ecore文件)。
图1 数据库设计器的简化ecore模型图
三、构造.gmfgraph文件
主菜单new->other->example emf model creation wizards->gmfgraph model创建名为dbdesigner.gmfgraph的文件,向导最后一步中model object选择为canvas,然后按finish按钮。在编辑器里,把canvas命名为dbdesignerdiagram,这将成为数据库设计器的画布。在canvas下new child创建一个名为default的figure gallery,figure gallery的作用是容纳一些可供重用的figure。在figure galley下创建一个名为basicrectangle的rectangle节点,在这个例子里大多数图形只用矩形就够了(除了连接线)。现在,在 canvas下创建一个名为tablenode的node节点,它代表数据库设计器里的表格,这个节点的figure属性选择为刚才定义的 basicrectangle,见图2,也就是指定在将来生成的数据库设计器里,表格显示为矩形。
图2 tablenode节点
可以想象,现在生成的数据库设计器里已经可以在画布上创建矩形的表格了,那么怎样实现在表格里创建列呢?这稍微麻烦一些,因为表格图形并不是全部面积都用来放置列,而要留出顶部的一行用来显示表格名称,而且这些列也不是像表格在画布上那样随意放置,而是按由上到下的顺序排放的,这就需要在表格图形里加一个隔间(compartment),隔间的概念可以在图3中看到,它的作用就是放置子元素,但隔间本身一般不代表模型中的某个元素。
图3 红色虚线部分所示为表格图形里的隔间
创建一个与tablenode同级的名为columncompartment的compartment,意即用来放置列的隔间,在属性视图里把它的 figure属性设置为basicrectangle。再创建一个名为columnchild的同级child节点,它的figure属性同样为 basicrectangle,这个columnchild就是作为子元素的列,如图4所示。
图4 columnchild节点
图5 fkconnection节点
四、构造.gmftool文件
主菜单new->other->example emf model creation wizards->gmftool model创建名为dbdesigner.gmftool的文件,向导最后一步中model object选择为tool registry,然后按finish按钮。在tool registry下创建palette,在palette下创建标题为dbdesigner的tool group,在这个tool group下为table和column分别创建一个creation tool,它们将成为数据库设计器中用来创建表格和列的那的两个按钮。同样在这个tool group下,为连线也创建一个creation tool,如图6所示。
图6 foreignkey节点
五、构造.gmfmap文件
主菜单new->other->example emf model creation wizards->gmfmap model创建名为dbdesigner.gmfmap的文件,向导最后一步中model object选择为mapping,然后按finish按钮。从主菜单gmf editor里选择“load resource...”命令,在对话框里按browse workspace按钮,选中我们的dbdesigner.ecore、dbdesigner.gmfgraph和dbdesigner.gmftool 这三个文件,见图7,再按ok关闭对话框。
图7 为定义映射载入需要的资源
在编辑器的mapping节点下创建一个canvas mapping,可以看到在属性视图里它的属性被分为三类,分别对应ecore模型、工具和图形这三个方面,对于canvas mapping,必须设置domain model、element和diagram canvas这三个属性,值分别为epackage dbdesigner、eclass database和canvas dbdesignerdiagram,它们都是下拉选项,所以很容易确定。
刚才的设置相当于告诉了gmf我们要把database类映射为画布,现在要告诉gmf我们还要把table类映射为画布上的矩形,所以要创建另一个mapping的子节点node mapping,它的属性见图8,注意可能要先选择了element属性值后edit feature属性才可选。
图8 为数据库表格定义node mapping
还要告诉gmf表格里要能创建列,因此在node mapping下创建compartment mapping和child node mapping各一个,前者只要将compartment属性选择为在.gmfgraph里定义的columncompartment即可;后者的属性如图9所示,注意compartment mapping的child nodes属性与child node mapping的compartment属性是双向的,我们只用定义其中一个方向即可,另一个方向会自动填充。
图9 为列定义child node mapping
最后要处理一下连接线,方法是在mapping下创建一个link mapping,它的属性比较多,见图10。
图10 为外键关系定义link mapping
六、生成编辑器
该做的准备工作都已就绪,现在到了激动人心的最后一个步骤了。首先是要生成基本的emf代码,包括核心模型代码和.edit代码,因为gmf的图形化编辑器依赖这两个部分,而emf传统的editor部分则并不需要。这个步骤在emf的帖子里已经介绍过了,这里不再重复。接下来打开 dbdesigner.gmfmap文件,在编辑器里点右键,选择“create generator model...”命令,在对话框里接受缺省的dbdesigner.gmfgen文件名,按ok确定后就会生成一个.gmfgen文件。打开这个文件,还是在编辑器里点右键,选择“create diagram code”命令,这样就会生成图形化编辑器的代码,这些代码放在名为com.my.dbdesigner.gmf.editor的项目中。
如果在执行上面步骤中出现了错误,就要检查那些模型文件是否正确,特别是.ecore文件的package中ns prefix和ns uri这两个属性不应为空,如果错误信息为“java.lang.illegalstateexception: can't find genfeature for feature 'xxx' in class xxx”则很可能是由于更改了.ecore文件后没有更新.genmodel文件。
运行这个生成的插件后,你就可以通过主菜单file->new->example->dbdesigner diagram创建数据库设计了,图11是它的工作界面。功能不错,但在我的机器上响应不是很快。点此下载生成后的项目打包
图11 数据库设计器的运行画面
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product