data bindingのTreeViewerのtips

JFace data bindingフレームワークを使うと、モデルの変更と同時にビューも自動的に変更されるようになります。TreeViewerの場合、バインディングしたモデルに、子要素を追加したときにツリーの再構築が行われるのですが、「要素を開いた状態(expanded)」は失われてしまい、全て閉じられたツリーが表示されてしまいます。以下のコードで、「要素を開いた状態(expanded)」を保持して復元うすることができます。elementsが「要素を開いた状態(expanded)」、selectionが「選択状態」を保持・復元しています。
「tree.setRedraw」は画面の描画を一時的に停止して、ちらつきを無くしています。これがないと、ツリーがせわしく開いてしまうのです。
以上、ニーズは少ないかもしれませんがTipsでした。

public void run() {
  try {
    tree.setRedraw(false);
    Object[] elements = treeViewer.getExpandedElements();
    ISelection selection =treeViewer.getSelection();

    ... なんらかのモデルに対する処理、例えば子要素の追加

    treeViewer.setExpandedElements(elements);
    treeViewer.setSelection(selection);
  } finally {
    tree.setRedraw(true);
  }
}