【问题标题】:Eclipse: how to programmatically convert UML to ecoreEclipse:如何以编程方式将 UML 转换为 ecore
【发布时间】:2012-06-15 17:03:44
【问题描述】:
我已经加载了一个带有 uml 图的 xmi 文件。结果我得到了一个 org.eclipse.uml2.uml.Package。
现在我想以编程方式将其转换为 Ecore (ePackage)。
我已经查看了来自 org.eclipse.uml2.uml.util.UMLUtil 的 UML2EcoreConverter。但我不清楚它的转换方法。
【问题讨论】:
标签:
uml
eclipse-emf
eclipse-emf-ecore
【解决方案1】:
不要直接使用UML2EcoreConverter,而是看一下
org.eclipse.uml2.uml.util.UMLUtil.convertToEcore(包,地图)
它接受一个包和一个选项映射,并返回转换后的 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(...)