2

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

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

我已经查看了来自 org.eclipse.uml2.uml.util.UMLUtil 的 UML2EcoreConverter。但我不清楚它的转换方法。

4

2 回答 2

6

而不是直接去UML2EcoreConverter,看看

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

它接受一个包和一个选项 Map 并返回转换后的 EPackage(s)。可以将来自 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(...)

于 2012-06-15T09:03:44.170 回答
-1

您只能将一种方式从 Ecore 转换为 UML。

于 2012-06-13T22:08:59.423 回答