EMF的一些总结(1)——关于Packages and Factories

Packages and Factories
package和factory类帮助你访问模型的metadata,或者创建模型的实例。
通过package可以轻松的获得模型的EClass对象,如:
None.gif EClass purchaseOrderClass  =  epo2Package.getPurchaseORder();
例外还有一种方法也可以通过package类对象获得model的EClass对象,如:
None.gif EClass purchaseOrderClass  =
None.gif  (EClass)epo2Package.getEClassifier(
" PurchaseOrder " );
可以通过类似的方法访问模型的属性、引用还有其他更多的信息。
tip: EEnum是EDataType的子类
获得package对象的方法:
1.通过加载外部.ecore文件,从加载的Resource对象中获取,如:
None.gif ResourceSet resourceSet  =   new  ResourceSetImpl();
None.gifURI fileURI 
=  URI.createURI( " dot.gif/ExtendedPO2.ecore " );
None.gifResource resource 
=  resourceSet.getResource(fileURI,  true );
None.gifEPackage epo2Package 
=  (EPackage)resource.getContents().get( 0 );
None.gif
2.通过package registry来访问,package registry提供了namespace URIs到EPackage的映射关系。如果是插件方式的开发,通过定义扩展点可以在插件加载的时候把package对象注册到registry中,如:
None.gif < extension point = " org.eclipse.emf.ecore.generated_package " >
None.gif  
< package
None.gif     uri 
=   " http:///com/example/epo2.ecore "
None.gif     
class   =   " com.example.epo2.EPO2Package "   />
None.gif
</ extension >
None.gif
如果不是插件开发方式,可以功过构造函数来将package注册到Registry实例中,如:
ExpandedBlockStart.gif ContractedBlock.gif protected  EPackageImpl(String packageURI, EFactory factory)  dot.gif {
InBlock.gif  
super();
InBlock.gif  Registry.INSTANCE.put(packageURI, 
this);
InBlock.gif  dot.gif
ExpandedBlockEnd.gif}

None.gif
注册后可以功过下面代码获得package对象:
None.gif EPackage.Registry.INSTANCE.getEPackage() 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值