Implementierung von Multiplexing-Komponenten

Um in einem Multiplexer verwendet zu werden, müssen Site-Schnittstellen eine alternative Standardimplementierung im Bereich des org.eclipse.ui.part.SiteMultiplexerInitializer anmelden. Da dadurch der Bereich der Site erweitert wird, hat die spezifischere Multiplexer-Version Priorität vor der Standardversion, wenn sie in einem Multiplexer verwendet wird.

Eine multiplexte Komponente verwendet nahezu immer folgendes Muster:
  1. Implementieren der Lebenszyklusschnittstelle 'INestedComponent';
  2. Aufnahme eines IMultiplexer in ihren Konstruktor und dessen Verwendung für den Zugriff auf die gemeinsam genutzte Version ihrer Schnittstelle;
  3. Speichern des Abschnittstatus;
  4. Verfolgung von Statusänderungen im untergeordneten Element und entsprechende Aktualisierung des gespeicherten Status;
  5. Jedesmal, wenn die Komponente aktiviert wird, sollte sie den gespeicherten Status an die gemeinsam genutzte Schnittstelle in dem Multiplexer weiterleiten;
  6. Während die Komponente aktiv ist, sollte sie Statusänderungen direkt an an die gemeinsam genutzte Schnittstelle weiterleiten.
Das folgende Beispiel zeigt den Code, der durch die Workbench verwendet wird, um die Schnittstelle ISelectionHandler mit ChildSelectionHandler zu multiplexen.
/**
 * Multiplexte Version der Schnittstelle ISelectionHandler
 *
 * @Ab 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;        
        // Zugriff auf die gemeinsam genutzte ISelectionHandler, die multiplext wird (wir sollten sie        
        // nur ändern, wenn wir das aktive untergeordnete Element sind)        
        this.parent = (ISelectionHandler)
            mplex.getSharedComponents().getComponent(ISelectionHandler.class);        
                
        // Setzen des ursprünglichen Status (die ursprüngliche Auswahl des Abschnitts ist Null        
        // bis er ausdrücklich gesetzt wird).        
    }        

    public IMultiplexer getMultiplexer() {        
        // Rückgabe des Multiplexers, der erstellt wurde, mit        
        return multiplexer;        
    }

    public void activate() {        
        // Weiterleitung unserer gespeicherten Auswahl an die gemeinsam genutzte Schnittstelle        
        parent.setSelection(selection);        
        isActive = true;        
    }        
            
    public void deactivate() {        
        isActive = false;        
    }        

    public void setSelection(ISelection newSelection) {        
        // Erinnern Sie sich an die neue Auswahl des untergeordneten Elements        
        selection = newSelection;        
        if (isActive) {        
             // Wenn wir aktiv sind, leiten wir die Auswahl direkt an die gemeinsam
             // genutzte Schnittstelle weiter        
             parent.setSelection(newSelection);        
        }        
    }        
}        
Hier ist das Formatierungssteuerzeichen des zugeordneten Erweiterungspunkts für 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>        
Screenshot der Sicht 'TestComposite'