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
;
28 * <p>SimpleSelectionProvider class.</p>
35 public class SimpleSelectionProvider
implements ISelectionProvider
{
37 private Set
<ISelectionChangedListener
> selectionChangedListeners
= new HashSet
<ISelectionChangedListener
>();
38 private ISelection selection
;
43 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
46 public void addSelectionChangedListener(
47 ISelectionChangedListener listener
) {
48 selectionChangedListeners
.add(listener
);
53 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
56 * <p>Getter for the field <code>selection</code>.</p>
58 * @return a {@link org.eclipse.jface.viewers.ISelection} object.
60 public ISelection
getSelection() {
61 if (selection
!= null){
64 // TODO we have to return an empty selection to avoid NPE
65 // I don't really understand why this was not the case before
66 return new StructuredSelection();
71 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
74 public void removeSelectionChangedListener(
75 ISelectionChangedListener listener
) {
76 selectionChangedListeners
.remove(listener
);
81 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
84 public void setSelection(ISelection selection
) {
85 this.selection
= selection
;
87 // cancel previous selection setting
89 if(job
.getState() != Job
.NONE
){
96 final SelectionChangedEvent selectionChangedEvent
= new SelectionChangedEvent(this, selection
);
97 final Display display
= Display
.getCurrent();
98 job
= new Job("Setting Selection"){
101 protected IStatus
run(IProgressMonitor monitor
) {
102 monitor
.beginTask("Setting Selection", 10);
104 if(!monitor
.isCanceled()){
105 display
.asyncExec(new Runnable() {
108 SimpleSelectionProvider
.this.fireSelectionChanged(selectionChangedEvent
);
113 return Status
.OK_STATUS
;
118 job
.setPriority(Job
.DECORATE
);
124 private void fireSelectionChanged(final SelectionChangedEvent event
) {
126 for (final ISelectionChangedListener listener
: selectionChangedListeners
) {
127 SafeRunnable
.run(new SafeRunnable() {
129 listener
.selectionChanged(event
);