一个emf新手的学习笔记 --EMF 生成的代码阅读笔记(二)
EMF不光为我们生成了模型类的代码。还为我们提供了一个默认的模型编辑器。要看到这个模型编辑器我们只需要运行一下就可以看到了(用Eclipse Application的方式)。
共有三个部:
1. 编辑器的主体。包括六种呈现方式。
a) Selection.
b) Parent.
c) List.
d) Tree
e) Table
f) Tree With Columns.
2. Outline部分。
Properties,会根据选择不同的对象而改变显示的内容。关于Jface部分的工作模式我在《Table View 的合作类的模式》一文中有提到,不过需要说明的是,在Jface中的Viewer他们的ContentProvider可能不一样的。
要完成这部分的功能 emf的产生代码中分别放到了两个插件里实现了他们分别是edit和editor。
Edit提供了Item 的Provider,他存在的意义就在于把逻辑对象和UI分割开。而Editor通过使用edit提供的Provider实现了一个编辑器的UI和Command部分,他是正真的用户界面部分。
下面我们就先来看看edit中的类。
好了,首先edit中使用的是adapt模型。所以edit中的插件对象会实现所有的viewer,Properties所需要的接口。
Emf为我们实现通用的接口。所以这绝对是一个学习的好机会。
废话不多说了,来看代码把。
首先看声明:
public class FamilyItemProvider
extends ItemProviderAdapter
implements
IEditingDomainItemProvider,
IStructuredItemContentProvider,
ITreeItemContentProvider,
IItemLabelProvider,
IItemPropertySource {
他的继承关系可以用下图来表示:
他们之间的职能以及实现的接口可用下图来描述:
AdapterImpl是为了实现Adapter模式而设定。
ItemProviderAdapter完成一些基本功能。下面就分别从不同的接口来说明
1. ResourceLocator:该接口是用来进行资源定位的。
2. IDisposable 是 emf框架提供的一种析构接口。
3. IChangeNotifier 为"Notification and Adapters"模式提供必需的方法。
4. CreateChildCommand.Helper
最下面的 EMF根据我们的模型产生的Provider的了。他实现了5个接口。
1. IEditingDomainItemProvider
这部分我还清楚,怀疑和command有关。
2. IStructuredItemContentProvider
该接口为TableViewer,ListViewer,TreeViewer提供服务。
This is the interface needed to populate the top level items in a TreeViewer, the items of a ListViewer, or the rows of a TableViewer.
3. ITreeItemContentProvider
This is the interface needed to populate subtrees in a TreeViewer
4. IItemLabelProvider
This is the interface implemented to provide a label text and even a label icon for an item;
it receives delegated calls from ILabelProvider.
5. IItemPropertySource
![](https://i-blog.csdnimg.cn/blog_migrate/27dfcd6142ad03caaba7fedd7a816382.gif)
共有三个部:
1. 编辑器的主体。包括六种呈现方式。
a) Selection.
b) Parent.
c) List.
d) Tree
e) Table
f) Tree With Columns.
2. Outline部分。
Properties,会根据选择不同的对象而改变显示的内容。关于Jface部分的工作模式我在《Table View 的合作类的模式》一文中有提到,不过需要说明的是,在Jface中的Viewer他们的ContentProvider可能不一样的。
要完成这部分的功能 emf的产生代码中分别放到了两个插件里实现了他们分别是edit和editor。
Edit提供了Item 的Provider,他存在的意义就在于把逻辑对象和UI分割开。而Editor通过使用edit提供的Provider实现了一个编辑器的UI和Command部分,他是正真的用户界面部分。
下面我们就先来看看edit中的类。
好了,首先edit中使用的是adapt模型。所以edit中的插件对象会实现所有的viewer,Properties所需要的接口。
Emf为我们实现通用的接口。所以这绝对是一个学习的好机会。
废话不多说了,来看代码把。
首先看声明:
public class FamilyItemProvider
extends ItemProviderAdapter
implements
IEditingDomainItemProvider,
IStructuredItemContentProvider,
ITreeItemContentProvider,
IItemLabelProvider,
IItemPropertySource {
他的继承关系可以用下图来表示:
![](https://i-blog.csdnimg.cn/blog_migrate/9efe3eebabe1e7047f3487aeeefaa818.gif)
他们之间的职能以及实现的接口可用下图来描述:
![](https://i-blog.csdnimg.cn/blog_migrate/99d71068f3d8fadff4f4b4aac0daed60.gif)
AdapterImpl是为了实现Adapter模式而设定。
ItemProviderAdapter完成一些基本功能。下面就分别从不同的接口来说明
1. ResourceLocator:该接口是用来进行资源定位的。
2. IDisposable 是 emf框架提供的一种析构接口。
3. IChangeNotifier 为"Notification and Adapters"模式提供必需的方法。
4. CreateChildCommand.Helper
最下面的 EMF根据我们的模型产生的Provider的了。他实现了5个接口。
1. IEditingDomainItemProvider
这部分我还清楚,怀疑和command有关。
2. IStructuredItemContentProvider
该接口为TableViewer,ListViewer,TreeViewer提供服务。
This is the interface needed to populate the top level items in a TreeViewer, the items of a ListViewer, or the rows of a TableViewer.
3. ITreeItemContentProvider
This is the interface needed to populate subtrees in a TreeViewer
4. IItemLabelProvider
This is the interface implemented to provide a label text and even a label icon for an item;
it receives delegated calls from ILabelProvider.
5. IItemPropertySource