--- /dev/null
+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+\r
+package eu.etaxonomy.taxeditor.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.IListChangeListener;\r
+import org.eclipse.core.databinding.observable.list.ListChangeEvent;\r
+import org.eclipse.core.databinding.observable.list.ListDiffEntry;\r
+import org.eclipse.core.databinding.observable.set.IObservableSet;\r
+import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
+import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
+import org.eclipse.core.databinding.observable.set.SetDiff;\r
+import org.eclipse.jface.viewers.ITreeContentProvider;\r
+import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 28.05.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonomicTreeContentProvider\r
+// implements ILazyTreeContentProvider {\r
+ implements ITreeContentProvider {\r
+ private static final Logger logger = Logger\r
+ .getLogger(TaxonomicTreeContentProvider.class);\r
+\r
+ Collection<Taxon> elements = new ArrayList<Taxon>();\r
+ Viewer viewer;\r
+ \r
+ @Override\r
+ public Object[] getChildren(Object parentElement) {\r
+ if (!(parentElement instanceof Taxon)) {\r
+ return new Object[0];\r
+ }\r
+\r
+ Taxon parentTaxon = (Taxon) parentElement;\r
+\r
+ // If this returns null, the taxon's children have already\r
+ // been requested during this session\r
+ Set<Taxon> childTaxa = TaxEditorPlugin.getDefault()\r
+ .getSessionTaxonomicChildren(parentTaxon);\r
+ if (childTaxa == null) {\r
+ \r
+ // Request this taxon's children for the first time \r
+ // during this session\r
+ childTaxa = parentTaxon.getTaxonomicChildren();\r
+ TaxEditorPlugin.getDefault().addSessionTaxonomicChildren(parentTaxon, childTaxa);\r
+ }\r
+\r
+ return childTaxa.toArray();\r
+ }\r
+\r
+ @Override\r
+ public Object getParent(Object element) {\r
+ if (!(element instanceof Taxon)) {\r
+ return null; \r
+ }\r
+ return ((Taxon) element).getTaxonomicParent();\r
+ }\r
+\r
+ @Override\r
+ public boolean hasChildren(Object element) {\r
+ if (!(element instanceof Taxon)) {\r
+ return false; \r
+ }\r
+ return ((Taxon) element).hasTaxonomicChildren();\r
+ }\r
+\r
+ @Override\r
+ public Object[] getElements(Object inputElement) {\r
+ return elements.toArray();\r
+ }\r
+\r
+ @Override\r
+ public void dispose() {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
+ @Override\r
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+ this.viewer = viewer;\r
+ \r
+ if (newInput != null && !(newInput instanceof Collection)) {\r
+ throw new IllegalArgumentException(\r
+ "This content provider only works with input of type Collection<Taxon>"); //$NON-NLS-1$\r
+ }\r
+ \r
+ try {\r
+ Collection<Taxon> input = (Collection<Taxon>) newInput;\r
+ setInput(input);\r
+ } catch (ClassCastException e) {\r
+ throw new IllegalArgumentException(\r
+ "This content provider only works with input of type Collection<Taxon>"); //$NON-NLS-1$\r
+ }\r
+ }\r
+ \r
+ private void setInput(Collection<Taxon> input) {\r
+ \r
+ if (input != null) {\r
+ elements.addAll(input);\r
+ TaxEditorPlugin.getDefault().addSessionTaxa(input);\r
+ }\r
+ \r
+ IObservableSet observableSessionTaxonSet = TaxEditorPlugin.getDefault().getObservableSessionTaxa();\r
+ observableSessionTaxonSet.addSetChangeListener(listener);\r
+ }\r
+\r
+ private void addSessionTaxaListener() {\r
+ \r
+ }\r
+ \r
+ private void removeSessionTaxaListener() {\r
+ \r
+ }\r
+ \r
+ private ISetChangeListener listener = new ISetChangeListener() {\r
+ public void handleListChange(ListChangeEvent event) {\r
+ if (viewer.getControl().isDisposed()) {\r
+ return;\r
+ }\r
+ ListDiffEntry[] differences = event.diff.getDifferences();\r
+ for (int i = 0; i < differences.length; i++) {\r
+ ListDiffEntry entry = differences[i];\r
+ \r
+ if (entry.isAddition()) {\r
+ \r
+ Taxon newTaxon = (Taxon) entry.getElement();\r
+ Taxon parent = newTaxon.getTaxonomicParent();\r
+ ((TreeViewer) viewer).add(parent, newTaxon);\r
+ \r
+ } else {\r
+ \r
+ ((TreeViewer) viewer).remove(entry.getElement());\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void handleSetChange(SetChangeEvent event) {\r
+ if (viewer.getControl().isDisposed()) {\r
+ return;\r
+ }\r
+ for (Object addition : event.diff.getAdditions()) {\r
+ \r
+ }\r
+ }\r
+ };\r
+\r
+// ********************** BELOW: ILazyTreeContentProvider ********************** // \r
+ \r
+//@Override\r
+//public Object getParent(Object element) {\r
+// // TODO Auto-generated method stub\r
+// return null;\r
+//}\r
+//\r
+//@Override\r
+//public void updateChildCount(Object element, int currentChildCount) {\r
+// // TODO Auto-generated method stub\r
+// \r
+//}\r
+//\r
+//@Override\r
+//public void updateElement(Object parent, int index) {\r
+// // TODO Auto-generated method stub\r
+// \r
+//}\r
+//\r
+//@Override\r
+//public void dispose() {\r
+// // TODO Auto-generated method stub\r
+// \r
+//}\r
+//\r
+//@Override\r
+//public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+// // TODO Auto-generated method stub\r
+// \r
+//}\r
+\r
+}\r