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
.model
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Collection
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.eclipse
.core
.databinding
.observable
.list
.IListChangeListener
;
18 import org
.eclipse
.core
.databinding
.observable
.list
.ListChangeEvent
;
19 import org
.eclipse
.core
.databinding
.observable
.list
.ListDiffEntry
;
20 import org
.eclipse
.core
.databinding
.observable
.set
.IObservableSet
;
21 import org
.eclipse
.core
.databinding
.observable
.set
.ISetChangeListener
;
22 import org
.eclipse
.core
.databinding
.observable
.set
.SetChangeEvent
;
23 import org
.eclipse
.core
.databinding
.observable
.set
.SetDiff
;
24 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
25 import org
.eclipse
.jface
.viewers
.TreeViewer
;
26 import org
.eclipse
.jface
.viewers
.Viewer
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
29 import eu
.etaxonomy
.taxeditor
.TaxEditorPlugin
;
36 public class TaxonomicTreeContentProvider
37 // implements ILazyTreeContentProvider {
38 implements ITreeContentProvider
{
39 private static final Logger logger
= Logger
40 .getLogger(TaxonomicTreeContentProvider
.class);
42 Collection
<Taxon
> elements
= new ArrayList
<Taxon
>();
46 public Object
[] getChildren(Object parentElement
) {
47 if (!(parentElement
instanceof Taxon
)) {
51 Taxon parentTaxon
= (Taxon
) parentElement
;
53 // If this returns null, the taxon's children have already
54 // been requested during this session
55 Set
<Taxon
> childTaxa
= TaxEditorPlugin
.getDefault()
56 .getSessionTaxonomicChildren(parentTaxon
);
57 if (childTaxa
== null) {
59 // Request this taxon's children for the first time
60 // during this session
61 childTaxa
= parentTaxon
.getTaxonomicChildren();
62 TaxEditorPlugin
.getDefault().addSessionTaxonomicChildren(parentTaxon
, childTaxa
);
65 return childTaxa
.toArray();
69 public Object
getParent(Object element
) {
70 if (!(element
instanceof Taxon
)) {
73 return ((Taxon
) element
).getTaxonomicParent();
77 public boolean hasChildren(Object element
) {
78 if (!(element
instanceof Taxon
)) {
81 return ((Taxon
) element
).hasTaxonomicChildren();
85 public Object
[] getElements(Object inputElement
) {
86 return elements
.toArray();
90 public void dispose() {
91 // TODO Auto-generated method stub
96 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
99 if (newInput
!= null && !(newInput
instanceof Collection
)) {
100 throw new IllegalArgumentException(
101 "This content provider only works with input of type Collection<Taxon>"); //$NON-NLS-1$
105 Collection
<Taxon
> input
= (Collection
<Taxon
>) newInput
;
107 } catch (ClassCastException e
) {
108 throw new IllegalArgumentException(
109 "This content provider only works with input of type Collection<Taxon>"); //$NON-NLS-1$
113 private void setInput(Collection
<Taxon
> input
) {
116 elements
.addAll(input
);
117 TaxEditorPlugin
.getDefault().addSessionTaxa(input
);
120 IObservableSet observableSessionTaxonSet
= TaxEditorPlugin
.getDefault().getObservableSessionTaxa();
121 observableSessionTaxonSet
.addSetChangeListener(listener
);
124 private void addSessionTaxaListener() {
128 private void removeSessionTaxaListener() {
132 private ISetChangeListener listener
= new ISetChangeListener() {
133 public void handleListChange(ListChangeEvent event
) {
134 if (viewer
.getControl().isDisposed()) {
137 ListDiffEntry
[] differences
= event
.diff
.getDifferences();
138 for (int i
= 0; i
< differences
.length
; i
++) {
139 ListDiffEntry entry
= differences
[i
];
141 if (entry
.isAddition()) {
143 Taxon newTaxon
= (Taxon
) entry
.getElement();
144 Taxon parent
= newTaxon
.getTaxonomicParent();
145 ((TreeViewer
) viewer
).add(parent
, newTaxon
);
149 ((TreeViewer
) viewer
).remove(entry
.getElement());
155 public void handleSetChange(SetChangeEvent event
) {
156 if (viewer
.getControl().isDisposed()) {
159 for (Object addition
: event
.diff
.getAdditions()) {
165 // ********************** BELOW: ILazyTreeContentProvider ********************** //
168 //public Object getParent(Object element) {
169 // // TODO Auto-generated method stub
174 //public void updateChildCount(Object element, int currentChildCount) {
175 // // TODO Auto-generated method stub
180 //public void updateElement(Object parent, int index) {
181 // // TODO Auto-generated method stub
186 //public void dispose() {
187 // // TODO Auto-generated method stub
192 //public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
193 // // TODO Auto-generated method stub