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