`
cloudtech
  • 浏览: 4610172 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

EMF学习笔记2——模型适配器类

 
阅读更多

适配器类是通过EMF.Edit这个框架生成的,通过它生成的适配器类为EMF模型起到了编辑器的作用,包括:
1为Jface组件(如TableViewer、TreeViewer等)提供ContentProvider和LabelProvider
2提供常用命令操作(添加、删除、更新、undo、redo等)。

在Jface组件中,视图内容是通过ContentProvider接口来提供的,而标签和图标的显示是通过LabelProvider接口来实现的,
在EMF中,AdapterFactoryContentProvider间接实现了IContentProvider接口,而AdapterFactoryLabelProvider间接实现了ILabelProvider接口,因此,Jface组件便可以通过他们来获取组件的内容和标签的显示信息。
上一篇文章已经提到,视图不直接与EMF实体类交互,而是通过其适配器类的处理来完成EMF模型到视图的绑定过程。
这些适配器在EMF中都是以ItemProvider的形式存在的(如实体类Book的适配器类便是BookItemProvider类),并且由统一的工厂类来对其进行管理(LibraryItemProviderAdapterFactory),因此在构造AdapterFactoryContentProvider对象时,只要将该适配器工厂类以
构造参数的形式传递进去,AdapterFactoryContentProvider便可以通过适配器工厂将代码逻辑转交给相应的适配器类。

可通过一段代码来看一下适配器类的使用:
假设我们要将EMF模型应用到TreeViewer组建上,则需要文本提供器实现ITreeContentProvider接口,AdapterFactoryContentProvider实现了这个接口,当我们调用getChildren()获取子节点时,它会进行如下处理:

该方法首先会调用适配器工厂类的adapt方法来获取指定object的适配器类,
然后再调用适配器类的getChildren()方法,这样便将代码逻辑转交给适配器类去处理。

整个处理过程是这样的,但是这两个步骤我们也应该明确其实现细节。
1适配器工厂类(adapterFactory)如何通过指定object来获取其适配器类
我们可以看一下adapt()方法的实现(注:org.eclipse.emf.common.notify.impl.AdapterFactoryImpl类中声明)

方法首先会判断传入的target对象是不是emf实体类
(注:所有的emf实体类接口全部继承至EObject,而EObject接口又继承至Notifier,所以我们可以通过target instanceof Notifier来判断target是不是emf实体对象)
如果是emf实体,则通过adapterFactry返回其适配器类;
而如果不是emf实体,则直接返回了该对象。
代码这样设计其实是有以下好处的:
在使用EMF模型作为视图组件的提供器之后,我们可能还想将其他模型也整合到其中;换个角度说,视图的提供器可能是EMF模型和其他模型的混合体。那么adapt方法的处理逻辑便能满足这种需求。
比如,我们可以自己编写一个与EMF模型无关的类,让它实现ITreeItemContentProvider接口,当调用adapterFactory的adapt方法时,因为它不是EMF实体类,便会直接返回该对象,然后便可以将具体的业务操作转接给该对象进行处理。
该方法也从另一面说明了在EMF中,所有的ItemProvider都是适配器类,但并不是所有的适配器类都是ItemProvider。比如这里我们创建的对象,它也是适配器类,但不是作为ItemProvider的形式出现的。

2适配器类如何处理接下来的逻辑
如果该适配器类是EMF生成的(即以ItemPrvider形式出现的),那么它会继承org.eclipse.emf.edit.provider.ItemProviderAdapter这个模板类,然后调用模板类的相应方法去处理。如果该适配器类是我们手工生成的,则需要我们自己去编写方法的实现。

有了这些适配器类之后,构建Jface组件将会变得很容易,我们还没有手工编写任何代码,便具备了几乎所有构建组件的基本条件。
构建TreeViewer组件如下:

可以看到,我们将主要操作都放在了数据源input值的构造上,而其他操作通过构建EMF适配器工厂来进行处理。

构建TableViewer组件:
EMF为我们生成的模型并不直接支持TableViewer组件,需要稍加修改。
首先在适配器工厂类的构造函数中添加新类型支持。
如:在LibraryItemProviderAdapterFactory中添加对ITableItemLabelProvider类型的支持。

然后在每个适配器类所实现的接口中添加ITableItemLabelProvider接口
如:public class BookItemProvider
extends ItemProviderAdapter
implements
IEditingDomainItemProvider,
IStructuredItemContentProvider,
ITreeItemContentProvider,
IItemLabelProvider,
IItemPropertySource,
ITableItemLabelProvider//添加此接口

最后编写并覆盖getColumnText()方法和getColumnImage()方法。

接下来的构建步骤与TreeViewer相同。

分享到:
评论

相关推荐

    EMF 自学笔记5

    EMF 自学笔记

    使用浮动窗口以及emf文件制作的迷宫——某学校的课设

    使用迷宫以及emf文件的生成加载技术制作的迷宫,其实就是根据http://www.comprg.com.cn/detail.asp?hw_id=7061上的说明做出来的工程。 程序中迷宫中的小人可以自由移动,胜利或失败之后还会有绚丽的提示。

    EMF学习完整教程

    EMF学习完整教程,EMF: Eclipse Modeling Framework Second Edition

    用动态EMF构建元模型

    创建动态内存内核模型序列化动态模型反序列化/装载动态模型限制结束语下载参考资料通过本文可以了解如何使用DynamicEclipseModelingFramework(EMF)在不生成Java实现类的情况下根据需要构建动态的基于Ecore的模型。...

    emf2svg-FreeHEP

    This is the API specification of the FreeHEP VectorGraphics package for converting emf to svg.

    使用EMF开发基于模型的Eclipse插件

    Eclipse Modeling Framework (EMF)是Eclipse 的一个基于Java语言的模型构建框架,它通过提供通用 的模型框架和自动代码生成工具,极大地简化了基于结 构化模型的Eclipse插件或者应用程序的开发

    Emf2Png.zip

    EMF图片转PNG图片

    emf2vec去水印破解版

    emf2vec工具可在各种矢量文件格式间转换,如emf->pdf,svg-pdf,sgv-bmp等等。但emf2vec为收费软件,共享版在emf->pdf转换过程中会附加水印。此资源是emf->pdf转换的去水印版。(注:仅emf->pdf去除了水印)。要5分...

    微软emf文件格式详解

    文件格式 EMF (Enhanced MetaFile) ——是在印刷工业中应用与Windows操作系统的文件格式。实际上EMF是原始WMF(Windows metafile)格式的32位版本。EMF格式的产生是为了解决WMF在印刷行业中的不足。EMF是设备独立性...

    GIF2EMF转换器

    GIF2EMF转换器

    模型二分类.emf

    模型二分类.emf

    EMF for Eclipse 4.4插件

    基于Eclipse的模型框架 它是Eclipse MDA(Model Driven Architecture)的一个重要组成部分 是Eclipse中许多项目的基础 e g GEF EMF可以将模型转换成高效的 正确的 和易于定制的Java代码

    SVG转EMF的示例代码

    矢量格式转换程序,基于JAVA实现的SVG转EMF的的示例代码,下载后导入到eclipse即可运行。

    emf-sdo-SDK-2.2.0(2) eclipse 可视化 界面设计

    emf-sdo-SDK-2.2.0(2) eclipse 可视化 界面设计。 因为size太大,所以分成了2部分,另一部分在 emf-sdo-SDK-2.2.0(1)里面。 emf-sdo-SDK-2.2.0(1)的下载地址: http://download.csdn.net/source/1002774

    EMF模型文件对比/比较(emf.compare)

    NULL 博文链接:https://winseclone.iteye.com/blog/1797563

    将EMF图片格式转换成PNG

    使用freehep将EMF转换为png,项目下载导入eclipse即可运行。

    EMF文件提取文本,预览,打印

    emf文件是windows的一种打印格式,该资源可以对emf文件进行文本提取和推送打印机打印以及转换成图像

    imdb2emf:将 IMDb 电影数据库解析为 EMF 模型

    imdb2emf:创建 EMF 模型或 TGraphs 的 IMDb 解析器这个小工具从 IMDb 文件创建一个 EMF 模型(或 )。用法您可以克隆这个存储库并安装 Leiningen 来解析 IMDb 文件,也可以下载一个没有依赖项的预编译 JAR。用法:...

    emf文件格式详解

    包含3个文件: 微软emf文件格式详解.pdf emf.hlp (Enhanced Metafiles in Win32) emfexplorer_src.zip

Global site tag (gtag.js) - Google Analytics