ref #8124: rename createTaxonNameDescriptionOperation - continue
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / SimpleSelectionProvider.java
index 31ac83f1e1aa1e68529bb651acdc6b9d4a352334..355b5e4537384e97b18e434f9682eeb04a317321 100644 (file)
@@ -1,17 +1,19 @@
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 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;
@@ -22,6 +24,8 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.widgets.Display;
 
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
+
 /**
  * <p>SimpleSelectionProvider class.</p>
  *
@@ -32,16 +36,18 @@ import org.eclipse.swt.widgets.Display;
  */
 public class SimpleSelectionProvider implements ISelectionProvider {
 
-       private ListenerList selectionChangedListeners = new ListenerList();
+    private static final String SETTING_SELECTION = Messages.SimpleSelectionProvider_SETTING_SELECTION;
+    private Set<ISelectionChangedListener> selectionChangedListeners = new HashSet<ISelectionChangedListener>();
        private ISelection selection;
        private Job job;
-       
+
        /*
         * (non-Javadoc)
         * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
         */
        /** {@inheritDoc} */
-       public void addSelectionChangedListener(
+       @Override
+    public void addSelectionChangedListener(
                        ISelectionChangedListener listener) {
                selectionChangedListeners.add(listener);
        }
@@ -55,7 +61,8 @@ public class SimpleSelectionProvider implements ISelectionProvider {
         *
         * @return a {@link org.eclipse.jface.viewers.ISelection} object.
         */
-       public ISelection getSelection() {
+       @Override
+    public ISelection getSelection() {
                if (selection != null){
                        return selection;
                }
@@ -69,7 +76,8 @@ public class SimpleSelectionProvider implements ISelectionProvider {
         * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
         */
        /** {@inheritDoc} */
-       public void removeSelectionChangedListener(
+       @Override
+    public void removeSelectionChangedListener(
                        ISelectionChangedListener listener) {
                selectionChangedListeners.remove(listener);
        }
@@ -79,52 +87,55 @@ public class SimpleSelectionProvider implements ISelectionProvider {
         * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
         */
        /** {@inheritDoc} */
-       public void setSelection(ISelection selection) {
+       @Override
+    public void setSelection(ISelection selection) {
                this.selection = selection;
-               
+
                // cancel previous selection setting
                if(job != null){
-                       job.cancel();
+                       if(job.getState() != Job.NONE){
+                               job.cancel();
+                       }
                        job = null;
                }
-               
+
                if(job == null){
                        final SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
                        final Display display = Display.getCurrent();
-                       job = new Job("Setting Selection"){
-       
+                       job = new Job(SETTING_SELECTION){
+
                                @Override
                                protected IStatus run(IProgressMonitor monitor) {
-                                       monitor.beginTask("Setting Selection", 10);
-                                       
+                                       monitor.beginTask(SETTING_SELECTION, 10);
+
                                        if(!monitor.isCanceled()){
                                                display.asyncExec(new Runnable() {
-                                        
-                                                       public void run() {
-                                                               fireSelectionChanged(selectionChangedEvent);
+
+                                                       @Override
+                            public void run() {
+                                                               SimpleSelectionProvider.this.fireSelectionChanged(selectionChangedEvent);
                                                        }
                                                });
                                        }
-                                       
+
                                        return Status.OK_STATUS;
                                }
-                               
+
                        };
-                       
+
                        job.setPriority(Job.DECORATE);
                        job.schedule();
                }
-               
+
        }
 
        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);
+                               @Override
+                public void run() {
+                                       listener.selectionChanged(event);
                                }
                        });
                }