如何以编程方式刷新Eclipse视图或RSE文件子系统?

时间:2011-08-12 11:21:18

标签: java eclipse-plugin eclipse-rcp eclipse-rse

如何以编程方式更新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中都没有找到任何刷新视图或文件子系统的方法。我错过了什么?

2 个答案:

答案 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实现是否有更改的修改日期。确保您的虚拟文件系统将返回正确的文件信息