Implementación de componentes de multiplexación

Para que puedan utilizarse en un multiplexor, las interfaces de sitio tienen que registrar una implementación por omisión alternativa con el ámbito org.eclipse.ui.part.SiteMultiplexerInitializer. Dado que esto amplía el ámbito del sitio, la versión de multiplexor más específica tendrá prioridad sobre la versión por omisión al utilizarse en un multiplexor.

Un componente multiplexado utilizará casi siempre el patrón siguiente:
  1. Implementar la interfaz de ciclo de vida de INestedComponent;
  2. Tomar un IMultiplexer en su constructor y utilizarlo para acceder a la versión compartida de su interfaz;
  3. Almacenar el estado del componente;
  4. Escuchar cambios de estado en el hijo y actualizar el estado almacenado de la manera adecuada;
  5. Cada vez que se activa el componente, debe reenviarse el estado almacenado a la interfaz compartida en el multiplexor;
  6. Mientras el componente esté activo, deben reenviarse los cambios de estado directamente a la interfaz compartida.
El siguiente ejemplo muestra el código utilizado por el entorno de trabajo para multiplexar la interfaz de ISelectionHandler con ChildSelectionHandler.
/**
 * Versión multiplexada de la interfaz de 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;        
        // Obtener acceso al ISelectionHandler compartido que se multiplexa (sólo
        // debe modificarse cuando se es el hijo activo)
        this.parent = (ISelectionHandler)
            mplex.getSharedComponents().getComponent(ISelectionHandler.class);        
                
         // Establecer el estado inicial (la selección inicial del componente será el valor nulo
         // hasta que se establezca de forma explícita).    }        

    public IMultiplexer getMultiplexer() {        
        // Devolver el multiplexor con que fue creado
        return multiplexer;        
    }

    public void activate() {        
        // Reenviar la selección almacenada a la interfaz compartida
        parent.setSelection(selection);        
        isActive = true;        
    }        
            
    public void deactivate() {        
        isActive = false;        
    }        

    public void setSelection(ISelection newSelection) {        
        // Recordar la nueva selección del hijo
        selection = newSelection;        
        if (isActive) {        
             // Si activo, reenviar la selección directamente a la
             // interfaz compartida
             parent.setSelection(newSelection);        
        }        
    }        
}        
Éstos son los códigos del punto de extensión asociado para 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>        
Captura de pantalla de TestCompositeView