很久很久以前

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            34 隨筆 :: 4 文章 :: 17 評論 :: 0 Trackbacks


          現在來討論一下emf所生成的幾個plugin。一般通過ecore模型可以生成三個插件分別是emf模型,emf.edit和emf.editor。
          讓我們現在看模型插件
              對于所有的EPackage,都會生成兩個或三個java package,本別是base package(*),implemention package(*.impl),tool package(*.util)。其中,第三個包是可選的,這取決于生成屬性的設置,默認是生成。包名(*)也是在生成屬性中設置的。
              對于所有EClass,在base package中生成相應的interface,而其java實現則在impl包中,如果一個EClass繼承于另一個EClass,那么生成的interface和implemention都繼承于相應的超類的interface和implemention。如果這個類有多個超類,那么在eSuperTypes中的第一個class將作為主超類(primary supertype)。對于這個子類的實現它將繼承主超類的實現,并且實現其他超類接口中的方法。
              對于Feature,getter和setter方法在類和接口中被定義。如果一個一個feature(成員變量)不是volatile,那么它的值會被存儲在一個量值(field)中。如果一個feature是只讀的,那么只生成它對應的getter方法。對于多值屬性一般使用EList表示,而單值就用那個屬性的類型表示。EList的類型取決于模型的約束,例如,一個non-containment reference將會使用EObjectWithInverseResolvingEList,對于一個containment reference將會使用EObjectContainmentWithInverseEList表示。
              對于Operation,在包含類(containing class)的接口中生成一個公共方法標簽,在對應的實現中生成實現骨架。
              對于DataType,其中EEnum產生于一個繼承了org.eclipse.common.util.AbstractEnumerator的實現。對于其他的EDataType,是沒有接口和實現生成的,它們的實例化類就是直接使用了EAttribute的類型。
          再來看看edit插件:
              對于edit插件provider package中的所有類都有相應的ItemProviders類生成。更進一步,對于整個插件有一個EMFPluginClass生成。ItemProvider類繼承于org.eclipse.emf.edit.provider.ItemProviderAdaptor,用于適配模型中相應的EObject(所有emf類的基類)。當模型對象由于fireNotifyChanged()改變,ItemProvider會傳送相應的通知,并過濾其他的。當你生成插件時,你可以控制哪些通知被過濾。
              ItemProvider也管理屬性描述(property descriptors)對于所有的featur of the class,通過getImage和getText方法來管理類的icon和descrition。
              對于所有的ItemProvider都有一個ItemProviderAdaptorFactory。
          最后時editor插件:
              對于所有的模型都會再presentation package中生成三個類。
               一個多頁編輯器,它給模型創建幾個不同的jface viewer,包含一個TreeViewer,使用edit插件中的ItemProvider作為這個treeviewer的content和label的provider。這個editor還創建outline和property來顯示在viewer中選中對象的屬性。
               一個ActionBarContributor,它被用于對編輯器視圖中選中的item所創建的context menu添加選項。
               最后是一個向導,允許你創建一個包含模型對象的一個實例的資源(resource)。

             

           

          posted on 2006-02-19 20:46 Long Long Ago 閱讀(703) 評論(0)  編輯  收藏 所屬分類: EMFEclipse

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 离岛区| 凤山县| 仁化县| 买车| 阿坝县| 东港市| 赫章县| 三原县| 阿拉善右旗| 安徽省| 台江县| 顺义区| 通化县| 舒兰市| 普陀区| 泰州市| 锡林郭勒盟| 方城县| 益阳市| 于都县| 大石桥市| 东乌珠穆沁旗| 朔州市| 乳源| 洞口县| 石渠县| 鸡西市| 宁晋县| 贵州省| 江阴市| 都江堰市| 济阳县| 任丘市| 云阳县| 容城县| 七台河市| 泸州市| 富宁县| 泰来县| 兰西县| 上虞市|