handle missing parent for polytomous key generation
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / SimpleSelectionProvider.java
index 31ac83f1e1aa1e68529bb651acdc6b9d4a352334..55b2100c0fadf9709b74b6b4911b7c2653470341 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,40 +24,35 @@ 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>
  *
  * @author p.ciardelli
  * @author n.hoffmann
  * @created 16.05.2008
- * @version 1.0
  */
 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);
        }
 
-       /*
-        * (non-Javadoc)
-        * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
-        */
        /**
         * <p>Getter for the field <code>selection</code>.</p>
         *
         * @return a {@link org.eclipse.jface.viewers.ISelection} object.
         */
-       public ISelection getSelection() {
+       @Override
+    public ISelection getSelection() {
                if (selection != null){
                        return selection;
                }
@@ -64,67 +61,61 @@ public class SimpleSelectionProvider implements ISelectionProvider {
                return new StructuredSelection();
        }
 
-       /*
-        * (non-Javadoc)
-        * @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);
        }
 
-       /*
-        * (non-Javadoc)
-        * @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);
                                }
                        });
                }