Eclipse Modeling Framework(EMF):如何从Magicdraw UML2导出中获取DomainModel

时间:2009-09-10 09:49:09

标签: java uml eclipse-emf xmi

我想使用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个文件。一个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?

多米尼克

2 个答案:

答案 0 :(得分:3)

你能否向我们展示MagicDraw(作为XMI)的UML模型的前几行?在这里,对于某些型号,我需要额外的

resourceSet.getPackageRegistry().put("http://www.eclipse.org/uml2/2.0.0/UML", UMLPackage.eINSTANCE);

加载这些模型(在Eclipse 3.4.2中肯定来自较旧的MD版本)。

答案 1 :(得分:1)

来源:http://dev.eclipse.org/newslists/news.eclipse.modeling.mdt.uml2/msg01517.html

对于EMF UML

import org.eclipse.uml2.uml.util.UMLUtil; 配置文件myProfile = UMLUtil.getProfile(MyProfilePackage.eINSTANCE,...)

在我发现的电子邮件链中,他们还展示了如何将其挂钩到模型 - 这也应该对您有所帮助。

问题提示者似乎没有得到它,但它对我有意义,并且类似于您用于IBM RSA的方法。

IBM RSA:

文件f =新文件(...); 配置文件p = UMLModeler.openProfile(f.getAbsolutePath());