New content provider works but change listener not yet implemented.
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / model / TaxonomicTreeContentProvider.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.taxeditor.model;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.Set;
15
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;
27
28 import eu.etaxonomy.cdm.model.taxon.Taxon;
29 import eu.etaxonomy.taxeditor.TaxEditorPlugin;
30
31 /**
32 * @author p.ciardelli
33 * @created 28.05.2008
34 * @version 1.0
35 */
36 public class TaxonomicTreeContentProvider
37 // implements ILazyTreeContentProvider {
38 implements ITreeContentProvider {
39 private static final Logger logger = Logger
40 .getLogger(TaxonomicTreeContentProvider.class);
41
42 Collection<Taxon> elements = new ArrayList<Taxon>();
43 Viewer viewer;
44
45 @Override
46 public Object[] getChildren(Object parentElement) {
47 if (!(parentElement instanceof Taxon)) {
48 return new Object[0];
49 }
50
51 Taxon parentTaxon = (Taxon) parentElement;
52
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) {
58
59 // Request this taxon's children for the first time
60 // during this session
61 childTaxa = parentTaxon.getTaxonomicChildren();
62 TaxEditorPlugin.getDefault().addSessionTaxonomicChildren(parentTaxon, childTaxa);
63 }
64
65 return childTaxa.toArray();
66 }
67
68 @Override
69 public Object getParent(Object element) {
70 if (!(element instanceof Taxon)) {
71 return null;
72 }
73 return ((Taxon) element).getTaxonomicParent();
74 }
75
76 @Override
77 public boolean hasChildren(Object element) {
78 if (!(element instanceof Taxon)) {
79 return false;
80 }
81 return ((Taxon) element).hasTaxonomicChildren();
82 }
83
84 @Override
85 public Object[] getElements(Object inputElement) {
86 return elements.toArray();
87 }
88
89 @Override
90 public void dispose() {
91 // TODO Auto-generated method stub
92
93 }
94
95 @Override
96 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
97 this.viewer = viewer;
98
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$
102 }
103
104 try {
105 Collection<Taxon> input = (Collection<Taxon>) newInput;
106 setInput(input);
107 } catch (ClassCastException e) {
108 throw new IllegalArgumentException(
109 "This content provider only works with input of type Collection<Taxon>"); //$NON-NLS-1$
110 }
111 }
112
113 private void setInput(Collection<Taxon> input) {
114
115 if (input != null) {
116 elements.addAll(input);
117 TaxEditorPlugin.getDefault().addSessionTaxa(input);
118 }
119
120 IObservableSet observableSessionTaxonSet = TaxEditorPlugin.getDefault().getObservableSessionTaxa();
121 observableSessionTaxonSet.addSetChangeListener(listener);
122 }
123
124 private void addSessionTaxaListener() {
125
126 }
127
128 private void removeSessionTaxaListener() {
129
130 }
131
132 private ISetChangeListener listener = new ISetChangeListener() {
133 public void handleListChange(ListChangeEvent event) {
134 if (viewer.getControl().isDisposed()) {
135 return;
136 }
137 ListDiffEntry[] differences = event.diff.getDifferences();
138 for (int i = 0; i < differences.length; i++) {
139 ListDiffEntry entry = differences[i];
140
141 if (entry.isAddition()) {
142
143 Taxon newTaxon = (Taxon) entry.getElement();
144 Taxon parent = newTaxon.getTaxonomicParent();
145 ((TreeViewer) viewer).add(parent, newTaxon);
146
147 } else {
148
149 ((TreeViewer) viewer).remove(entry.getElement());
150 }
151 }
152 }
153
154 @Override
155 public void handleSetChange(SetChangeEvent event) {
156 if (viewer.getControl().isDisposed()) {
157 return;
158 }
159 for (Object addition : event.diff.getAdditions()) {
160
161 }
162 }
163 };
164
165 // ********************** BELOW: ILazyTreeContentProvider ********************** //
166
167 //@Override
168 //public Object getParent(Object element) {
169 // // TODO Auto-generated method stub
170 // return null;
171 //}
172 //
173 //@Override
174 //public void updateChildCount(Object element, int currentChildCount) {
175 // // TODO Auto-generated method stub
176 //
177 //}
178 //
179 //@Override
180 //public void updateElement(Object parent, int index) {
181 // // TODO Auto-generated method stub
182 //
183 //}
184 //
185 //@Override
186 //public void dispose() {
187 // // TODO Auto-generated method stub
188 //
189 //}
190 //
191 //@Override
192 //public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
193 // // TODO Auto-generated method stub
194 //
195 //}
196
197 }