我已经加载了一个带有uml图的xmi文件。结果我得到了一个org.eclipse.uml2.uml.Package。
现在我想以编程方式将其转换为Ecore(ePackage)。
我已经从org.eclipse.uml2.uml.util.UMLUtil看了一下UML2EcoreConverter。但它的转换方法对我来说并不清楚。
答案 0 :(得分:5)
不要直接进入UML2EcoreConverter,而是看看
org.eclipse.uml2.uml.util.UMLUtil.convertToEcore(Package,Map)
它需要一个包和一个选项图,并返回转换后的EPackage。选项映射可以从UMLUtil.UML2EcoreConverter.OPTION __ *作为键提供选项。可能的值为UMLUtil.OPTION_ DISCARD / OPTION _IGNORE / OPTION_ PROCESS / OPTION _REPORT。所有选项均默认为OPTION__IGNORE。
这些选项中的大部分用于处理UML2类图的概念,这些概念没有完全映射到Ecore,因此您可以控制它们的处理方式。
对于扩展功能映射(子集/联合,重新定义...),请参阅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(...)
答案 1 :(得分:-1)
您只能将一种方式从Ecore转换为UML。