【问题标题】: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(...)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-02-05
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 2018-07-03
        • 2011-09-20
        • 2013-02-09
        相关资源
        最近更新 更多