2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.editor
;
12 import java
.util
.HashSet
;
15 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
16 import org
.eclipse
.core
.runtime
.IStatus
;
17 import org
.eclipse
.core
.runtime
.Status
;
18 import org
.eclipse
.core
.runtime
.jobs
.Job
;
19 import org
.eclipse
.jface
.util
.SafeRunnable
;
20 import org
.eclipse
.jface
.viewers
.ISelection
;
21 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
22 import org
.eclipse
.jface
.viewers
.ISelectionProvider
;
23 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
24 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
25 import org
.eclipse
.swt
.widgets
.Display
;
27 import eu
.etaxonomy
.taxeditor
.editor
.l10n
.Messages
;
30 * <p>SimpleSelectionProvider class.</p>
37 public class SimpleSelectionProvider
implements ISelectionProvider
{
39 private static final String SETTING_SELECTION
= Messages
.SimpleSelectionProvider_SETTING_SELECTION
;
40 private Set
<ISelectionChangedListener
> selectionChangedListeners
= new HashSet
<ISelectionChangedListener
>();
41 private ISelection selection
;
46 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
50 public void addSelectionChangedListener(
51 ISelectionChangedListener listener
) {
52 selectionChangedListeners
.add(listener
);
57 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
60 * <p>Getter for the field <code>selection</code>.</p>
62 * @return a {@link org.eclipse.jface.viewers.ISelection} object.
65 public ISelection
getSelection() {
66 if (selection
!= null){
69 // TODO we have to return an empty selection to avoid NPE
70 // I don't really understand why this was not the case before
71 return new StructuredSelection();
76 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
80 public void removeSelectionChangedListener(
81 ISelectionChangedListener listener
) {
82 selectionChangedListeners
.remove(listener
);
87 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
91 public void setSelection(ISelection selection
) {
92 this.selection
= selection
;
94 // cancel previous selection setting
96 if(job
.getState() != Job
.NONE
){
103 final SelectionChangedEvent selectionChangedEvent
= new SelectionChangedEvent(this, selection
);
104 final Display display
= Display
.getCurrent();
105 job
= new Job(SETTING_SELECTION
){
108 protected IStatus
run(IProgressMonitor monitor
) {
109 monitor
.beginTask(SETTING_SELECTION
, 10);
111 if(!monitor
.isCanceled()){
112 display
.asyncExec(new Runnable() {
116 SimpleSelectionProvider
.this.fireSelectionChanged(selectionChangedEvent
);
121 return Status
.OK_STATUS
;
126 job
.setPriority(Job
.DECORATE
);
132 private void fireSelectionChanged(final SelectionChangedEvent event
) {
134 for (final ISelectionChangedListener listener
: selectionChangedListeners
) {
135 SafeRunnable
.run(new SafeRunnable() {
138 listener
.selectionChanged(event
);