eclipshine

          Eclipse主題站

          在EMF中為一個對象樹添加統(tǒng)一的事件響應(yīng)

          EMF中進行模型對象通知的時候,有時候不僅僅模型對象改變時需要得到通知,模型對象的子對象(通過Containment關(guān)系包含起來的)發(fā)生改變的時候,也希望能夠得到同樣的通知。簡單的實現(xiàn)方式可以創(chuàng)建一個Adapter,通過遞歸的方式將其注冊在這個模型對象樹的每一個節(jié)點對象上,但是那樣做比較復(fù)雜,要同時處理添加和刪除Adapter的工作。

           

          EMF中提供了變通的方式,可以使用EContentAdapter類來幫助完成這個任務(wù)。如下例所示:

           

                 public class ComponentAdapter extends EContentAdapter {

                        private Component component;

           

                        public void notifyChanged(Notification notification) {

                               super.notifyChanged(notification);

                               System.out.println(notification);

                               refresh();

                        }

           

                        public ComponentAdapter(Component component) {

                               component.eAdapters().add(this);

                        }

           

                        public void removeSelf() {

                               component.eAdapters().remove(this);

                        }

                 }

           

          通過構(gòu)造函數(shù)ComponentAdapter,可以將這個Adapter添加到Component這個模型對象上。當(dāng)Component自身,或者Component的人和子孫節(jié)點發(fā)生改變的時候,notifyChanged都能被調(diào)用,處理接受通知的任務(wù)。
          實際上EContentAdapter不僅僅能夠被添加到一個EObject上,還能夠被添加到Resource甚至ResourceSet上,它都能夠自動的把自身添加到每一個節(jié)點上,以響應(yīng)事件,當(dāng)其被刪除時,它也能夠自動的將其自身從每一個子節(jié)點上刪除。

          posted on 2005-07-29 15:40 Living Not Striving 閱讀(908) 評論(0)  編輯  收藏 所屬分類: EMF

          主站蜘蛛池模板: 遵化市| 双柏县| 巴林左旗| 前郭尔| 余姚市| 增城市| 马关县| 长丰县| 阿城市| 湖口县| 宁阳县| 玉溪市| 内黄县| 射阳县| 玛纳斯县| 内江市| 安庆市| 萨嘎县| 石狮市| 亚东县| 长海县| 泸溪县| 景洪市| 临漳县| 湘潭市| 唐海县| 磐安县| 汕头市| 绥德县| 双江| 当涂县| 汝南县| 新津县| 海南省| 酒泉市| 富宁县| 嘉禾县| 池州市| 安徽省| 北京市| 青神县|