package org.projectusus.ui.internal.hotspots.selectionprovider; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; public class DelegatingSelectionProvider implements ISelectionProvider, ISelectionChangedListener { private final Set<ISelectionChangedListener> listeners = new LinkedHashSet<ISelectionChangedListener>(); private ISelectionProvider delegate = new NullSelectionProvider(); public void addSelectionChangedListener( ISelectionChangedListener listener ) { listeners.add( listener ); } public void removeSelectionChangedListener( ISelectionChangedListener listener ) { listeners.remove( listener ); } public void switchTo( ISelectionProvider newDelegate ) { delegate.removeSelectionChangedListener( this ); delegate = newDelegate; delegate.addSelectionChangedListener( this ); fireSelectionChanged(); } public ISelection getSelection() { return delegate.getSelection(); } public void setSelection( ISelection selection ) { delegate.setSelection( selection ); } private void fireSelectionChanged() { fireSelectionChanged( getSelection() ); } protected void fireSelectionChanged( ISelection selection ) { SelectionChangedEvent event = new SelectionChangedEvent( this, selection ); for( ISelectionChangedListener listener : listeners ) { listener.selectionChanged( event ); } } public void selectionChanged( SelectionChangedEvent event ) { fireSelectionChanged( event.getSelection() ); } }