blob: 2cd135389695b891efd88932f2c537b33ffa3a4d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 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.wst.xsd.ui.internal.util;
import java.util.ArrayList;
import java.util.Iterator;
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;
public abstract class SelectionAdapter implements ISelectionProvider
{
protected List listenerList = new ArrayList();
protected ISelection selection = new StructuredSelection();
protected ISelectionProvider eventSource;
public void setEventSource(ISelectionProvider eventSource)
{
this.eventSource = eventSource;
}
public void addSelectionChangedListener(ISelectionChangedListener listener)
{
listenerList.add(listener);
}
public void removeSelectionChangedListener(ISelectionChangedListener listener)
{
listenerList.remove(listener);
}
public ISelection getSelection()
{
return selection;
}
/**
* This method should be specialized to return the correct object that corresponds to the 'other' model
*/
abstract protected Object getObjectForOtherModel(Object object);
public void setSelection(ISelection modelSelection)
{
List otherModelObjectList = new ArrayList();
if (modelSelection instanceof IStructuredSelection)
{
for (Iterator i = ((IStructuredSelection)modelSelection).iterator(); i.hasNext(); )
{
Object modelObject = i.next();
Object otherModelObject = getObjectForOtherModel(modelObject);
if (otherModelObject != null)
{
otherModelObjectList.add(otherModelObject);
}
}
}
StructuredSelection nodeSelection = new StructuredSelection(otherModelObjectList);
selection = nodeSelection;
SelectionChangedEvent event = new SelectionChangedEvent(eventSource != null ? eventSource : this, nodeSelection);
for (Iterator i = listenerList.iterator(); i.hasNext(); )
{
ISelectionChangedListener listener = (ISelectionChangedListener)i.next();
listener.selectionChanged(event);
}
}
}