package eu.etaxonomy.taxeditor.editor;
+import java.util.HashSet;
+import java.util.Set;
+
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.util.SafeRunnable;
*/
public class SimpleSelectionProvider implements ISelectionProvider {
- private ListenerList selectionChangedListeners = new ListenerList();
+ private Set<ISelectionChangedListener> selectionChangedListeners = new HashSet<ISelectionChangedListener>();
private ISelection selection;
private Job job;
* @return a {@link org.eclipse.jface.viewers.ISelection} object.
*/
public ISelection getSelection() {
- if (selection != null)
+ if (selection != null){
return selection;
+ }
// TODO we have to return an empty selection to avoid NPE
// I don't really understand why this was not the case before
return new StructuredSelection();
// cancel previous selection setting
if(job != null){
- job.cancel();
+ if(job.getState() != Job.NONE){
+ job.cancel();
+ }
job = null;
}
display.asyncExec(new Runnable() {
public void run() {
- fireSelectionChanged(selectionChangedEvent);
+ SimpleSelectionProvider.this.fireSelectionChanged(selectionChangedEvent);
}
});
}
private void fireSelectionChanged(final SelectionChangedEvent event) {
- Object[] listeners = selectionChangedListeners.getListeners();
- for (int i = 0; i < listeners.length; ++i) {
- final ISelectionChangedListener l = (ISelectionChangedListener) listeners[i];
+ for (final ISelectionChangedListener listener : selectionChangedListeners) {
SafeRunnable.run(new SafeRunnable() {
public void run() {
- l.selectionChanged(event);
+ listener.selectionChanged(event);
}
});
}