- 浏览: 2474279 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
FROM:http://www.blogjava.net/eclipshine/archive/2005/07/29/8763.html
(注:大部分翻译,整理自Eclipse Modeling Framework: A Developer's Guide一书的第3.3, 3.4节的内容)
EMF的Command框架分为两个部分,Common Command Framework和EMF.Edit的Commands。Common Command Framework定义了基本的Command接口并提供了一些基本的类,例如CommandStack, CompoundCommand等。这个Command框架是非常通用的,并不依赖于EMF.Edit,甚至也不依赖于EMF,是完全独立的一个框架。而EMF.Edit的Commands,则是专门用来编辑EObjects的。
EMF的Command框架分为两个部分,Common Command Framework和EMF.Edit的Commands。Common Command Framework定义了基本的Command接口并提供了一些基本的类,例如CommandStack, CompoundCommand等。这个Command框架是非常通用的,并不依赖于EMF.Edit,甚至也不依赖于EMF,是完全独立的一个框架。而EMF.Edit的Commands,则是专门用来编辑EObjects的。
Command接口是所有Command必须实现的基本接口。包括了execute(),undo(), redo()等方法。Command在执行先会先进行测试,执行canExecute()判断其能否被执行。canUndo()被用来检查一个Command是否能被undo(),它返回false也就意味着redo()和undo()没有被实现。Command接口的getResult()和getAffectedObjects()方法是可选的,但是有时候非常有用。getResult()可以用来返回一个执行的结果对象,而getAffertedObjects()方法则可以用来返回在执行的过程中被修改过的对象。通常getAffertedObjects()可以和getResult返回相同的对象,但也并不总是如此。
AbstractCommand提供对Command接口的缺省实现。唯一重要的实现是canExecute()方法,将控制流转交给另一个钩子方法prepare()。然而prepare()只被执行一次,而不论canExecute()被执行多少次,这个特性在某些情况下可以避免大量的计算被重复执行。
java 代码
- public boolean canExecute() {
- if (!isPrepared) {
- isExecutable = prepare();
- isPrepared = true;
- }
- return isExecutable;
- }
CommandStack接口定义了一个Command栈,使用后进先出的方式保存所有执行过的Command,使得undo()和redo()能够被方便的实现。BasicCommandStack是CommandStack接口的一个简单实现。
CompoundCommand是一个很有用的类。可以让你通过基本的Command对象来组合更为复杂的高层次的Command。它的execute()方法会依次调用每一个成员Command;而canExecute()等测试方法在当所有成员Command的canExecute()方法返回为true是方返回true。一个有用的技巧是使用appendAndExecute()来加入并立即执行一个Command;使用这个方法可以记录一个命令执行的序列,并一次性的进行undo()。
EMF.Edit Commands在Common Command Framework的基础上,执行专门正对于EObject的命令。它定义了如下的几个基本Command:
1. SetCommand:用来为EObject的attribute或者reference设置值。
2. AddCommand:用来为EObject的multiplicity为many的feature添加一个或者多个值。
3. RemoveCommand:则是用来做和AddCommand相反的事情。
4. MoveCommand:用来移动对象在multiplicity为many的feature中的位置。
5. ReplaceCommand:用来替换一个multiplicity为many的feature中的对象。
6. CopyCommand:执行EObject对象的深度拷贝(Clone).
除了CopyCommand之外,其他的Command均为简单命令,而CopyCommand命令则是由CreateCopyCommand和InitializeCopyCommand这两个命令组合而成。
除了上述的基本命令之外,EMF.Edit基于基本命令的,执行High Level编辑功能的命令:
1. CreateChildCommand。
2. CutToClipboardCommand。
3. CopyToClipboardCommand。
4. PasteFromClipboardCommand。
5. DragAndDropCommand。
AbstractOverrideableCommand作为EMF.Edit的Command的抽象基类,上面大部分的命令均继承于它,而AbstractOverrideableCommand则是继承于AbstractCommand。它提供了扩展机制来覆盖其自生的execute()方法:
java 代码
- public final void execute() {
- if (overrideCommand != null)
- overrideCommand.execute();
- else
- doExecute();
- }
通常,Command都是由EditingDomain接口的createCommand(Class commandClass, CommandParameter commandParameter)来创建的,它接受通用的CommandParater参数,来创建Command。但是,为了方便起见,每一个EMF.Edit Command都提供了static的create()方法来创建相应的对象,而由它在来调用EditingDomain的createCommand()。
EditingDomain需要完成三种功能:
1. 创建commands,在AdapterFactoryEditingDomain中这是通过代理到一个Item Provider来实现的。
2. 管理Command Undo栈,通过CommandStack来实现。
3. 提供方法来访问EMF模型对象的ResourceSet,以及load或者save Resource。
创建一个对象,一般来说使用的是Command的静态create()方法。例如对于RemoveCommand来说,可以通过如下的代码来创建一个RemoveCommand:
java 代码
- Command cmd = RemoveCommand.create(editingDomain,
- aPurchaseOrder,
- poPackage.getPurchaseOrder_Items(),
- aItem);
在EditingDomain的ResourceSet之间存在有双向的关联。因为一个对象知道其Resource,而Resource又知道其ResourceSet,因此,由一个对象可以得到其EditingDomain,而EditingDomain又提供了创建Command的方法,因此一个对象可以在任何地方都能够创建修改这个对象的Command了,如下例所示:
java 代码
- EditingDomain editingDomain = getEditingDomain(object);
- editingDomain.getCommandStack().execute(
- SetCommand.create(editingDomain, object, feature, value));
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21936原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2217在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4552知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4164GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7947以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4088filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5218Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7672以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5677错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5506内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6734最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9997JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4942List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4676在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5257修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9588这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5159在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4061在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3383Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2122java.lang.IllegalAccessError: t ...
相关推荐
- **plugins**:此目录可能包含了多个Eclipse插件,EMF插件可能就是其中之一,每个插件都是一个独立的JAR文件,用于扩展Eclipse的功能。 - **binary**:可能包含的是编译后的二进制代码,用于EMF插件的运行。 - **...
org.eclipse.emf.ant_2.1.0.jarorg.eclipse.emf.ant_2.1.0.jarorg.eclipse.emf.ant_2.1.0.jarorg.eclipse.emf.ant_2.1.0.jar
EMF(Eclipse Modeling Framework)模型文件对比/比较(emf.compare)是针对基于EMF构建的模型文件进行差异分析的工具。...要获取更详细的信息,你需要访问提供的博客链接或寻找其他资源来深入学习EMF.compare的使用。
解决4.7.2版本eclipse不能在线安装activiti插件的问题
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...
eclipse安装Activiti Designer 5.14.1插件失败后,把这上述压缩包中的jar文件拷贝到自己的eclipse的plugin文件夹下面,重启eclipse再次安装activiti插件就可以了。
EMF(Eclipse Modeling Framework)是Eclipse基金会开发的一个开源框架,用于构建基于模型的应用程序。这个框架基于Java,提供了一套完整的工具和技术,用于创建、操作和利用复杂的模型。EMF是Eclipse IDE中的核心...
标题中的"emf.rar_SPI delphi_delphi emf_delphi spi_emf delphi_spi"关键词表明,这个压缩包文件涉及到Delphi编程语言、SPI(Service Provider Interface)接口以及EMF(Enhanced Metafile)图形格式的转换。...
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
在压缩包中的"emf.hlp"文件,很可能是一个帮助文件,提供了关于EMF格式或者"arrangekrk"工具的详细指南和使用信息。帮助文件通常以.HLP格式存在,它们包含有用户界面、功能介绍和问题解决等内容,以辅助用户理解和...
Activiti2.0安装所需插件
【标题】"emwin emf.zip" 是一个包含多种实用工具的压缩文件,主要软件有ffmpeg和JPEG2Movie。这两个工具在IT行业中都是处理多媒体数据的重要软件,尤其在图像和视频处理方面扮演着不可或缺的角色。 **ffmpeg** ...
本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...
BufferedImage image = new BufferedImage(emf.getWidth(), emf.getHeight(), BufferedImage.TYPE_INT_ARGB); // 将EMF渲染到BufferedImage上 Graphics2D g2d = image.createGraphics(); g2d.drawRenderedImage...
**EMF(Eclipse Modeling Framework)详解** EMF(Eclipse Modeling Framework)是Eclipse基金会下的一个...通过EMF.docx文档的学习,你可以更深入地了解EMF的工作原理和实际应用,为你的编程生涯添加一项强大的工具。
35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa...
实际测试,有效,实际测试,有效,
org.eclipse.emf.workspace_1.5.2.202208110935.jar
org.eclipse.emf.validation_1.8.1.202208271102.jar