package edu.ualberta.med.biobank.treeview.util; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import edu.ualberta.med.biobank.treeview.AbstractAdapterBase; public class NodeContentProvider implements ITreeContentProvider, IDeltaListener { protected TreeViewer viewer; /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang. * Object) */ @Override public Object[] getChildren(Object element) { Assert.isTrue(element instanceof AbstractAdapterBase, "Invalid object"); //$NON-NLS-1$ return ((AbstractAdapterBase) element).getChildren().toArray(); } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object * ) */ @Override public Object getParent(Object element) { Assert.isTrue(element instanceof AbstractAdapterBase, "Invalid object"); //$NON-NLS-1$ return ((AbstractAdapterBase) element).getParent(); } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang. * Object) */ @Override public boolean hasChildren(Object element) { Assert.isTrue(element instanceof AbstractAdapterBase, "Invalid object"); //$NON-NLS-1$ return ((AbstractAdapterBase) element).hasChildren(); } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java * .lang.Object) */ @Override public Object[] getElements(Object element) { return getChildren(element); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { // do nothing } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface * .viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.viewer = (TreeViewer) viewer; if (oldInput != null) { removeListenerFrom((AbstractAdapterBase) oldInput); } if (newInput != null) { addListenerTo((AbstractAdapterBase) newInput); } } protected void addListenerTo(AbstractAdapterBase node) { node.addListener(this); for (AbstractAdapterBase child : node.getChildren()) { addListenerTo(child); } } protected void removeListenerFrom(AbstractAdapterBase node) { node.removeListener(this); for (AbstractAdapterBase child : node.getChildren()) { removeListenerFrom(child); } } @Override public void add(DeltaEvent event) { AbstractAdapterBase node = ((AbstractAdapterBase) event.receiver()) .getParent(); if (!viewer.isBusy()) { viewer.refresh(node, false); } } @Override public void remove(DeltaEvent event) { add(event); } }