我正在尝试以编程方式加载e4应用程序模型,以便能够迭代模型元素。目前我正面临着这个问题,我不知道如何正确加载它。
鉴于Application.e4xmi
,我尝试使用简单的load an existing model简单地加载文件,但这不会导致填充的资源(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
有人对此有所暗示吗?谢谢!
答案 0 :(得分:2)
您可以使用注入的EModelService
或MApplication
类。
Here是更多信息。
答案 1 :(得分:2)
原因很简单;相应的EMF模型尚未在工作空间中注册。为此,必须在加载模型之前执行以下代码:
import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
ApplicationPackageImpl.init();
下面是一个完整的代码示例,用于在独立的main方法中加载Eclipse 4 Application模型:
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());
}
}