通过ECore创建EMF模型

来源:互联网 发布:小班美工材料投放图片 编辑:程序博客网 时间:2024/06/03 06:47

EMF作为Eclipse中的模型驱动架构(MDA)的框架,提供了非常强大的功能。

而EMF的开发又可以分为两部分,即模型创建与模型使用。本篇文章主要讲解如何创建模型。

假设我们模型如下:

转换到EMF中,他们的关系如下:


我们使用Ecore API来实现这个UML模型。

EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;EClass purchaseOrderClass = ecoreFactory.createEClass();purchaseOrderClass.setName("PurchaseOrder");EAttribute shipTo = ecoreFactory.createEAttribute();shipTo.setName("shipTo");shipTo.setType(ECorePackage.Literals.ESTRING);//使用ECore封装好的类型ESTRINGpurchaseOrderClass.getEStructuralFeatures().add(shipTo);EAttribute billTo = ecoreFactory.createEAttribute();billTo.setName("billTo");billTo.setType(ECorePackage.Literals.ESTRING);purchaseOrderClass.getEStructuralFeatures().add(billTo);EClass itemClass = ecoreFactory.createEClass();itemClass.setName("Item");EAttribute productName = ecoreFactory.createEAttribute();productName.setName("productName");productName.setType(ECorePackage.Literals.ESTRING);itemClass.getEStructuralFeatures().add(productName);EAttribute quantity = ecoreFactory.createEAttribute();quantity.setName("quantity");quantity.setType(ECorePackage.Literals.EINT);itemClass.getEStructuralFeatures().add(quantity);EAttribute price = ecoreFactory.createEAttribute();price.setName("price");price.setType(ECorePackage.Literals.EFLOAT);itemClass.getEStructuralFeatures().add(price);//设置引用EReference items = ecoreFactory.createEReference();items.setName("items");items.setEType(itemClass);//指向EClassitems.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);items.setContainment(true);purchaseOrderClass.getEStructuralFeatures().add(items);//添加到主类//创建packageEPackage poPackage = ecoreFactory.createEPackage();poPackage.setName("po");poPackage.setNsPrefix("po");poPackage.setNsURI(自己定义的地址);poPackage.getEClassifiers().add(purchaseOrderClass);poPackage.getEClassifiers().add(itemClass);
至此,模型创建完毕。如何根据模型定义用戶層,请见下一篇文章

0 0