EMF 自学笔记 3

继续学习八进制的blog.

如何使用自定义类型?

Annotated Java模式使用自定义类型很简单:

Step 1. 添加注解。对blog里的例子,就是为Product接口添加
/**
  * @model
  */
 RGB getRGB();

Step 2. 更新ecore模型和genmodel模型。由于没有找到直接更新这些模型的手段,目前我是重新生成一个新的genmodel,这步操作会自动更新ecore模型。这样原来的genmodel里面的和ecore模型相关的部分也就自动更新了,而其他部分(如edit部分)维持不变,从而可以保留住以前做的genmodel模型更改。

Step 3. 重新Generate Model Code.

Step 4. 修改自定义类型的持久化代码。

修改工厂类里的 createXXXFromString() 和 convertXXXToString() 方法。

 

如何使用EMap?

不知道怎样用Annotated Java实现,先放着。

 

.Edit介绍

.Edit项目里包含一个ItemProviderAdapterFactory类和一组 ItemProviderAdapter的子类,后者是和核心模型的接口一一对应的。

一个例子:NamedElementItemProvider extends ItemProviderAdapter
implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource

另一个例子:ProductItemProvider extends NamedElementItemProvider implements ...

继承关系与模型的继承关系保持一致。

 

这些ItemProvider具有以下几个作用:

1. 实现了JFace中ContentProvider和LabelProvider的功能

不再需要手工为不同的tree或是table创建ContentProvider与LabelProvoder.

2. 提供了关联对象的属性表

每个ItemProvider的getPropertyDescriptors()方法返回在属性视图里显示的属性列表,列表里的每个元素是一个 ItemPropertyDescriptor对象,它决定了每个属性的标签、描述、图标以及是否可编辑。EMF生成的代码会帮我们把模型定义里的每个属性都显示在属性列表里,如果希望隐藏某些属性,可以通过修改这个方法移除之。

3. 生成编辑模型的各种命令

为了实现Undo/Redo功能,对模型的每个改变都应该使用Command实现,然后把 Command保存在Command栈里,每个Command对象保存Undo/Redo自己的信息。

在ItemProviderAdapter基类里有很多createXXXCommand()方法。它相当于一个生产这些Command的工厂,用户对模型编辑的请求都将通过它转换为对应的Command。

4. 将模型的改变通知到负责显示模型的视图

在一个Eclipse应用程序里经常会有很多个查看器显示模型,无论用户怎样修改模型,要让这些查看器里显示的内容总是当前的模型,最好的办法是让查看器能够响应模型的变化。ItemProvider作为监听器可以很好的完成这个任务。

模型发生改变时,与被修改的对象相关联的ItemProvider的notifyChanged()方法被调用,事件立即被通知给 ItemProviderAdapterFactory,后者是整个模型的事件处理机构,所有的ItemProvider都是通过 ItemProviderAdapterFactory创建并注册为监听器的,因此ItemProviderAdapterFactory可以把事件通过 fireNotifyChanged()通知给所有这些监听器的notifyChanged()方法去消化。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值