/** * Returns whether the given element has children in the specified context. * Subclasses can override to be more efficient. * * @param element * @param context * @param monitor * @return */ protected boolean hasChildren(Object element, IPresentationContext context, IViewerUpdate monitor) throws CoreException { return getChildCount(element, context, monitor) > 0; }
/** * Returns whether this adapter supports the given context. * * @param context * @return whether this adapter supports the given context */ protected boolean supportsContext(IPresentationContext context) { return supportsContextId(context.getId()); }
/** * Updates whether the given elements have children. * * @param update specifies element and progress monitor */ protected void updateHasChildren(IHasChildrenUpdate update) { if (!update.isCanceled()) { IStatus status = Status.OK_STATUS; try { IPresentationContext context = update.getPresentationContext(); if (supportsContext(context)) { boolean hasChildren = hasChildren(update.getElement(), context, update); if (!update.isCanceled()) { update.setHasChilren(hasChildren); } } else { update.setHasChilren(false); } } catch (CoreException e) { status = e.getStatus(); } update.setStatus(status); } }
/** * Computes whether the given element is a container. * * @param parent potential parent * @param context presentation context * @param monitor result to report to */ protected void retrieveChildCount(IChildrenCountUpdate update) { if (!update.isCanceled()) { IStatus status = Status.OK_STATUS; try { IPresentationContext context = update.getPresentationContext(); if (supportsContext(context)) { int childCount = getChildCount( update.getElement(), context, update); if (!update.isCanceled()) { update.setChildCount(childCount); } } else { update.setChildCount(0); } } catch (CoreException e) { status = e.getStatus(); } update.setStatus(status); } }
/** * Computes the children for the given parent in the specified context. * * @param update update request */ protected void retrieveChildren(IChildrenUpdate update) { if (!update.isCanceled()) { IStatus status = Status.OK_STATUS; try { IPresentationContext context = update.getPresentationContext(); if (supportsContext(context)) { int offset = update.getOffset(); Object[] children = getChildren(update.getElement(), offset, update.getLength(), context, update); if (!update.isCanceled() && children != null) { for (int i = 0; i < children.length; i++) { update.setChild(children[i], offset + i); } } } } catch (CoreException e) { status = e.getStatus(); } update.setStatus(status); } }
@Override public void update(final IHasChildrenUpdate[] updates) { Job job = new ElementContentProviderJob("Debug has children update") { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { for (int i = 0; i < updates.length; i++) { IHasChildrenUpdate update = updates[i]; if (!update.isCanceled()) { updateHasChildren(update); } update.done(); } return Status.OK_STATUS; } }; job.setRule(getRule(updates)); job.schedule(); }
@Override protected IStatus run(IProgressMonitor monitor) { for (int i = 0; i < updates.length; i++) { IChildrenCountUpdate update = updates[i]; if (!update.isCanceled()) { retrieveChildCount(update); } update.done(); } return Status.OK_STATUS; } };
@Override protected IStatus run(IProgressMonitor monitor) { for (int i = 0; i < updates.length; i++) { IHasChildrenUpdate update = updates[i]; if (!update.isCanceled()) { updateHasChildren(update); } update.done(); } return Status.OK_STATUS; } };
@Override protected IStatus run(IProgressMonitor monitor) { for (int i = 0; i < updates.length; i++) { IChildrenUpdate update = updates[i]; if (!update.isCanceled()) { retrieveChildren(update); } update.done(); } return Status.OK_STATUS; } };
@Override public void update(final IChildrenCountUpdate[] updates) { Job job = new ElementContentProviderJob("Debug child count update") { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { for (int i = 0; i < updates.length; i++) { IChildrenCountUpdate update = updates[i]; if (!update.isCanceled()) { retrieveChildCount(update); } update.done(); } return Status.OK_STATUS; } }; job.setRule(getRule(updates)); job.schedule(); }
@Override public void update(final IChildrenUpdate[] updates) { Job job = new ElementContentProviderJob("Debug children update") { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { for (int i = 0; i < updates.length; i++) { IChildrenUpdate update = updates[i]; if (!update.isCanceled()) { retrieveChildren(update); } update.done(); } return Status.OK_STATUS; } }; job.setRule(getRule(updates)); job.schedule(); }