/**
* 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;
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;
}
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);
}
});
}