2

如何以编程方式更新 Eclipse 视图?(我想这可能不需要特定于 RSE?)。

背景:我使用Eclipse 的远程系统资源管理器 (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 中,我都没有找到任何刷新视图或文件子系统的方法。我错过了什么?

4

2 回答 2

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构造中替换为该对象。

于 2011-08-12T13:16:47.800 回答
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 的文件系统管理器将检查您的 EFS 特定实现以org.eclipse.core.filesystem.IFileInfo获取更改的修改日期。确保您的虚拟文件系统将返回正确的文件信息

于 2011-08-12T12:12:55.563 回答