macrochen 发表于 2013-2-4 20:23:24

Command Framework如何实现EMF Model的编辑

源于《EMF.Edit Framework Programmgering's Guide》

EMF.Edit里面有几个类比较绕,很容易被搞得晕头转向,所以需要澄清以下:
★AdapterFactoryContentProvider, ItemProviderAdapterFactory和ItemProviderAdapter之间的关系,ItemProviderAdapterFactory用来创建各种Adapter以及将各种notifier跟这些adapter关联起来,AdapterFactoryContentProvider包装了一个ItemProviderAdapterFactory(AdapterFactory),它用来将JFace需要的content provider代理到item content provider上,对content provider各种方法的调用将调用到相应的item content provider上,对org.eclipse.jface.viewers.IStructuredContentProvider的调用将代理到IStructuredItemContentProvider上,对ITreeContentProvider的调用将代理到ITreeItemContentProvider上,而对IPropertySourceProvider的调用将代理到IItemPropertySource,而ItemProviderAdapter是所有ItemProvider的基类,AdapterFactoryLabelProvider和ItemProviderAdapter之间也存在类似的关系

★为了显示model内容,我们需要使用content provider和label provider,而编辑model内容则需要使用到editing domain,AdapterFactoryEditingDomain是一个和AdapterFactoryContentProvider、AdapterFactoryLabelProvider类似的东东

★editing domain主要有两个功能:一个是作为command的factory(所以它的实现类是AdapterFactoryEditingDomain);另一个对EMF Model(ResourceSet,因此提供了getResource()方法)进行管理

★EditingDomain,AdapterFactoryEditingDomain,EditingDomainItemProvider和Command之间的关系,AdapterFactoryEditingDomain实现了EditingDomain接口,AdapterFactoryEditingDomain和AdapterFactoryContentProvider一样,也是用来将EditingDomain的方法代理到EditingDomainItemProvider上去。

从一般的操作说起,比如从一个company对象上删除一个department对象,通常我们的做法是:
 <div class="code_title">java 代码
页: [1]
查看完整版本: Command Framework如何实现EMF Model的编辑