Implementowanie komponentów multipleksujących

Interfejsy serwisów muszą zarejestrować alternatywną implementację domyślną w zasięgu obiektu org.eclipse.ui.part.SiteMultiplexerInitializer, aby mogły zostać użyte w multiplekserze. Ponieważ rozszerza to zasięg serwisu, szczegółowiej zdefiniowane wersje multipleksera będą miały wyższy priorytet podczas stosowania w multiplekserze niż wersja domyślna.

Multipleksowany komponent w znacznej większości przypadków działa według następującego wzorca:
  1. Implementowanie interfejsu cyklu życia INestedComponent.
  2. Pobranie obiektu IMultiplexer do własnego konstruktora oraz uzyskanie za jego pomocą dostępu do współużytkowanej wersji interfejsu.
  3. Zapisanie stanu części.
  4. Nasłuchiwanie zmian stanu elementu potomnego i aktualizowanie przechowywanego stanu.
  5. Przekazywanie przechowywanego stanu do współużytkowanego interfejsu w multiplekserze przy każdym aktywowaniu komponentu.
  6. Przekazywanie zmian stanu bezpośrednio do współużytkowanego interfejsu, kiedy dany komponent jest aktywny.
Poniższy przykład zawiera kod używany przez środowisko robocze do multipleksowania interfejsu ISelectionHandler za pomocą właściwości ChildSelectionHandler.
/**
* Multipleksowana wersja interfejsu 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;        
        // Uzyskanie dostępu do współużytkowanego interfejsu ISelectionHandler, który jest multipleksowany (można
        // go modyfikować tylko z poziomu aktywnego elementu potomnego)
        this.parent = (ISelectionHandler)
            mplex.getSharedComponents().getComponent(ISelectionHandler.class);        
                
        // Ustawienie stanu początkowego (początkowy wybór części będzie pusty,
        // dopóki nie zostanie jawnie określony)
    }        

    public IMultiplexer getMultiplexer() {        
        // Zwrot multipleksera, który utworzył element
        return multiplexer;        
    }

    public void activate() {        
        // Przekazanie przechowywanego wyboru do współużytkowanego interfejsu
        parent.setSelection(selection);        
        isActive = true;        
    }        
            
    public void deactivate() {        
        isActive = false;        
    }        

    public void setSelection(ISelection newSelection) {        
        // Zapamiętanie nowego wyboru elementu potomnego
        selection = newSelection;        
        if (isActive) {        
             // Przekazanie wyboru bezpośrednio do współużytkowanego interfejsu
             // w razie aktywności
             parent.setSelection(newSelection);        
        }        
    }        
}        
Poniżej pokazano powiązany język znaczników punktu rozszerzenia dla właściwości 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>
Widok TestCompositeView