Eclipse:如何以编程方式将UML转换为ecore

use*_*115 2 uml eclipse-emf eclipse-emf-ecore

我已经用uml图加载了xmi文件。结果,我得到一个org.eclipse.uml2.uml.Package。

现在,我想以编程方式将其转换为Ecore(ePackage)。

我已经看过org.eclipse.uml2.uml.util.UMLUtil中的UML2EcoreConverter。但这对我来说尚不清楚转换方法。

Car*_*ten 6

与其直接使用UML2EcoreConverter,不如看看

org.eclipse.uml2.uml.util.UMLUtil.convertToEcore(数据包,地图)

它带有一个包和一个选项图,并返回转换后的EPackage。可以将UMLUtil.UML2EcoreConverter.OPTION __ *中的选项作为键提供给选项映射。可能的值为UMLUtil.OPTION_ DISCARD / OPTION _IGNORE / OPTION_ PROCESS / OPTION _REPORT。所有选项默认为OPTION__IGNORE。

其中大多数选项用于处理未清晰映射到Ecore的UML2类图的概念,因此您可以控制应如何处理它们。

有关扩展功能映射(子集/联合,重新定义...),请参见OPTION_ REDEFINING *,OPTION_ SUBSETTING *,OPTION__UNION_PROPERTIES,OPTION_ DUPLICATE *。可以将所有这些都设置为OPTION_PROCESS。

您可能要禁用的一个选项是OPTION__SUPER_CLASS_ORDER。这将按字母顺序重新排序概括和接口实现,当您要继承特定的超级实现时,这可能会引起实现问题。另一个是OPTION__CAMEL_CASE_NAMES,它将处理类和要素名称以强制采用严格的驼峰式案例方案。这仅在您的UML工件没有有效的Java名称的情况下才有意义。只需将它们设置为OPTION_IGNORE,或者将其更改为OPTION_REPORT,以查看它们将在何处进行更改。

反向还有一个convertFromEcore(...)。

如果您想更好地了解UML2EcoreConverter的内部工作原理:它基本上是一个遍历UML模型的简单递归访问者,将每个工件转换为其等效的Ecore并进行一些清理。它扩展了UMLSwitch来处理不同的元类。因此,例如要查看UML属性如何转换为EStructuralFeature,请查看caseProperty(...)