EMF介绍系列(七、.Edit初步)

EMF除了生成模型部分的接口和实现类(不妨称作“核心模型”)以外,还生成一个名称 以.Edit结尾的项目,包含一些与核心模型和编辑器关系都十分紧密的代码。这部分代码经过 了精心设计,可重用的程度是相当的高。它们不仅在EMF生成的编辑器项目里大量被用到,我 们自己在扩展编辑器的时候也应该充分利用。

在线商店的例子里,com.my.shop.edit项目里包含一个ItemProviderAdapterFactory类和 一组 ItemProviderAdapter的子类,后者是和核心模型的接口一一对应的,例如核心模型的 Shop、Category和Product分别对应 ShopItemProvider、CategoryItemProvider和 ProductItemProvider。这篇帖子主要介绍一下这些 ItemProvider,而关于 ItemProviderAdapterFactory的内容将在以后的帖子里专门介绍,其实顾名思义, ItemProviderAdapterFactory的作用主要就是生成ItemProvider。事实上在构造EMF应用程序 时,我们经常要修改 ItemProvider里的代码,而ItemProviderAdapterFactory则很少改动。

图1 EMF生成的.Edit项目

注意:.Edit项目里ItemProviderAdapter的子类名称里省略了Adapter这个单词,例如 CategoryItemProvider而非CategoryItemProviderAdapter,你心里应该清楚它是一个 Adapter,因为它确实实现了Adapter接口。EMF里另外专门有一个ItemProvider类是为非 Adapter类型准备的,在这篇里说的 ItemProvider不是指它,而是指XXXItemProvider,也就 是ItemProviderAdapter的子类。

注意:EMF里的Adapter接口和Eclipse Runtime的IAdaptable接口虽然名称相似,但并不 是同一个概念(关于IAdaptable请参见前面的翻译帖子), EMF里的Adapter等同于监听器( Listener、Observer)的作用,它监听的对象是EMF的Notifier,在一个Notifier 上可以注 册多个Adapter。另一方面,ItemProviderAdapterFactory则很像IAdaptable,它们都能够起 到动态转换类型的作用,只不过前者一般只用于Notifier到Adapter的转换,后者则没有什么 限制,此外转换方法的名称也不同,前者是adapt(),后者为 getAdapter()。

从图1中不难看出,ItemProvider构成了.Edit项目的主要部分,这些ItemProvider具有以 下几个作用。

一、实现了JFace中ContentProvider和LabelProvider的功能

JFace查看器(Viewer)是对swt中控件的一种包装,例如TableViewer是对Table的包装, TreeViewer是对Tree的包装,等等,通过这种方式可以将控件与显示在控件中的数据在一定 程度上分离,从而方便数据显示的更新。相当多的Eclipse应用程序都是通过JFace查看器显 示数据的,与查看器关联的ContentProvider和LabelProvider分别控制查看器中显示的哪些 数据以及每条数据的显示方式。

以TreeViewer的ContentProvider为例,在JFace里应该实现ITreeContentProvider接口, 这个接口定义了getParent()、hasChildren()和getChildren()这三个方法;在EMF里有 ITreeItemContentProvider接口与之对应,这个接口同样具有这三个方法,.Edit部分的每个 ItemProvider都实现了这个接口,因为EMF已经完全知道我们的模型结构,所以这三个方法在 ItemProviderAdapter类里已经实现好了。不过 ITreeItemContentProvider毕竟不能直接交 给JFace的TreeViewer来使用,所以EMF提供了一个 AdapterFactoryContentProvider来做适 配工作,你可以在编辑器的代码里看到如何使用它。

LabelProvider也是类似的,它主要控制显示的文字和图标。EMF生成的ItemProvider缺省 没有实现 ITableItemLabelProvider,所以如果要使用TableViewer,要修改代码以实现 ITableItemLabelProvider接口和额外的方法,具体请参考在线商店例子中的 ProductItemProvider。从 JFace的角度来说,ItemProvider相当于集成了各种查看器的 ContentProvider和LabelProvider的代码,是一个通用的“ContentLabelProvider”。因此 利用它,开发人员在改变查看器的时候只需要修改很少的代码,而不像传统方式那样每换一 个查看器还要写新的ContentProvider和LabelProvider。

时间: 2024-08-02 22:24:50

EMF介绍系列(七、.Edit初步)的相关文章

EMF介绍系列(四、枚举类型、自定义类型和Map)

