removed java 1.5 incompatible override annotations
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / model / TaxonomicTreeContentProvider.java
index a0b8bc0ef6a30158bd7142b3d44f511240a5ae3c..497d88408dd4e6286043a5e9128d795048a217b5 100644 (file)
  * 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.List;\r
 import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\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.jface.viewers.ITreeContentProvider;\r
-import org.eclipse.jface.viewers.TreePath;\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
- * An implementation of ITreeContentProvider which adds taxa displayed in the tree\r
- *  to the Editor session on an as-loaded basis. Listens for any changes to the \r
- *  set of session taxa, updates the TreeViewer accordingly.\r
- * <p> \r
- * Could be re-written to implement ILazyTreeContentProvider at some point in the future.\r
- * \r
  * @author p.ciardelli\r
- * @created 28.05.2008\r
+ * @created 27.06.2008\r
  * @version 1.0\r
  */\r
 public class TaxonomicTreeContentProvider implements ITreeContentProvider {\r
        private static final Logger logger = Logger\r
                        .getLogger(TaxonomicTreeContentProvider.class);\r
 \r
-       Collection<Taxon> elements = new ArrayList<Taxon>();\r
-       private IObservableSet observableSessionTaxonSet;\r
-       TreeViewer viewer;\r
-       \r
-       /* (non-Javadoc)\r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
         * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)\r
         */\r
-       @Override\r
        public Object[] getChildren(Object parentElement) {\r
-               if (!(parentElement instanceof Taxon)) {\r
-                       return new Object[0];\r
+               \r
+               if (parentElement instanceof Taxon) {\r
+                       return getTaxonChildren((Taxon) parentElement).toArray();\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
-                       removeSessionTaxaListener();\r
-                       \r
-                       // Request this taxon's children for the first time \r
-                       //      during this session\r
-                       childTaxa = parentTaxon.getTaxonomicChildren();\r
-                       TaxEditorPlugin.getDefault().addSessionTaxa(childTaxa);\r
+               \r
+               if (!(parentElement instanceof Collection)) {\r
+                       throw new IllegalArgumentException(\r
+                                       "getChildren() expects either a Collection or a Taxon object."); //$NON-NLS-1$  \r
+               }\r
+               \r
+               List<Taxon> children = new ArrayList<Taxon>();\r
+               for (Object parent : (Collection) parentElement) {\r
+                       if (!(parent instanceof Taxon)) {\r
+                               throw new IllegalArgumentException(\r
+                                               "parentElement Collection can only contain Taxon objects."); //$NON-NLS-1$                              \r
+                       }\r
                        \r
-                       addSessionTaxaListener();\r
+                       children.addAll(getTaxonChildren((Taxon) parent));\r
                }\r
+               return children.toArray();\r
+       }\r
+\r
+       public Set<Taxon> getTaxonChildren(Taxon parentTaxon) {\r
 \r
-               return childTaxa.toArray();\r
+               return TaxEditorPlugin.getDefault().getSessionTaxonomicChildren(\r
+                               parentTaxon);\r
        }\r
 \r
-       @Override\r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
+        * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)\r
+        */\r
        public Object getParent(Object element) {\r
                if (!(element instanceof Taxon)) {\r
-                       return null;                    \r
+                       throw new IllegalArgumentException(\r
+                                       "getParent() expects a Taxon object."); //$NON-NLS-1$                           \r
                }\r
                return ((Taxon) element).getTaxonomicParent();\r
        }\r
 \r
-       @Override\r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
+        * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)\r
+        */\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
-               removeSessionTaxaListener();\r
-       }\r
-\r
-       @Override\r
-       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
-               if (!(viewer instanceof TreeViewer)) {\r
-                       throw new IllegalArgumentException(\r
-                                       "This content provider only works with viewer of type TreeViewer"); //$NON-NLS-1$                       \r
-               }\r
-               this.viewer = (TreeViewer) 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
+                                       "getParent() expects a Taxon object."); //$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
+               return getChildren(element).length > 0;\r
        }\r
-       \r
-       private void setInput(Collection<Taxon> input) {\r
+\r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
+        * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)\r
+        */\r
+       public Object[] getElements(Object inputElement) {\r
                \r
-               if (input != null) {\r
-                       elements.addAll(input);\r
-                       TaxEditorPlugin.getDefault().addSessionTaxa(input);\r
-               }\r
+               // BIG QUESTION: should getElements return only root taxa, or all taxa?\r
+               // CONFLICTING INFO ONLINE!!!\r
+//             return TaxEditorPlugin.getDefault().getObservableSessionTaxa().toArray();\r
                \r
-               removeSessionTaxaListener();\r
-               addSessionTaxaListener();\r
+               return TaxEditorPlugin.getDefault().getSessionRootTaxa().toArray();\r
        }\r
 \r
-       private IObservableSet getObservableSessionTaxonSet() {\r
-               if (observableSessionTaxonSet == null) {\r
-                       observableSessionTaxonSet = TaxEditorPlugin.getDefault().getObservableSessionTaxa();\r
-               }\r
-               return observableSessionTaxonSet;\r
-       }\r
-       \r
-       private void addSessionTaxaListener() {\r
-               getObservableSessionTaxonSet().addSetChangeListener(listener);\r
-       }\r
-       \r
-       private void removeSessionTaxaListener() {\r
-               getObservableSessionTaxonSet().removeSetChangeListener(listener);\r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
+        * @see org.eclipse.jface.viewers.IContentProvider#dispose()\r
+        */\r
+       public void dispose() {}\r
+\r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
+        * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,\r
+        *      java.lang.Object, java.lang.Object)\r
+        */\r
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+               // TODO Auto-generated method stub\r
        }\r
-       \r
-       private ISetChangeListener listener = new ISetChangeListener() {\r
-               @Override\r
-               public void handleSetChange(SetChangeEvent event) {\r
-                       if (viewer.getControl().isDisposed()) {\r
-                               return;\r
-                       }\r
-                       for (Object addition : event.diff.getAdditions()) {\r
-                               if (addition instanceof Taxon) {\r
-                                       Taxon taxon = (Taxon) addition;\r
-                                       Taxon parentTaxon = taxon.getTaxonomicParent();\r
-                                       if (parentTaxon == null) {\r
-                                               viewer.add(TreePath.EMPTY, taxon);      \r
-                                       } else {\r
-                                               viewer.add(parentTaxon, taxon);\r
-                                       }\r
-                               }\r
-                       }\r
-                       for (Object removal : event.diff.getRemovals()) {\r
-                               if (removal instanceof Taxon) {\r
-                                       Taxon taxon = (Taxon) removal;\r
-                                       viewer.remove(taxon);\r
-                               }\r
-                       }\r
-               }\r
-       };\r
-}\r
+}
\ No newline at end of file