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

Eclipse:如何以编程方式将UML转换为ecore,uml,eclipse-emf,eclipse-emf-ecore,Uml,Eclipse Emf,Eclipse Emf Ecore,我已经加载了一个带有uml图的xmi文件。因此,我得到了一个org.eclipse.uml2.uml.Package 现在我想通过编程将其转换为Ecore(ePackage) 我已经从org.eclipse.uml2.uml.util.UMLUtil查看了UML2EcoreConverter。但是它的转换方法对我来说并不清楚。从Ecore到UML只能转换一种方式。与其直接使用UML2EcoreConverter,不如看看 org.eclipse.uml2.uml.util.UMLUtil.con

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

现在我想通过编程将其转换为Ecore(ePackage)


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

从Ecore到UML只能转换一种方式。

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

org.eclipse.uml2.uml.util.UMLUtil.convertToEcore(包,映射)

它接受一个包和一个选项映射,并返回转换后的EPackage。选项映射可以作为键从UMLUtil.UML2EcoreConverter.OPTION__*中输入选项。可能的值为UMLUtil.OPTION\u DISCARD/OPTION\u IGNORE/OPTION\u PROCESS/OPTION\u REPORT。所有选项默认为“忽略选项”

这些选项中的大多数用于处理UML2类图的概念,这些概念没有清晰地映射到Ecore,因此您可以控制如何处理它们

有关扩展特征映射(子集/并集、重定义…),请参见选项重新定义*、选项子集*、选项并集属性、选项重复*。将所有这些都设置为OPTION_PROCESS应该可以

您可能要禁用的一个选项是选项超级类顺序。这将按照字母顺序对泛化和接口实现进行重新排序,当您想要继承特定的超级实现时,这可能会引起实现问题。另一个选项是选项\uuuCamel\uCase\uNames,它将处理类和特性名称,以强制执行严格的CAMEL-CASE方案。这仅在UML工件没有有效java名称的情况下才有意义。只需将它们设置为OPTION_IGNORE,或设置为OPTION_REPORT,以查看它们将在何处更改某些内容

反面还有一个convertFromEcore(…)

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