Как программно обновить представление Eclipse или файловую подсистему RSE? - PullRequest
2 голосов
/ 12 августа 2011

Как программно обновить представление Eclipse?(Я полагаю, это может не относиться к RSE?).

Справочная информация: я использую Remote System Explorer (RSE) для Eclipse, сделайте некоторые вещи, выполняя удаленные команды через 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 ]

2 голосов
/ 12 августа 2011

Вы хотите обновить созданный вами контейнер? 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 голос
/ 12 августа 2011

Я не знаком с 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 на предмет изменения даты модификации.Убедитесь, что ваша виртуальная файловая система вернет правильную информацию о файле

...