/** * <copyright> * * Copyright (c) 2007, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM - Initial API and implementation * * </copyright> * * $Id: UnwrappingSelectionProvider.java,v 1.2 2009/01/21 05:26:08 davidms Exp $ */ package net.enilink.komma.edit.ui.provider; import java.util.List; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import net.enilink.komma.common.util.UniqueExtensibleList; import net.enilink.komma.edit.domain.AdapterFactoryEditingDomain; public class UnwrappingSelectionProvider implements ISelectionProvider { protected ISelection selection; protected List<ISelectionChangedListener> listeners = new UniqueExtensibleList.FastCompare<ISelectionChangedListener>(); protected ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { setSelection(event.getSelection()); } }; public UnwrappingSelectionProvider(ISelectionProvider selectionProvider) { selectionProvider.addSelectionChangedListener(selectionChangedListener); setSelection(selectionProvider.getSelection()); } public void addSelectionChangedListener(ISelectionChangedListener listener) { listeners.add(listener); } public ISelection getSelection() { return selection; } public void removeSelectionChangedListener( ISelectionChangedListener listener) { listeners.remove(listener); } public void setSelection(ISelection selection) { if (selection instanceof IStructuredSelection) { Object[] objects = ((IStructuredSelection) selection).toArray(); for (int i = 0; i < objects.length; ++i) { objects[i] = unwrap(objects[i]); } this.selection = new StructuredSelection(objects); } else { this.selection = selection; } fireSelectionChanged(); } protected Object unwrap(Object object) { return AdapterFactoryEditingDomain.unwrap(object); } protected void fireSelectionChanged() { for (ISelectionChangedListener selectionChangedListener : listeners) { selectionChangedListener .selectionChanged(new SelectionChangedEvent(this, selection)); } } }