0

モデル要素を反復できるようにするために、プログラムで e4 アプリケーション モデルをロードしようとしています。現在、正しくロードする方法がわからないという問題に直面しています。

単純なロードを使用して既存のモデルApplication.e4xmiを単純にロードしようとしたが、データが取り込まれたリソース (null) にはなりませんでした。

その後、 について知りましたがorg.eclipse.e4.tools.emf.ui.common.XMIModelResource、次のコードを使用してモデルをインスタンス化することはできません

URI uriNew = URI.createURI("file:///Users/marco/github-clones/osara/at.osara.rcp/Application.e4xmi");
XMIModelResource xmimr = new XMIModelResource(uriNew);

私が得るように、Package with uri 'http://www.eclipse.org/ui/2010/UIModel/application' not found.このecoreはすでにインポートされていますorg.eclipse.e4.ui.model.workbench

誰もこれについてヒントを得ましたか?ありがとう!

4

2 に答える 2

2

理由は非常に単純です。それぞれの EMF モデルはまだワークスペースに登録されていません。そのためには、モデルをロードする前に次のコードを実行する必要があります。

import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
ApplicationPackageImpl.init();

スタンドアロンのメイン メソッドで Eclipse 4 アプリケーション モデルをロードするための完全なコード サンプルを次に示します。

import org.eclipse.e4.ui.internal.workbench.E4XMIResourceFactory;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

public class LoadAppModel {

    private static ResourceSet resourceSet = new ResourceSetImpl();

    public static void main(String[] args) {
        ApplicationPackageImpl.init();
        URI uri = URI
                .createURI("file:///Users/marco/git/pharmacy_at/at.medevit.ecrit.pharmacy_at.application/Application.e4xmi");

        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
                .put("e4xmi", new E4XMIResourceFactory());

        Resource res = resourceSet.getResource(uri, true);
        MApplication app = (MApplication) res.getContents().get(0);
        System.out.println(app.getElementId());
    }

}
于 2014-01-10T08:26:32.020 に答える
2

注入されたEModelServiceまたはMApplicationクラスを使用できます。 ここに詳細があります。

于 2013-02-17T08:52:02.187 に答える