2

コード生成に 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 をロードする場合、パッケージは null です。

MagicDraw でエクスポートされた UML DomainModel をロードする方法について、サンプル アプリを持っている人はいますか?

ドミニク

4

2 に答える 2

1

ソース: http://dev.eclipse.org/newslists/news.eclipse.modeling.mdt.uml2/msg01517.html

EMF UML の場合:

org.eclipse.uml2.uml.util.UMLUtil をインポートします。プロファイル myProfile = UMLUtil.getProfile(MyProfilePackage.eINSTANCE, ... )

私がこれで見つけた一連の電子メールでは、モデルにフックする方法も示されていました.これはあなたにも役立つはずです.

質問者はそれを理解していないようでしたが、私には理にかなっていて、IBM RSA で使用する方法に似ています。

IBM RSA:

ファイル f = 新しいファイル(...); プロファイル p = UMLModeler.openProfile(f.getAbsolutePath());

于 2009-09-10T13:41:29.650 に答える