- 浏览: 2473370 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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查询
★adapter是emf.edit ui和command的基础
★item provider可以这样理解,为不同的可编辑的model items提供相应的功能,从ItemProviderAdapter继承将实现我们所要的大部分item provider功能,而ReflectiveItemProvider 则通过反射实现了我们所需要的功能
★每一个emf model对象可以称之为Notifier,因为在model发生改变的时候,将会给相应的监听器发送通知。而通知观察者(也就是监听器)则被称之为adapter,因为这些observer除了有监听消息之外,还可以用来扩展各种被监听对象的行为。
★说到adapter的扩展功能,就不得不提到adapter factory,adapter的每一个功能的扩展都是通过接口来实现,要实现一个功能就实现一个接口),然后使用adpaterfactory的adapt方法取得对应的接口实现,该方法有两个参数,第一个是model对象,另外一个是接口类型,最终得到的就是我们要使用的扩展功能接口对象,这里我们统一称之为adapter,在调用adapter factory的时候,如果model对象已经和某个adapter建立关联,那么直接返回这个adapter对象,否则adapter factory将创建这个adapter,并建立与model 对象之间的关联
★Adapter除了可以和单个的model object关联之外,还可以和具有层次结构关系中的每一个model object关联,这个是EContentAdapter来实现的,所以我们的adapter只要从该类继承便会具有该功能
★item provider是作为model adapter而存在的,但并不总是这样,因为有些item provider除了和model关联之外,还可以和非model关联。
★emf framework使用了一种代理机制来使用item provider,当要使用model的相应功能的时候,framework最终会将这些功能代理到item provider上去。
★item provider跟content(label) provier之间的关系,item provider 是model的adapter,content(label)provider是eclipse application中的控制层,这是两个不同概念,但是view在调用control层的各种方法时候,控制层会根据提供的adapter factory找到对应的item provider,然后执行item provider的相关方法来达到最终的目的。item provider是和ui独立的,除了可以应用于JFace之外,还可以应用于Swing以及非UI的地方。同样的道理,item provider还会采用类似的方式应用于property sheet的编辑只是这时使用的是IPropertySource接口而已,还有一个不同之处就是item provider实现的IItemPropertySource接口返回都是IItemPropertyDescripter类型的对象,而IPropertySource需要的是PropertyDescripter对象,因此这里有一个wrap和转换的过程,即ItemPropertyDescripter->PropertyDescripter,这样转换来转换去的似乎比较烦琐,但是其好处可以实现ui独立。
★对于调用model相关的command来说,其做法跟content(label)provider和property source没有什么区别,也是使用adapter factory找到item provider,由于item provider实现了与command factory相关的接口:IEditingDomainItemProvider,这样调用editing domain adapter factory相关的方法又变成了调用item provider相关的方法了。
★emf通知传递过程:在model被改变的时候,比如修改属性值,作为通知的接收者,在emf中即adapter(item provider也是一种adapter)将触发其notifyChanged方法,根据对这些通知做一个过滤,将属于自己的通知传递给model的通知处理中心(即ItemProviderAdapterFactory),然后由该Factory来调用注册在其内部的各种监听器,通知其他部分做相应的修改,这里有一点需要注意的是,factory内部的各种监听器,实际上是各种content provider,而不是对应的viewer,然后通过content provider对viewer进行更新。
★item provider有两种类型:一种是一个item provider对应一个model,也就是one to one;一种是一个item provider对应一类model,也就是所谓的单例模式。如果是后者的话,那么在访问item provider的方法的时候,需要制定一个参数来指定当前操作的是哪个model对象,比如getChildren(Object object)
★model object的创建流程:model object的创建是跟action相关的,action除了提供一些行为操作之外,还会提供一些与ui相关的text和icon,action的最终操作将被代理到相关的command上
★生成的emf.edit代码分为两部分:一部分是独立于ui的,放在edit plugin工程里面,另一部分是和ui相关的,放在editor plugin工程里面,独立于ui又分为item provider和item provider adapter factory以及plugin相关的部分,而和ui相关的则分为editor, action bar contributor, wizard以及plugin相关的部分
★item provider是emf.edit中最重要的部分,它决定了每一种model如何显示以及如何响应相关的command
★对应每一个model的ItemProvider继承ItemProviderAdapter,这里使用的是template method pattern,父类实现重点方法接口,子类提供具体细节实现,一个ItemProvider要实现4个功能,一个是content 和label provider;一个是property source(descriptor);一个是充当command factory;最后一个就是将对model所做的修改反应到相应的viewer上去.
★由于item provider是如此重要,因此我们有必有对它所要实现的接口一一做个介绍。首先是ITreeItemContentProvider接口,这个接口需要实现的一个方法就是getChildrenReferences,即返回model对象的引用集合。这里我们可以根据需要来定制我们所需要使用的引用
★为了更好的在model进行遍历,通过ItemProviderAdapter父类来提供getParent(),getChildren(), getElements(),hasChildren()等方法。我们可以根据自己的需要来进行定制。比如将与当前选中的对象相关的对象在viewer中进行显示,对getParent()和getChildren()方法进行复写来实现自己的解析处理。
★item provider还要实现IItemLabelProvider 接口,不用说,就是用来为viewer提供显示的text和image的,这里会用到ResourceLocator 这种东西来调用当前classpath下的资源(比如图片,属性文件等),这里的定制操作是显而易见的,就是可以使用我们自己的图片,以及决定使用model的哪个属性来作为label进行显示。
★虽然emf提供的默认editor中使用了table viewer,但是在item provider中并没有实现ITableItemLabelProvider接口,这个是因为在需要使用ITableItemLabelProvider的时候,会使用一个代理,去调用IItemLabelProvider的getImage()和getText()方法。
★为了在property sheet中对model进行编辑,则需要在实现IPropertySource接口,这里所谓的property就是指的是那些非containment attribute
★ItemPropertyDescriptior的内容包括这个property的label;用于现在status中的description;当前property的一些属性,该属性是否可编辑(通过设置模型的attribute是changeable来设置),该属性要使用的icon。IItemPropertySource 接口还有另外两个方法,一个是根据property id得到对应的property discriptor的getPropertyDescriptor()方法,另一个是对编辑的value进行转换getEditableValue(),这两个方法都是在ItemProvidorAdapter中实现。
★为了进行定制,我们可以对getPropertyDescriptors()方法进行复写,来提供更多的property信息,也可以对在addPropertyDescriptor中调用不同的ItemPropertyDescriptor构造函数来对label,description,icon进行定制。还可以使用ItemPropertyDescriptorDecorator 来为property提供不同的edit widget
★通过实现IEditingDomainItemProvider接口让item provider成为command factory
★item provider可以这样理解,为不同的可编辑的model items提供相应的功能,从ItemProviderAdapter继承将实现我们所要的大部分item provider功能,而ReflectiveItemProvider 则通过反射实现了我们所需要的功能
★每一个emf model对象可以称之为Notifier,因为在model发生改变的时候,将会给相应的监听器发送通知。而通知观察者(也就是监听器)则被称之为adapter,因为这些observer除了有监听消息之外,还可以用来扩展各种被监听对象的行为。
★说到adapter的扩展功能,就不得不提到adapter factory,adapter的每一个功能的扩展都是通过接口来实现,要实现一个功能就实现一个接口),然后使用adpaterfactory的adapt方法取得对应的接口实现,该方法有两个参数,第一个是model对象,另外一个是接口类型,最终得到的就是我们要使用的扩展功能接口对象,这里我们统一称之为adapter,在调用adapter factory的时候,如果model对象已经和某个adapter建立关联,那么直接返回这个adapter对象,否则adapter factory将创建这个adapter,并建立与model 对象之间的关联
★Adapter除了可以和单个的model object关联之外,还可以和具有层次结构关系中的每一个model object关联,这个是EContentAdapter来实现的,所以我们的adapter只要从该类继承便会具有该功能
★item provider是作为model adapter而存在的,但并不总是这样,因为有些item provider除了和model关联之外,还可以和非model关联。
★emf framework使用了一种代理机制来使用item provider,当要使用model的相应功能的时候,framework最终会将这些功能代理到item provider上去。
★item provider跟content(label) provier之间的关系,item provider 是model的adapter,content(label)provider是eclipse application中的控制层,这是两个不同概念,但是view在调用control层的各种方法时候,控制层会根据提供的adapter factory找到对应的item provider,然后执行item provider的相关方法来达到最终的目的。item provider是和ui独立的,除了可以应用于JFace之外,还可以应用于Swing以及非UI的地方。同样的道理,item provider还会采用类似的方式应用于property sheet的编辑只是这时使用的是IPropertySource接口而已,还有一个不同之处就是item provider实现的IItemPropertySource接口返回都是IItemPropertyDescripter类型的对象,而IPropertySource需要的是PropertyDescripter对象,因此这里有一个wrap和转换的过程,即ItemPropertyDescripter->PropertyDescripter,这样转换来转换去的似乎比较烦琐,但是其好处可以实现ui独立。
★对于调用model相关的command来说,其做法跟content(label)provider和property source没有什么区别,也是使用adapter factory找到item provider,由于item provider实现了与command factory相关的接口:IEditingDomainItemProvider,这样调用editing domain adapter factory相关的方法又变成了调用item provider相关的方法了。
★emf通知传递过程:在model被改变的时候,比如修改属性值,作为通知的接收者,在emf中即adapter(item provider也是一种adapter)将触发其notifyChanged方法,根据对这些通知做一个过滤,将属于自己的通知传递给model的通知处理中心(即ItemProviderAdapterFactory),然后由该Factory来调用注册在其内部的各种监听器,通知其他部分做相应的修改,这里有一点需要注意的是,factory内部的各种监听器,实际上是各种content provider,而不是对应的viewer,然后通过content provider对viewer进行更新。
★item provider有两种类型:一种是一个item provider对应一个model,也就是one to one;一种是一个item provider对应一类model,也就是所谓的单例模式。如果是后者的话,那么在访问item provider的方法的时候,需要制定一个参数来指定当前操作的是哪个model对象,比如getChildren(Object object)
★model object的创建流程:model object的创建是跟action相关的,action除了提供一些行为操作之外,还会提供一些与ui相关的text和icon,action的最终操作将被代理到相关的command上
★生成的emf.edit代码分为两部分:一部分是独立于ui的,放在edit plugin工程里面,另一部分是和ui相关的,放在editor plugin工程里面,独立于ui又分为item provider和item provider adapter factory以及plugin相关的部分,而和ui相关的则分为editor, action bar contributor, wizard以及plugin相关的部分
★item provider是emf.edit中最重要的部分,它决定了每一种model如何显示以及如何响应相关的command
★对应每一个model的ItemProvider继承ItemProviderAdapter,这里使用的是template method pattern,父类实现重点方法接口,子类提供具体细节实现,一个ItemProvider要实现4个功能,一个是content 和label provider;一个是property source(descriptor);一个是充当command factory;最后一个就是将对model所做的修改反应到相应的viewer上去.
★由于item provider是如此重要,因此我们有必有对它所要实现的接口一一做个介绍。首先是ITreeItemContentProvider接口,这个接口需要实现的一个方法就是getChildrenReferences,即返回model对象的引用集合。这里我们可以根据需要来定制我们所需要使用的引用
★为了更好的在model进行遍历,通过ItemProviderAdapter父类来提供getParent(),getChildren(), getElements(),hasChildren()等方法。我们可以根据自己的需要来进行定制。比如将与当前选中的对象相关的对象在viewer中进行显示,对getParent()和getChildren()方法进行复写来实现自己的解析处理。
★item provider还要实现IItemLabelProvider 接口,不用说,就是用来为viewer提供显示的text和image的,这里会用到ResourceLocator 这种东西来调用当前classpath下的资源(比如图片,属性文件等),这里的定制操作是显而易见的,就是可以使用我们自己的图片,以及决定使用model的哪个属性来作为label进行显示。
★虽然emf提供的默认editor中使用了table viewer,但是在item provider中并没有实现ITableItemLabelProvider接口,这个是因为在需要使用ITableItemLabelProvider的时候,会使用一个代理,去调用IItemLabelProvider的getImage()和getText()方法。
★为了在property sheet中对model进行编辑,则需要在实现IPropertySource接口,这里所谓的property就是指的是那些非containment attribute
★ItemPropertyDescriptior的内容包括这个property的label;用于现在status中的description;当前property的一些属性,该属性是否可编辑(通过设置模型的attribute是changeable来设置),该属性要使用的icon。IItemPropertySource 接口还有另外两个方法,一个是根据property id得到对应的property discriptor的getPropertyDescriptor()方法,另一个是对编辑的value进行转换getEditableValue(),这两个方法都是在ItemProvidorAdapter中实现。
★为了进行定制,我们可以对getPropertyDescriptors()方法进行复写,来提供更多的property信息,也可以对在addPropertyDescriptor中调用不同的ItemPropertyDescriptor构造函数来对label,description,icon进行定制。还可以使用ItemPropertyDescriptorDecorator 来为property提供不同的edit widget
★通过实现IEditingDomainItemProvider接口让item provider成为command factory
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21933原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2215在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4548知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4158GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7944以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4085filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5217Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7669以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5675错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5504内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6731最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9995JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4940List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4673在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5254修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9586这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5156在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4059在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3381Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2117java.lang.IllegalAccessError: t ...
相关推荐
EMF(Eclipse Modeling Framework)是Eclipse基金会提供的一款强大的模型化开发框架,主要用于构建基于模型的应用程序。它建立在Java平台上,为开发者提供了一种高效的方法来处理复杂的软件建模任务,支持元数据驱动...
2. **EMF.Edit**:这部分建立在Ecore之上,提供了一组用于查看和修改模型的方法,还包括了一个内置的模型编辑器,使得开发人员可以直接在Eclipse环境中对模型进行操作。 #### EMF的适用场景 EMF非常适合于那些需要...
《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...
基于Eclipse的EMF插件开发程序详解 在本文中,我们将讨论基于Eclipse的EMF插件开发程序的相关知识点。EMF(Eclipse Modeling Framework)是一种基于Eclipse的模型驱动架构(MDA)工具,用于构建复杂的模型驱动应用...
Java开发工具EMF插件是Java开发者在进行模型驱动工程(Model Driven Engineering,MDE)时常用的一个强大工具。EMF(Eclipse Modeling Framework)是Eclipse IDE的一部分,它提供了一种框架和API,用于构建基于模型...
理解并熟练使用EMF API文档对于进行Eclipse插件开发至关重要,它可以帮助开发者构建出高效、可维护的模型驱动应用。通过深入学习和实践,开发者能够掌握模型驱动开发的精髓,提升软件开发的效率和质量。
**微软EMF文件格式详解.pdf**:这份文档很可能是微软官方或第三方专家提供的关于EMF格式的详细指南。通常,它会涵盖EMF的基本结构、记录类型、图形操作、颜色管理、图元定义等内容。通过阅读这份文档,读者可以了解...
EMF为开发者提供了构建和使用模型化软件的基础设施,使得开发人员可以以模型为中心进行编程,提高代码的可维护性和可复用性。它基于通用建模语言(Unified Modeling Language, UML),但不局限于UML,可以用于创建...
在本文中,我们将深入探讨如何基于Eclipse的EMF(Eclipse Modeling Framework)插件来开发图形化编辑程序。EMF是Eclipse平台的核心部分,它提供了一套强大的工具和库,用于构建模型驱动的软件应用程序。让我们一起...
此外,本文档还将详细介绍EMF开发指南之Command Framework、Item Provider、Editor、属性详解、Attribute详解、Reference详解、客户端编程等方面的内容。 本文档旨在为读者提供一个详细的eclipse插件开发经验总结,...
- **软件开发**:许多软件开发工具都支持EMF格式,使得开发者能够轻松地将高质量的图形嵌入到他们的应用程序中。 - **CAD系统**:计算机辅助设计(CAD)系统也经常使用EMF格式来保存复杂的图形设计,因为它的高保真度...
### EMF自学笔记知识点详述 ...总之,EMF提供了一种灵活、高效、强大的模型驱动开发方式,它不仅简化了开发过程,提高了开发效率,而且促进了软件工程的标准化和自动化,为构建高质量的软件系统提供了有力的支持。
EMF(Eclipse Modeling Framework)是Eclipse基金会推出的一个开源...通过本教程,你将掌握EMF的基本概念和操作,以及如何利用EMF插件提升开发效率。在实践中不断探索,你将能够自如地运用EMF构建复杂的模型驱动系统。
EMF的官方文档和相关资源可以在Eclipse官方网站上找到,包括用户指南、开发指南和技术文档等。 ##### 1.2 框架基础 **1.2.1 前提条件** - 必须安装Eclipse IDE。 - 推荐熟悉Java编程语言。 - 对面向对象的设计有...
这些文件可能包含了关于EMF的具体教程或指南: 1. "使用 EMF 进行元建模:生成具体、可重用的 Java 代码片段" 这篇文档可能详细讲解了如何使用EMF的代码生成功能,将元模型转换为可执行的Java代码,实现模型到代码...
在MATLAB开发环境中,"renderTex2Emf"是一个实用工具,主要功能是将LaTeX字符串转换成EMF(Enhanced Metafile)格式的图形文件。EMF是一种矢量图形格式,广泛应用于Windows操作系统中,它能保持高质量的图形显示,...
这个示例代码对于理解SVG和EMF之间的转换原理非常有帮助,同时也可以作为开发中实际转换功能的基础。如果你在Windows环境中需要处理SVG图形,并希望在其他应用程序(如Word、PowerPoint)中保持矢量特性,这个转换...
要将EMF转换为PNG,首先你需要下载`freehep`库,并将其导入到Eclipse这样的Java集成开发环境中。Eclipse是一个广泛使用的开源IDE,支持Java及其他语言的开发,具有强大的代码编辑、调试和项目管理功能。导入库后,你...