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