Implementace multiplexních komponent

Rozhraní webu musejí pro použití v multiplexeru registrovat alternativní výchozí implementaci v rozsahu platnosti org.eclipse.ui.part.SiteMultiplexerInitializer. Protože tento rozsah překračuje rozsah webu, převezme více specializovaná verze multiplexeru při použití v multiplexeru prioritu nad výchozí verzí.

Multiplexovaná komponenta má téměř vždy tuto strukturu:
  1. Implementace rozhraní životního cyklu INestedComponent.
  2. Vložení IMultiplexer do jeho konstruktoru a použití tohoto prvku k přístupu ke sdílené verzi jeho rozhraní.
  3. Uložení stavu části.
  4. Naslouchání stavu změn v podřízeném prvku a příslušná aktualizace uloženého stavu.
  5. Vždy při aktivaci komponenty je zapotřebí předat uložený stav sdílenému rozhraní v multiplexeru.
  6. Je-li komponenta aktivní, měla by předávat změny svých stavů přímo sdílenému rozhraní.
Následující příklad uvádí kód použitý v pracovní ploše k multiplexování rozhraní ISelectionHandler s použitím ChildSelectionHandler.
/**
 * Multiplexovaná verze rozhraní ISelectionHandler
 *
 * @od verze 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;        
        // Získává přístup ke sdílenému ISelectionHandler, který bude multiplexován (měli bychom
        // upravovat pouze ve funkci aktivního podřízeného prvku)
        this.parent = (ISelectionHandler)
            mplex.getSharedComponents().getComponent(ISelectionHandler.class);        
                
        // Nastavuje výchozí stav (výchozí výběr součásti je null
        // až do jeho výslovného nastavení).
    }        

    public IMultiplexer getMultiplexer() {        
        // Vrací námi vytvořený multiplexer
        return multiplexer;        
    }

    public void activate() {        
        // Předává náš uložený výběr na sdílené rozhraní
        parent.setSelection(selection);        
        isActive = true;        
    }        
            
    public void deactivate() {        
        isActive = false;        
    }        

    public void setSelection(ISelection newSelection) {        
        // Zaznamenává nový výběr podřízeného prvku
        selection = newSelection;        
        if (isActive) {        
             // Jsme-li aktivní, předává výběr přímo
             // na sdílené rozhraní
             parent.setSelection(newSelection);        
        }        
    }        
}        
Následuje markup přidruženého bodu rozšíření pro 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>
Snímek obrazovky TestCompositeView