X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/aefa6c8b4127d8137933f6efea23c9fb2098d6eb..5df5a7e1e25570aed5e7bfccdb59302e77a23ecb:/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/TaxonomicTreeContentProvider.java
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/TaxonomicTreeContentProvider.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/TaxonomicTreeContentProvider.java
index a0b8bc0ef..497d88408 100644
--- a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/TaxonomicTreeContentProvider.java
+++ b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/TaxonomicTreeContentProvider.java
@@ -6,171 +6,118 @@
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-
package eu.etaxonomy.taxeditor.model;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
-import org.eclipse.core.databinding.observable.set.IObservableSet;
-import org.eclipse.core.databinding.observable.set.ISetChangeListener;
-import org.eclipse.core.databinding.observable.set.SetChangeEvent;
import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.taxeditor.TaxEditorPlugin;
/**
- * An implementation of ITreeContentProvider which adds taxa displayed in the tree
- * to the Editor session on an as-loaded basis. Listens for any changes to the
- * set of session taxa, updates the TreeViewer accordingly.
- *
- * Could be re-written to implement ILazyTreeContentProvider at some point in the future.
- *
* @author p.ciardelli
- * @created 28.05.2008
+ * @created 27.06.2008
* @version 1.0
*/
public class TaxonomicTreeContentProvider implements ITreeContentProvider {
private static final Logger logger = Logger
.getLogger(TaxonomicTreeContentProvider.class);
- Collection elements = new ArrayList();
- private IObservableSet observableSessionTaxonSet;
- TreeViewer viewer;
-
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
- @Override
public Object[] getChildren(Object parentElement) {
- if (!(parentElement instanceof Taxon)) {
- return new Object[0];
+
+ if (parentElement instanceof Taxon) {
+ return getTaxonChildren((Taxon) parentElement).toArray();
}
-
- Taxon parentTaxon = (Taxon) parentElement;
-
- // If this returns null, the taxon's children have already
- // been requested during this session
- Set childTaxa = TaxEditorPlugin.getDefault()
- .getSessionTaxonomicChildren(parentTaxon);
- if (childTaxa == null) {
-
- removeSessionTaxaListener();
-
- // Request this taxon's children for the first time
- // during this session
- childTaxa = parentTaxon.getTaxonomicChildren();
- TaxEditorPlugin.getDefault().addSessionTaxa(childTaxa);
+
+ if (!(parentElement instanceof Collection)) {
+ throw new IllegalArgumentException(
+ "getChildren() expects either a Collection or a Taxon object."); //$NON-NLS-1$
+ }
+
+ List children = new ArrayList();
+ for (Object parent : (Collection) parentElement) {
+ if (!(parent instanceof Taxon)) {
+ throw new IllegalArgumentException(
+ "parentElement Collection can only contain Taxon objects."); //$NON-NLS-1$
+ }
- addSessionTaxaListener();
+ children.addAll(getTaxonChildren((Taxon) parent));
}
+ return children.toArray();
+ }
+
+ public Set getTaxonChildren(Taxon parentTaxon) {
- return childTaxa.toArray();
+ return TaxEditorPlugin.getDefault().getSessionTaxonomicChildren(
+ parentTaxon);
}
- @Override
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
public Object getParent(Object element) {
if (!(element instanceof Taxon)) {
- return null;
+ throw new IllegalArgumentException(
+ "getParent() expects a Taxon object."); //$NON-NLS-1$
}
return ((Taxon) element).getTaxonomicParent();
}
- @Override
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
public boolean hasChildren(Object element) {
if (!(element instanceof Taxon)) {
- return false;
- }
- return ((Taxon) element).hasTaxonomicChildren();
- }
-
- @Override
- public Object[] getElements(Object inputElement) {
- return elements.toArray();
- }
-
- @Override
- public void dispose() {
- removeSessionTaxaListener();
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- if (!(viewer instanceof TreeViewer)) {
- throw new IllegalArgumentException(
- "This content provider only works with viewer of type TreeViewer"); //$NON-NLS-1$
- }
- this.viewer = (TreeViewer) viewer;
-
- if (newInput != null && !(newInput instanceof Collection)) {
throw new IllegalArgumentException(
- "This content provider only works with input of type Collection"); //$NON-NLS-1$
+ "getParent() expects a Taxon object."); //$NON-NLS-1$
}
- try {
- Collection input = (Collection) newInput;
- setInput(input);
- } catch (ClassCastException e) {
- throw new IllegalArgumentException(
- "This content provider only works with input of type Collection"); //$NON-NLS-1$
- }
+ return getChildren(element).length > 0;
}
-
- private void setInput(Collection input) {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
- if (input != null) {
- elements.addAll(input);
- TaxEditorPlugin.getDefault().addSessionTaxa(input);
- }
+ // BIG QUESTION: should getElements return only root taxa, or all taxa?
+ // CONFLICTING INFO ONLINE!!!
+// return TaxEditorPlugin.getDefault().getObservableSessionTaxa().toArray();
- removeSessionTaxaListener();
- addSessionTaxaListener();
+ return TaxEditorPlugin.getDefault().getSessionRootTaxa().toArray();
}
- private IObservableSet getObservableSessionTaxonSet() {
- if (observableSessionTaxonSet == null) {
- observableSessionTaxonSet = TaxEditorPlugin.getDefault().getObservableSessionTaxa();
- }
- return observableSessionTaxonSet;
- }
-
- private void addSessionTaxaListener() {
- getObservableSessionTaxonSet().addSetChangeListener(listener);
- }
-
- private void removeSessionTaxaListener() {
- getObservableSessionTaxonSet().removeSetChangeListener(listener);
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // TODO Auto-generated method stub
}
-
- private ISetChangeListener listener = new ISetChangeListener() {
- @Override
- public void handleSetChange(SetChangeEvent event) {
- if (viewer.getControl().isDisposed()) {
- return;
- }
- for (Object addition : event.diff.getAdditions()) {
- if (addition instanceof Taxon) {
- Taxon taxon = (Taxon) addition;
- Taxon parentTaxon = taxon.getTaxonomicParent();
- if (parentTaxon == null) {
- viewer.add(TreePath.EMPTY, taxon);
- } else {
- viewer.add(parentTaxon, taxon);
- }
- }
- }
- for (Object removal : event.diff.getRemovals()) {
- if (removal instanceof Taxon) {
- Taxon taxon = (Taxon) removal;
- viewer.remove(taxon);
- }
- }
- }
- };
-}
+}
\ No newline at end of file