| /******************************************************************************* |
| * Copyright (c) 2007 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 Corporation - initial API and implementation |
| ******************************************************************************/ |
| |
| package org.eclipse.ui.internal; |
| |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.ListenerList; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.ui.ISelectionListener; |
| import org.eclipse.ui.ISelectionService; |
| import org.eclipse.ui.services.IDisposable; |
| |
| /** |
| * |
| */ |
| public class SlaveSelectionService implements ISelectionService, IDisposable { |
| |
| private ListenerList postListeners = new ListenerList(ListenerList.IDENTITY); |
| private ListenerList listeners = new ListenerList(ListenerList.IDENTITY); |
| private Map listenersToPartId = new HashMap(); |
| private Map postListenersToPartId = new HashMap(); |
| |
| private ISelectionService parentSelectionService; |
| |
| /** |
| * @param parentSelectionService |
| */ |
| public SlaveSelectionService(ISelectionService parentSelectionService) { |
| if (parentSelectionService == null) { |
| throw new IllegalArgumentException( |
| "The parent selection service cannot be null"); //$NON-NLS-1$ |
| } |
| this.parentSelectionService = parentSelectionService; |
| } |
| |
| public void addPostSelectionListener(ISelectionListener listener) { |
| postListeners.add(listener); |
| parentSelectionService.addPostSelectionListener(listener); |
| } |
| |
| public void addPostSelectionListener(String partId, |
| ISelectionListener listener) { |
| listenersToPartId.put(listener, partId); |
| parentSelectionService.addPostSelectionListener(partId, listener); |
| } |
| |
| public void addSelectionListener(ISelectionListener listener) { |
| listeners.add(listener); |
| parentSelectionService.addSelectionListener(listener); |
| } |
| |
| public void addSelectionListener(String partId, ISelectionListener listener) { |
| postListenersToPartId.put(listener, partId); |
| parentSelectionService.addPostSelectionListener(partId, listener); |
| } |
| |
| public ISelection getSelection() { |
| return parentSelectionService.getSelection(); |
| } |
| |
| public ISelection getSelection(String partId) { |
| return parentSelectionService.getSelection(partId); |
| } |
| |
| public void removePostSelectionListener(ISelectionListener listener) { |
| postListeners.remove(listener); |
| parentSelectionService.removePostSelectionListener(listener); |
| } |
| |
| public void removePostSelectionListener(String partId, |
| ISelectionListener listener) { |
| postListenersToPartId.remove(listener); |
| parentSelectionService.removePostSelectionListener(partId, listener); |
| } |
| |
| public void removeSelectionListener(ISelectionListener listener) { |
| listeners.remove(listener); |
| parentSelectionService.removeSelectionListener(listener); |
| } |
| |
| public void removeSelectionListener(String partId, |
| ISelectionListener listener) { |
| listenersToPartId.remove(listener); |
| parentSelectionService.removeSelectionListener(partId, listener); |
| } |
| |
| public void dispose() { |
| Object list[] = listeners.getListeners(); |
| |
| for (int i = 0; i < list.length; i++) { |
| parentSelectionService |
| .removeSelectionListener((ISelectionListener) list[i]); |
| } |
| listeners.clear(); |
| |
| list = postListeners.getListeners(); |
| for (int i = 0; i < list.length; i++) { |
| parentSelectionService |
| .removePostSelectionListener((ISelectionListener) list[i]); |
| } |
| postListeners.clear(); |
| |
| Iterator i = listenersToPartId.keySet().iterator(); |
| while (i.hasNext()) { |
| Object listener = i.next(); |
| parentSelectionService.removeSelectionListener( |
| (String) listenersToPartId.get(listener), |
| (ISelectionListener) listener); |
| } |
| listenersToPartId.clear(); |
| |
| i = postListenersToPartId.keySet().iterator(); |
| while (i.hasNext()) { |
| Object listener = i.next(); |
| parentSelectionService.removePostSelectionListener( |
| (String) postListenersToPartId.get(listener), |
| (ISelectionListener) listener); |
| } |
| postListenersToPartId.clear(); |
| } |
| } |