分类: Java
2011-02-08 19:54:06
这篇文章主要介绍EPackage和EFactory。
相互关联的EClass和EDataType,被放到同一个EPackage里。
换句话说,同一个Application,所有的EClass和EDataType将放到同一个EPackage里。
而每个EPackage里还会有一个相应的EFactory类。用来生成在EPackage里的Eclass和EDataType。
一个Ecore模型被序列化时,它的根节点就是EPackage。例如:
...
一个EPackage是有name属性的,因为它继承于ENamedElement。同时它通过eFactoryInstance,可以取得EFactory。
一个EPackage可以指定一个父Package,通过eSuperPackage,可以得到父Package。
同时又可以指定多个子package,通过eSubpackages,可以取得所有得子package。
在EPackage里对应的方法如下:
EFactory getEFactoryInstance()
EPackage getESuperPackage()
EList
EPackage里还可以定义EClassifer,通过eClassifiers取得所有定义了的EClassifier。图形稍微有点Bug,关系说明反了。
方法如下:
EList
还可以通过EClassifier的name取得EClassifier
EClassifier getEClassifier(String name)
而在EFactory里可以通过ePackage来取得EPackage。
方法是 EPackage getEPackage()
这时稍微考虑一下,你可能有疑问吧,到底是先用EPackage取得EFactory,还是先根据EFactory取得EPackage呢。
因为EFactoy是可以生成EPackage里的所有EClass的。
其实先后关系是根据Eclipse的Plugin扩展点来决定的。
是先定义EPackage的。通过扩展点
它可以指定一个子节点
uri和class等,这个class就是EPackage的类名。
通过
取得EPackage类名,在classLoad进来,取得instance。当然就可以生成EFactory实例了。
其他的EClass和EDataType,以后就可以被EFactory实例生成了·