如何以编程方式更新Eclipse视图? (我想这可能不需要特定于RSE?)。
背景:我对Eclipse使用Remote System Explorer (RSE),通过SSH执行远程命令来做一些事情,这会在远程主机上创建新文件。我意识到远程系统视图中的SFTP文件列表不会自动更新以显示新创建的文件。
到目前为止,我已经设法获得相关视图,如下所示:
IWorkbench workbench = PlatformUI.getWorkbench();
IViewRegistry viewReg = workbench.getViewRegistry();
IViewDescriptor[] views = viewReg.getViews();
for (IViewDescriptor view : views) {
String viewID = view.getId();
System.out.println("View ID: " + viewID);
if (viewID.equals("org.eclipse.rse.ui.view.systemView")) {
// Do something with the view here
}
}
...并且可能做一些RSE特定的事情,我试着抓住RemoteFileSubSystem:
IRemoteFileSubSystem rfss = RemoteFileUtility.getFileSubSystem(HPCUtils.getApplication().getHPCHost());
...但是在ViewDescriptor对象和FileSubSystem中都没有找到任何刷新视图或文件子系统的方法。我错过了什么?
答案 0 :(得分:2)
您是否想要刷新您构建的容器? IOW,你写的一个扩展org.eclipse.rse.core.subsystems.AbstractResource
的课程?
如果是这样,请尝试此代码......
ISystemRegistry registry = SystemStartHere.getSystemRegistry();
SystemResourceChangeEvent event = new SystemResourceChangeEvent(this,
ISystemResourceChangeEvents.EVENT_REFRESH, yoursubsystem);
registry.fireEvent(event);
如果您不在自己的资源容器中,但是您知道资源容器的对象,请将this
构造中的SystemResourceChangeEvent
替换为该对象。
答案 1 :(得分:1)
我不熟悉RSE,但AFAIK使用虚拟文件系统。这意味着可以通过普通的Resource-API完成刷新,例如:
IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path("path/to/theparent/folder/on/remote/system"));
folder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
Eclipse的Filesystem管理器将检查您的EFS特定的org.eclipse.core.filesystem.IFileInfo
实现是否有更改的修改日期。确保您的虚拟文件系统将返回正确的文件信息