EMF-edit功能解析
2008-02-23 09:51:30来源:互联网 阅读 ()
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属性的编译过程
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash