Eclipse 建模框架 (EMF):如何从 Magicdraw UML2 导出中获取 DomainModel
我想使用 EMF 进行代码生成,因此我编写了一些方法来加载我自己生成的 UML2 文件。这适用于以下代码:
protected void registerResources() {
resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
Map<URI, URI> uriMap = resourceSet.getURIConverter().getURIMap();
String resourcesJarPath = Thread.currentThread().getContextClassLoader().getResource("org.eclipse.uml2.uml.resources_2.2.0.v200805131030").toExternalForm();
URI baseUri = URI.createURI(resourcesJarPath);
uriMap.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP), baseUri.appendSegment("libraries").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.METAMODELS_PATHMAP), baseUri.appendSegment("metamodels").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.PROFILES_PATHMAP), baseUri.appendSegment("profiles").appendSegment(""));
}
public Package loadPackage(URI uri) {
Resource resource = resourceSet.getResource(uri, true);
return (Package) EcoreUtil.getObjectByType(resource.getContents(), UMLPackage.Literals.PACKAGE);
}
但现在,我想将 Magicdraw-Domainmodel 导出到 EMF UML2 XMI,在那里我得到 5 个文件。 1 个project.uml 和 4 个配置文件(UML_Standard_Profile.MagicDraw_Profile.DSL_Customization.profile.uml、UML_Standard_Profile.MagicDraw_Profile.profile.uml、UML_Standard_Profile.UML_Standard_Profile.profile.uml、UML_Standard_Profile.Validation_Profile.profile.uml)。 因此,如果我想使用 loadPackageclass 加载 project.uml,我的 Package 为 null。
有谁有示例应用程序,如何加载 MagicDraw 导出的 UML DomainModel?
多米尼克
I want to use the EMF for Code Generation, so I wrote some methods to load my UML2 File which I generated myself. This works fine with the following code:
protected void registerResources() {
resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
Map<URI, URI> uriMap = resourceSet.getURIConverter().getURIMap();
String resourcesJarPath = Thread.currentThread().getContextClassLoader().getResource("org.eclipse.uml2.uml.resources_2.2.0.v200805131030").toExternalForm();
URI baseUri = URI.createURI(resourcesJarPath);
uriMap.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP), baseUri.appendSegment("libraries").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.METAMODELS_PATHMAP), baseUri.appendSegment("metamodels").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.PROFILES_PATHMAP), baseUri.appendSegment("profiles").appendSegment(""));
}
public Package loadPackage(URI uri) {
Resource resource = resourceSet.getResource(uri, true);
return (Package) EcoreUtil.getObjectByType(resource.getContents(), UMLPackage.Literals.PACKAGE);
}
But now, I wanted to export an Magicdraw-Domainmodel to an EMF UML2 XMI, and there I get 5 Files. One project.uml and 4 Profile Files (UML_Standard_Profile.MagicDraw_Profile.DSL_Customization.profile.uml, UML_Standard_Profile.MagicDraw_Profile.profile.uml, UML_Standard_Profile.UML_Standard_Profile.profile.uml, UML_Standard_Profile.Validation_Profile.profile.uml).
So if I want to load the project.uml with the loadPackageclass, my Package is null.
Does anyone have an example app, how to load an MagicDraw-exported UML DomainModel?
Dominik
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您能否向我们展示 MagicDraw(如 XMI)中的 UML 模型的前几行?在这里,对于某些模型,我需要额外的内容
来加载这些模型(诚然,这些模型来自 Eclipse 3.4.2 中的旧 MD 版本)。
Could you show us the first few lines of the UML model from MagicDraw (as XMI)? Here, for some models I need an additional
to load those models (which admittedly come from an older MD version, in Eclipse 3.4.2).
来源: http://dev.eclipse.org/ newslists/news.eclipse.modeling.mdt.uml2/msg01517.html
对于 EMF UML:
导入 org.eclipse.uml2.uml.util.UMLUtil;
Profile myProfile = UMLUtil.getProfile(MyProfilePackage.eINSTANCE, ... )
在电子邮件链中我发现了这一点,他们还展示了如何将其挂钩到模型 - 这应该对您也有帮助。
提问者似乎没有明白,但它对我来说很有意义,并且类似于您用于 IBM RSA 的方法。
IBM RSA:
File f = new File(...);
配置文件 p = UMLModeler.openProfile(f.getAbsolutePath());
Source: http://dev.eclipse.org/newslists/news.eclipse.modeling.mdt.uml2/msg01517.html
For EMF UML:
import org.eclipse.uml2.uml.util.UMLUtil;
Profile myProfile = UMLUtil.getProfile(MyProfilePackage.eINSTANCE, ... )
In the email chain I found on this they also showed how to hook it to a model - which should be helpful to you as well.
The question asker did not seem to get it, but it makes sense to me and is similar to the methods you use for IBM RSA.
IBM RSA:
File f = new File(...);
Profile p = UMLModeler.openProfile(f.getAbsolutePath());