除了普通的类(接口)以外,在类图里可以定义一些特殊的元素,比较常见的是枚举类型 .自定义类型,它们对于一个完整可用的模型也是必不可少的,这篇帖子主要介绍EMF里它们 的使用方法.另外,由于EMF对Map的支持比较特别,所以在这里也简要介绍一下Map类型的定 义方法. 枚举类型 继续前面帖子的例子,现在要为产品增加一个评分属性,评分值可以是好中差之一,像这 样属性值只能是有限几个值之一的属性就应该定义为枚举类型(Enumeration).在类图里首 先创建一个名为Score的枚举类型,然后为它增加

EMF介绍系列(六、自定义命令)

EMF生成的应用程序里,用户的发出的每一条命令都是可以撤销(Undo)的,例如修改了 产品的价格,按一下撤销按钮就能恢复原来的价格,当然还可以通过重做(Redo)再回到新 的价格.为了实现这个功能,应用程序里维护了一个用于存放命令的类似栈的数据结构 (CommandStack),每一条执行过的命令都被存放在那里,需要撤销时取出最近一条命令进 行撤销.这个数据结构是由EditingDomain对象负责维护的, EditingDomain相当于编辑模型 时的环境. 在EMF里命令框架实际上可以分为两

EMF介绍系列(五、定制应用程序界面)

第三篇帖子介绍了定制一个EMF应用程序的基本方法,这一篇让我们来看看怎样定制应用 程序的使用界面.没有任何一个界面是万能的,所以定制工作不可避免,而大多数定制都是 通过修改代码来实现的.在实际应用中,同一个需求可能有多种修改方式可以实现,我认为 修改涉及的地方(类,方法)越少越有利于发挥EMF的优势,因此我们应该对EMF生成的代码 有一定的了解,这是发挥自己创造力的基础. 下面有几个常见的需求,通过对这些需求的实现,相信你会对EMF应用程序的开发过程有 一个更具体的认识. 一.简化模型创建向导

EMF介绍系列(三、定制应用程序的基本方法)

借助EMF的帮助,不用亲自编写一行代码就可以生成一个完整的应用程序,你是不是对EMF 有些感兴趣了?不过生成的应用程序看起来都像是从同一个模子里出来的,即一个多页编辑 器,一个大纲视图和属性页,这当然无法满足所有人的需求.不用耽心,只要了解EMF的机制 ,按照我们的要求修改这个应用程序并不是一件很困难的事情. 首先大概的看一下EMF为我们生成了哪些东西吧.按照前文的操作,EMF应该一共生成了四 个插件项目:com.my.shop. com.my.shop.edit.com.my.shop.edi

EMF介绍系列(一、EMF与MDA)

接触Eclipse一段时间的朋友应该都听说过EMF这个名字,EMF是Eclipse Modeling Framework的缩写,它是Eclipse的一个重要的子项目,如果翻译成中文就是"Eclipse 建模框架".其实只从这个名字还真是难以确定它的作用是什么,我认为要完全掌握 EMF应该对模型驱动开发(MDA)有一定的了解,而EMF可以看作是Eclipse上的MDA一个实现(代 码生成是MDA 的重要组成部分之一),它能够生成在Eclipse上执行的代码.可惜我对MDA没 有系统研究过

EMF介绍系列(二、从模型生成应用程序)

还是从一个例子里看看EMF的使用方法和作用吧.假设我们的应用是一个网上商店,在系 统里有这些对象:商店Shop.类别Category.商品Product,其中类别可以包含子类别.现在 我们用EMF从头到尾生成一个可以管理类别和商品的应用程序.如果你的Eclipse里还没有安 装 EMF,在eclipse.org/emf下载适合你Eclipse版本的EMF SDK,建议你下载全部包含的那种 .安装后,在新建对话框里会增加EMF的类别,如图1所示: 图1 新建向导里的EMF类别 其中"EMF Mod

SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现

原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验. 4.具

ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

一. 前言        好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生.        言归正传,一直以来,数据挖掘系统的数据类型是我很头疼的问题,不可能为了每一种场景都定义一种新的数据类型,但通用类型又没法满足所有需求,而且性能上有影响.思来想去,最终决定结合两种特点制定一种方案:以通用类型为主,一些特定场合和要求再制定自定义类型,比如微博.   通用数据类型的名字叫FreeDocument,它

xen虚拟化实战系列(七)之xen虚拟机VNC访问配置

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1286408 xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装xen虚拟化实战系列(二)之xen虚拟机安装xen虚拟化实战系列(三)之xen虚拟机复制xen虚拟化实战系列(四)之xen虚拟机扩展磁盘空间一法xen虚拟化实战系列(五)之xen虚拟机扩展磁盘空间再一法xen虚拟化实战系列(六)之x