2012-06-13 105 views
2

我已经用uml图加载了一个xmi文件。结果我得到了一个org.eclipse.uml2.uml.Package。Eclipse:如何以编程方式将UML转换为ecore

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

我已经看过org.eclipse.uml2.uml.util.UMLUtil中的UML2EcoreConverter。但它的转换方法对我来说并不明确。

回答

3

而是直接去了UML2EcoreConverter的,看看

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

它需要一个包和地图选项并返回转换的EPackage(s)。选项映射可以从UMLUtil.UML2EcoreConverter.OPTION __ *中作为键的选项提供。可能的值为UMLUtil.OPTION_ DISCARD/OPTION _IGNORE/OPTION_ PROCESS/OPTION _REPORT。所有选项默认为OPTION__IGNORE。

大多数这些选项都是用于处理UML2类图的概念,这些概念不会干净地映射到Ecore,因此您可以控制它们应该如何处理。

对于扩展特征映射(子集/工会,重新定义......),看到OPTION_ 重新定义 *,OPTION_ 子集 *,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(...)

-1

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

相关问题