手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

EMF-edit功能解析

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

1. EMF.edit

a) 说明:EMF.edit位于EMF.editor和EMF.Ecore之间,他起了一个中介者的作用。他负责把来自EMF.editor的UI相关的请求转换成符合EMF.Ecore的UI无关的调用。他需要提供以下四个功能:实现用于支持Viewer显示的ContentProvider和LabelProvider;实现用于支持属性显示的IPropertySource;实现用于支持对模型进行操作的CommandFramework;实现用于支持修改通知的Framework。



b) ContentProvider和LabelProvider

i. 图:



ii. 说明:当TreeViewer需要显示内容时,调用她的IContentProvider的getChildren(Object obj)方法。这个方法会被转发到AdapterFactoryContentProvider内部。她通过她所引用的ItemProviderAdapterFactory来获取一个对obj的ITreeItemContentProvider类型的Adapter,这个Adapter是由EMF生成的对应于ECore模型的一个ItemProviderAdapter(这里为TeacherItemProvider),最后由这个TeacherItemProvider负责生成所需要显示的子节点列表。



iii. 代码:

public classAdapterFactoryContentProvider implements ITreeContentProvider {

public Object []getChildren(Object object){

ITreeItemContentProvider treeItemContentProvider =

(ITreeItemContentProvider)adapterFactory.adapt(object,

ITreeItemContentProvider.class);

return treeItemContentProvider.getChildren(object);

}

}

注:红色是UI相关的请求,蓝色是UI无关的适配器类,粉红色就是UI无关的请求。



c) IPropertySource

i. 图:



ii. 说明:当PropertySheetPage需要显示属性内容时,他访问他的IPropertySourceProvider的getPropertySource(Object obj)方法。这个方法会被转发到AdapterFactoryContentProvider内部。她通过她所引用的ItemProviderAdapterFactory来获取一个对obj的IItemPropertySource类型的Adapter,这个Adapter是由EMF生成的对应于ECore模型的一个ItemProviderAdapter(这里为TeacherItemProvider),最后由这个TeacherItemProvider负责生成所需要显示的属性列表。

iii. 代码:

public classAdapterFactoryContentProvider implements IPropertySourceProvider{

public IPropertySource getPropertySource(Object object){

IItemPropertySource itemPropertySource =(IItemPropertySource)

adapterFactory.adapt(object,IItemPropertySource.class));



}

}



d) Command Framework

i. 图:



ii. 说明:由于EMF.editor并不了解底层的模型细节,因此他不能直接对模型进行操作,他需要生成一些用于操作模型的Command对象。当editor需要对模型进行修改时,他通过调用他的createCommand(EditingDomain domain)方法,创建用于进行模型操作的Command对象,该方法最后会被转发到domain的createCommand(),然后domain会根据他所引用的ItemProviderAdapterFactory来获取一个IEditingDomainItemProvider的适配器,由他来最后生成用于对模型进行操作的Command对象。



iii. 代码:

public class DeleteAction extendsCommandActionHandler{

public CommandcreateCommand(Collection selection){

returnRemoveCommand.create(domain, selection);

}

}

public class RemoveCommand extendsAbstractOverrideableCommand{

public static Commandcreate(…){

return domain.createCommand(…);

}

}

public classAdapterFactoryEditingDomain implements EditingDomain{

public CommandcreateCommand(…){

IEditingDomainItemProvider editingDomainItemProvider =

(IEditingDomainItemProvider)adapterFactory.adapt(owner,

IEditingDomainItemProvider.class);

returneditingDomainItemProvider.createCommand(…);

}

}

注:当需要执行命令时,editor会调用EditingDomain上的CommandStack,并调用他上面的execute(Command c)方法。



e) Notify Framework

i. 图:



ii. 说明:当我们修改了模型的值以后,模型将会向他对应的ItemProvider发出一个更新通知,这个通知随后被转发到ItemProviderAdapterFactory,然后最终发到AdapterFactoryContentProvider处,并由他来负责更新对应的viewer。

上一篇: java访问com组件_jacob使用指南
下一篇: 给jikes指定encoding属性的编译过程

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!