2024年3月16日发(作者:)
ValueEngineering
·181·
基于GEF的图形编辑器技术研究
TechniquesforGEF-basedGraphicalEditor
陆军
①
LuJun
;杨德仁
②
YangDeren
;王勇
②
WangYong
(①宁夏电信实业公司,银川750000;②宁夏医科大学理学院,银川750000)
(①NingxiaTelecomEnterpriseCo.,Yinchuan750000,China;②ScienceCollegeofNingxiaMedicalUniversity,Yinchuan750000,China)
摘要:
GEF可用于模型开发图形化表示和编辑环境。本文分析了GEF与MVC映射机制,研究了GEF设计模式,探讨了其关键技术和事件
流,介绍了一种基于GEF的图形编辑器。本研究有助于实施基于GEF的编辑器。
Abstract:GEFframeworkcanbeusedpaper,themapping
technologiesandeventstreamswere
dyishelpfultoimplementGEF-basededitor.
关键词:
GEF;映射机制;设计模式;关键技术;事件流
Keywords:GEF;mappingmechanism;designpatterns;keytechnology;eventstreams
中图分类号:
TP31
文献标识码:
A
文章编号:
1006-4311(2011)03-0181-02
0
引言
编辑器、EditPolicies和用户定义的控制器(侦听器)。通常选择
GEF是流行的开源框架,可为模型提供图形化表示和编辑环GraphicalEditPart为控制器。
境。可用于创建状态图、类图、GUI软件和流程图等应用
[1]
。EditPart了解模型和视图。模型侦听器要注册在EditPart.
1GEF
抽象机制与设计模式
()中,而注销则要在vate()中实现。若检测到activate
模型发生了变化,则要相应地更新视图。Editpart#isActive返回控制
1.1MVC体系结构
MVC是一种通用的Web应用体系结构。模型(Model)代表数
器的当前状态。
据,是持有业务数据的对象,是用户要实施的或在遗留系统中已经
GEF利用MVC的优势体现在每个Figure都有其EditPart,
存在的。模型必须拥有某种通告机制。视图(View)负责在界面上呈
EditPart通过EditPolicy修改模型。
GEF提倡MVC的1:1映射,但也能实现一个模型对多个控制
现数据,定义了在屏幕上的显示,用户要能用鼠标和键盘修改视图。
此时需要额外责任以保持控制器和模型同步。模型和视图分别实施,相互没有依赖,这有利于重用。视图是模器,
(Controller)实施
1.3GEF的几种常用设计模型
型状态的函数,是模型的图形化表示。通过控制器
模型和视图之间的唯一关联。控制器定义了在视图改变时模型的响
GEF通过使用设计模式实现其灵活性和扩展性。GEF最常用的
[1-2]
应机制、在模型改变时视图的响应机制,负责处理用户输入并根据设计模式是命令、工厂、观察者、职责链和状态
。
模型刷新视图。通过定义控制器和视图之间的接口,视图更新方便。命令:用来封装修改模型的指令,是GEF修改模型的机制。通
用户在图形界面上操作触发对模型的修改,模型变化触发了视图更过继承抽象类Command,提供Redo/Undo功能。该类具有execute
新。()、undo()和redo()和canExecute()方法。用canExecute()方法得到
1.2GEF与MVC的映射
反馈以确认操作是否许可。
GEF框架基于MVC结构解除用户界面、行为和表示之间的耦
工厂:工厂方法模式用于创建Figure、抽象工厂模式用于创建
GEF包的palette工具为用提供编辑能力、请求
EditPart。
合。包括如下组件:
(Request)/命令(command)提供基于Redo/Undo方式的编辑机制;观察者:是一种对象行为模式,监听模型和视图的控制器就是
Draw2d包提供绘制图形功能。
典型的观察者。
模型由用户定义,可用Java对象表示,也可用Eclipse建模框架职责链:用来决定处理请求(Request)的编辑策略(EditPolicy)
(EMF)构造。
。通过将Request传递给多个对象,并给这些对象处理请求的机会,
GEF的图形表示经由Draw2D框架完成,即把用Draw2d创建
从而将请求的发送者和接受者解除耦合。多个编辑策略可以收到请
的Figures映射到MVC的视图。视图要用类2d.求和返回命令。这些命令是以链方式组织的。
Figure的createFigure()方法创建。Figure用于在GraphicalViewer中
状态:对于键盘、鼠标输入,GEF编辑器通过选择工具来选择行
TreeItems用于在大纲TreeViewer中显示信息。显示图形,为。允许GraphicalEditor在内部状态发生改变时修改编辑器的行
图形编辑功能基于GEF包,实施e中的为。用户切换工具可以改变编辑器的状态。
Ifigure接口。2GEF
的关键技术与事件流
MVC的控制器映射到GEF的EditParts,用以显示模型的图形2.1GEF关键技术
Draw2D是基于eclipse的SWT的标准2D绘图框架,是一个轻
———————————————————————
寄生于某个重量级控件中,其目的只在于显示对象,
作者简介:
陆军(1971-),男,徐州人,硕士学历,工程师,研究方向:软件工程;
量级图形系统,
),男,同心人,博士,教授,研究方向:软件工程、人工
而不储存和管理任何数据。GUI由Draw2dFigures树定义,可用
杨德仁(1964-
(child)把figure添加在父节点下,也可用
智能;王勇(1988-),男,同心人,本科生。
ServerPages:大多数搜索引擎能检索.asp页面,若URL中不含问号。
XQASP提供的一个产品能自动地用“/”代替URL中的问号。
2
结束语
在实际中以上六种链接优化应综合、合理使用,以提高网站的
尤其是建立反向链接要谨慎。随着互联网的发展,搜索引擎调排名。
整算法的频率越来越快,垃圾页面可以钻营的空间自然也就越来越
少。基于这种考虑,那种号称能迅速让网站获得成百上千链接的自
动处理方案应该被淘汰,这类链接来自链接养殖场(linkfarm),这是
所有搜索引擎打击的对象。
参考文献:
[1]杨帆.SEO攻略———搜索引擎优化策略与实战案例详解[M].北京:人
民邮电出版社,2009.
人民邮电出版[2]吴泽欣.SEO教程:搜索引擎优化入门与进阶[M].北京:
社,2009.
·182·
价值工程
(child)从父节点删除子节点。Figure类实施Ifigure接口,该接口可
⑤在从EditPart获取到命令后,活动通过命令栈
用于在需要figures属性的情形。(CommandStack)执行命令,命令栈是实施Redo/Undo功能的机制,
EditPartViewer,在SWT控件上为每个模型安装一个视图。模型
参考CompoundCommand类;
可有多个视图,每个视图都有其EditParts和Draw2dFigures。
⑥命令栈执行命令(execute),同于修改模型,进而更新视图。
EditParts组织成树型结构,其根是RootEditPart。
被GraphicalViewer安装在控件之上的Draw2d使用
EditPartFactory,定义EditPart与具体模型的相关性。EventDispatcher,后者把得到的事件传递给Draw2d。若该事件被
命令栈(CommandStack),实施Redo/Undo功能,每个编辑域都
Draw2d消费,则该过程结束(事件类中有检测事件是否被消费的方
()执行。有其命令栈。命令通过命令栈调用execute法),否则,被转送给编辑域,进而被转发给活动工具。
工具面板(Palette),用PaletteViewer为用户展现的工具。用户可
3
一种基于
GEF
的图形编辑器
(ActiveTool)。由EditPartViewers为
GEF开发的软件可作为Eclipse的插件。要开发脱离Eclipse平
使用PaletteViewer选择活动工具
编辑域(EditDomain)派遣的事件都被转发给活动工具。台的独立软件运行,可实施为RichClientPlatform(RCP)。图形编辑
编辑策略,对模型的行为被重构为编辑策略。编辑策略为器构造实例如图2所示。
EditParts带来了编辑功能。编辑策略定义了要用EditPart完成的工
作。对一控制器可有多个行为,每个编辑策略被赋予一角色(Role)。
编辑策略可动态安装和删除。GEF内部通信通过转发给编辑策略的
请求实现。
请求与响应,把用户操作视同为请求。在调用语境下理解请求。
语境由活动工具(由用户从工具面板中选择)决定。用户使用工具产
生请求。把该请求移交给选中的editpart,后者则返回一个命令。这
可通过对编辑策略实施责任链实现,编辑策略确定能否处理请求,
若不能则传递给下个编辑策略。其声明顺序即为请求被传递的顺
序。有能力的编辑策略随即创建命令。该命令被返回给那个启动请
求的工具。命令的执行引起对模型的修改(响应)。获得此效果的另
一机制是用程序创建请求并传递给Editparts,产生的命令随后在命
令栈中执行。
2.2GEF事件流
如图1所示,GEF事件流如下:
①用户通过鼠标和键盘与编辑器交互,点击相关可视化控件,
产生事件;
②SWT控件捕获到键盘或者鼠标的事件,在传递到
EditPartViewer处理后,继续将事件传递给EditDomain处理,然后转
发给PaletteViewer中的活动工具。参考SWT的Canvas接口(SWT
Events)、GraphicalViewer和IFigure接口(实现类为
GraphicalViewerImpl,Figure)、Draw2D的LightWeightSystem,Events、
图形编辑器实施步骤是,首先,创建模型XXXModel;其次,创建
EditDomain类以及SelectionTool,SelectEditPartTracker类(其超类
模型对应的控制器XXXEditPart;第三,创建EditPartFactory,在其中
为TargetingTool类);
连接模型和控制器;第四,在编辑器中创建GraphicalViewer并显示
③活动工具注释该事件序以构造请求,GEF用请求说明对模型
图形。
要执行的操作,参考SelectionRequest类;
图形编辑器实例具体实施过程如下。把GEF建立在RCP上,代
④活动工具把请求提交给编辑策略,EditParts把请求转发给编
码src包有包,其中有如下类:Application、
辑策略,比编辑策略用于为请求构建命令并做出反馈响应,参考
Perspective、ApplicationActionBarAdvisor、ApplicalicationWorkbenchA
AbstractEditPart的performRequest()方法,AbstractGraphicalEditPart
dvisor、ApplicationWorkbenchWindowAdvisor和Acrivator。
类;
在代码包src中增加如下程序:放置视图相关类的al.
包、放置模型相关类的包、放置控制器
相关类的rts包、放置种命令相关类的gef.
放置策略相关类的ds包、
包、放置编辑器相关类的s包、放置图标静态变
量相关类的包。
这种编辑器的各模块的角色定义良好:模型存储业务数据,视
图展现数据,控制器实施前两者的绑定逻辑,有利于编写清晰的代
码。
4
结语
GEF可用于编辑任何模型,包括用EclipseModelingFramework
(EMF)构造的模型。GraphicalModelingFramework(GMF)为使用或
扩展基于EMF模型的GEF提供了简易的基础设施。
参考文献:
[1]EclipseProject[EB/OL]./gef/.
[2]邵兵,石立川,王晗.GEF框架中的设计模式[EB/OL].IBM
/developerworks/cn/opensource.


发布评论