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

您可以使用注入的EModelServiceMApplication类。 这里有更多信息。

于 2013-02-17T08:52:02.187 回答
2

原因很简单;相应的 EMF 模型尚未在工作区中注册。为此,必须在加载模型之前执行以下代码:

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

下面是一个完整的代码示例,用于在独立的 main 方法中加载 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 回答