最近基于gef/emf开发一个图形化工具,用于设计手机屏幕。在加载文件时需要知道文件与之对应的project路径用于和模型相对路径拼接形成绝对路径来加载图片资源。因为ImageData的构造函数接受图片的绝对路径,ImageData(String filename)(底层基于FileInputStream实现,FileInputStream构造函数接受绝对路径)。
最开始用IWorkbench.getActiveWorkbenchWindow().getActivePage().getActiveEditor()拿到当前图形编辑器实例在通过编辑器对象拿到IFileEditorInput最后可以拿到project路径,但是有的时候加载图形编辑文件是,编辑器还没有加载完,经常返回null,所以刚打开文件时所有图片文件不能加载。如何解决这个问题呢。
因为我的gef底层模型用的是emf所以在EditPart中可以通过gef对应的EObject模型拿到编辑的模型文件的路径,就可以拿到project的路径了,代码如下:
public static String getCurrentProjectPath(EObject eobj) {
if(eobj == null) {
return null;
}
org.eclipse.emf.common.util.URI uri = eobj.eResource().getURI();
if(uri == null)
return null;
String path = uri.toString();
IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject(path.split("/")[2]);
return proj.getLocation().toString();
}
用这个方法不用在编辑器加载完成之前就可以拿到编辑的文件路径和当前的runtime project路径。