2011-08-12 9 views
2

プログラムで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); 

独自のリソースコンテナの内側にしていないが、あなたは、リソースコンテナのオブジェクトを知っている場合は、対象とSystemResourceChangeEvent建設中thisを交換してください。

+0

上記の「rfss」オブジェクトを「yoursubsystem」パラメータとして送信し、ISystemResourceChangeEvents.EVENT_REFRESHをISystemResourceChangeEvents.EVENT_REFRESH_SELECTED_PARENTに切り替えた場合、これはトリックですこのイベント(EVENT_REFRESH_SELECTED_PARENT)は非難されています:/ ...それを回避する方法のヒント? –

+0

[javadocの](http://help.eclipse.org/indigo/topic/org.eclipse.rse.doc.isv /reference/api/org/eclipse/rse/core/events/ISystemResourceChangeEvents.html#EVENT_REFRESH_SELECTED_PARENT)は、「自分で選択を取得し、EVENT_REFRESHまたはEVENT_REFRESH_REMOTEを実行する」ことを示します。コードでEVENT_REFRESHイベントが問題なく使用されます。 –

+0

問題は、現在のディレクトリにあるファイルが通常選択されているのに対し、新しいファイルを表示するには親フォルダを更新する必要があるということです。EVENT_REFRESH_SELECTED_PARENTを使用していたのはconv私が今必要としている現在選択されているファイルをつかむ必要はないので、親フォルダを取得するには... –

1

私はRSEに慣れていませんが、AFAIKは仮想ファイルシステムを使用しています。それはさわやかな、通常のリソース-APIを介して行うことができますを意味し、何かのように:エクリプスの

IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path("path/to/theparent/folder/on/remote/system")); 
     folder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); 

ファイルシステムマネージャは、変更変更日のためorg.eclipse.core.filesystem.IFileInfoのあなたのEFS固有の実装をチェックします。仮想ファイルシステムが正しいファイル情報を返すことを確認してください。

+0

奇妙な...私はResourcesPluginを持っていないようです(その名前は-oです)。 –

+0

org.eclipse.core.resourcesに依存関係を追加する必要があります。このバンドルは、リソースの抽象レイヤーを保持します。しかし、これはEFS統合を使用する場合にのみ有効です。このブログの投稿 - > http://tmober.blogspot.com/2007/04/target-management-m6-efs-and-webinar.html –

+0

ああ...私は実際に輸入することができます。私がどれだけ遠くにいるか見ることができます... –

関連する問題