在EMF中可以通过EditingDomain接口来编辑模型。
AdapterFactoryEditingDomain实现了EditingDomain接口,和AdaperFactoryContentProvider一样,将操作逻辑通过适配器工厂转接给适配器类进行处理。通过AdapterFacotryEditingDomain还可以访问CommandStack对象,所有对模型结构的修改命令都将存储在这里。
更改模型结构的方法:
假设两个EMF实体类Companny和Department属于1对多关系,现在公司想删除指定部门,可通过以下几个方法来完成操作:
1.不使用命令的普通方式
因为所有的Emf实体都间接的实现了Notifier接口,因此在执行remove操作时,EMF的通知机制可以将模型结构的变动及时反映到视图组件的刷新.(稍后会详写这里)
2.使用org.eclipse.emf.edit.command.RemoveCommand命令来执行删除操作
通过命令的方式执行虽然代码逻辑较多,但有以下好处:
1.对已执行出的命令执行撤销操作(undo,redo)
2.可判断模型结构是否被修改(用来触发save操作)
3.可判断一个命令是否可执行
直接new一个命令出来,这个命令是有针对性的(如:这里的命令只针对company实体),因此可重用性比较低,我们可以通过EditingDomain接口的createCommand()方法来创建命令,来使这个命令针对所有模型实体通用。
createCommand(Class commandClass, CommandParameter commandParameter)这个方法有两个参数:
commandClass:为具体的命令类,如org.eclipse.emf.edit.command.RemoveCommand
commandParameter:为命令参数,通过此种方式,可编写如下代码:
注:这里使用了RemoveCommand的静态方法create,而不是new一个RemoveCommand对象,
而且传递的参数也只有要删除的对象(department),而不像之前还要包括所删除对象的父对象(company),那么该父对象是怎样得到的呢?
create静态方法如下:
可以看到,方法调用了EditingDomain的createCommand方法,然后AdapterFactoryEdintingDomain(EdintingDomain的实现类)
将命令的创建转接给适配器类,让适配器类处理命令的创建过程。
createCommand方法大致如下:
真的代码逻辑复杂的多,方法中省略了owner对象的获取步骤,然而owner对象是如何得到的呢?
从上面的create方法来看,在构造CommandParamter对象时,将要删除的对象以构造参数的形式传递过去(Collections.singleton(value)),
然后再将commandParameter作为参数传递到createCommand方法中,这样在createCommand方法中我们便可得到要删除的value对象,
而通过value对象的eContainer()方法,便可以获取对象的容器,即父对象owner。
方法随后调用了adapterFactory的adapt方法,来获取该父对象的适配器类,最后将业务转交给该适配器类进行处理。
适配器类会根据commandClass的值来选择与之相对应的命令执行构建操作。
分享到:
相关推荐
EMF 自学笔记
使用迷宫以及emf文件的生成加载技术制作的迷宫,其实就是根据http://www.comprg.com.cn/detail.asp?hw_id=7061上的说明做出来的工程。 程序中迷宫中的小人可以自由移动,胜利或失败之后还会有绚丽的提示。
文件格式 EMF (Enhanced MetaFile) ——是在印刷工业中应用与Windows操作系统的文件格式。实际上EMF是原始WMF(Windows metafile)格式的32位版本。EMF格式的产生是为了解决WMF在印刷行业中的不足。EMF是设备独立性...
EMF学习完整教程,EMF: Eclipse Modeling Framework Second Edition
emf文件是windows的一种打印格式,该资源可以对emf文件进行文本提取和推送打印机打印以及转换成图像
包含3个文件: 微软emf文件格式详解.pdf emf.hlp (Enhanced Metafiles in Win32) emfexplorer_src.zip
EMF读取XML
矢量格式转换程序,基于JAVA实现的SVG转EMF的的示例代码,下载后导入到eclipse即可运行。
emf和wmf文件的互转,有源码,供大家学习,交流!
使用freehep将EMF转换为png,项目下载导入eclipse即可运行。
基于Eclipse的模型框架 它是Eclipse MDA(Model Driven Architecture)的一个重要组成部分 是Eclipse中许多项目的基础 e g GEF EMF可以将模型转换成高效的 正确的 和易于定制的Java代码
EMF图片转为JPG/PNG 需安装GraphicsMagick 提供实例代码
This is the API specification of the FreeHEP VectorGraphics package for converting emf to svg.
EMF和BMP文件格式的相互转换:BOOL CConvertEMFToBMP::ConvertBMPToEMF(const char*pszBMPFile,const char* pszEMFFile)
按道理emf图片不应该失真的。可以由pdf虚拟打印出的emf图片不在100%比例显示的时候就失真,由doc虚拟打印出来的emf就没有同样问题.
emf转bmpemf
org.eclipse.emf.transaction_1.4.0.v20100331-1738.jar org.eclipse.emf.validation_1.7.0.201306111341.jar org.eclipse.emf.workspace_1.5.1.v20120328-0001.jar
GUI设计,emf,gef,visual editor
eclipse-emf-2.6.0-1.el6.i686.rpm
requires 'org.eclipse.emf.transaction 1.4.0' but it could not be found 解决办法:将下载解压后的这三个文件拷贝到eclipse的plugin文件夹下即可解决上述问题 org.eclipse.emf.transaction_1.4.0.v201003 31-1738...