快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

EMF-edit功能解析


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源码分析:深入探讨Iterator模式
下一教程: Java桌面应用程序设计新贵:SWT 简介

您可以阅读与"EMF-edit功能解析"相关的教程:
· Tomcat的Cluster功能复制session时会复制保存在其中的对象么?
· 全面解析JDBC(四)
· Java的网络功能与编程 一
· JAVA-如何实现TIMER功能
· 全面解析JDBC(二)
    微笑服务 优质保证 索取样品