1.在模型中加入子模型
GEF的模型类型(Model)类并没有要求实现GEF框架中的接口或者继承GEF框架中的类,所以如何实现子模型并且能够与相应的EditPart对应就成了一个问题。但是AbstractEditPart中的refreshChildren()和getModelChildren()方法的组合可以解决这一问题。
首先,我们需要将模型之间的父子关系确定下来,每个模型提供由子对象访问父对象及父对象访问子对象集合的方法。
然后在非叶子模型对象的属性改变监听方法(PropertyChangeListener的propertyChange())中,针对子对象变化的相应代码中加入refreshChildren()。refreshChildren()方法所做的工作是获取模型的父子关系,实例化对应的EditPart对象。其中最关键的就是获取该EditPart对应的模型的父子关系,由于GEF的没有对模型类型提供接口,所以无法直接由模型本身获得。
最后,其获取模型的父子关系的途径就是getModelChildren()方法。所以我们要在模型对应的EditPart类中覆盖AbstractEditPart的getModelChildren()方法,在其中返回该EditPart对应的模型的子对象集合(调用模型本身的获取子对象集合的方法)。