多重化コンポーネントの実装

マルチプレクサーで使用するためには、サイト・インターフェースは、org.eclipse.ui.part.SiteMultiplexerInitializer のスコープで代替のデフォルト実装を登録する必要があります。 これによりサイトのスコープが拡張されるため、マルチプレクサーで使用される場合には、より特定のマルチプレクサー・バージョンがデフォルトのバージョンよりも優先されます。

多重化コンポーネントは、ほとんど常時、以下のパターンを使用します。
  1. INestedComponent ライフ・サイクル・インターフェースを実装する。
  2. そのコンストラクターに IMultiplexer を取り込み、それを使用してそのインターフェースの共用バージョンにアクセスする。
  3. パーツの状態を保管する。
  4. 子の状態変更を listen して、保管された状態を適切に更新する。
  5. コンポーネントが活動化されるたびに、保管された状態をマルチプレクサーの共用インターフェースに転送する。
  6. コンポーネントがアクティブである間は、直接、状態変更を共用インターフェースに転送する。
以下の例は、ChildSelectionHandler で ISelectionHandler インターフェースを多重化するワークベンチにより使用されるコードを示しています。
/**
 * ISelectionHandler インターフェースの多重化
バージョン
 *
 * @since 3.1
 */
public class ChildSelectionHandler implements ISelectionHandler, INestedComponent {

    private ISelectionHandler parent;
    private ISelection selection;
    private boolean isActive = false;
    private IMultiplexer multiplexer;

    public ChildSelectionHandler(IMultiplexer mplex) throws DependencyException {
        this.multiplexer = mplex;        
        //多重化された共用の ISelectionHandler
にアクセスします
        // (アクティブな子の場合にのみ変更する必要が
あります)
        this.parent = (ISelectionHandler)
            mplex.getSharedComponents().getComponent(ISelectionHandler.class);        
                
        // 初期状態を設定します (パーツの初期選択
は、明示的に
        // 設定されるまでヌルです)。    }        

    public IMultiplexer getMultiplexer() {        
        // 作成したマルチプレクサーを戻します
        return multiplexer;        
    }

    public void activate() {        
        // 保管された選択を共用インターフェースに
転送します
        parent.setSelection(selection);        
        isActive = true;        
    }        
            
    public void deactivate() {        
        isActive = false;        
    }        

    public void setSelection(ISelection newSelection) {        
        // 子の新規選択を記憶します
        selection = newSelection;        
        if (isActive) {        
             // アクティブの場合、選択を直接共用
インターフェースに
             // 転送します
             parent.setSelection(newSelection);        
        }        
    }        
}        
以下は、ChildSelectionHandler 用の関連した拡張ポイント・マークアップです。
<extension point="org.eclipse.core.component.types">        
    <component        
            implementation="org.eclipse.ui.internal.part.services.ChildSelectionHandler"        
            interface="org.eclipse.ui.part.services.ISelectionHandler"        
            singleton="false"        
            initializer="org.eclipse.ui.part.SiteMultiplexerInitializer"/>        
 </extension>        
TestCompositeView のスクリーン・ショット