1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-05 07:15:39 +02:00

[182574] prevent duplicate deferred queries to avoid empty list scenario.

This commit is contained in:
David McKnight 2007-04-18 17:34:00 +00:00
parent 878dd51257
commit 5923ec7386

View file

@ -13,20 +13,27 @@
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.operations; package org.eclipse.rse.ui.operations;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.rse.ui.view.IContextObject; import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.ui.progress.DeferredTreeContentManager; import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
import org.eclipse.ui.progress.PendingUpdateAdapter;
public class SystemDeferredTreeContentManager extends public class SystemDeferredTreeContentManager extends
DeferredTreeContentManager { DeferredTreeContentManager {
private List _pendingQueries;
public SystemDeferredTreeContentManager(ITreeContentProvider provider, public SystemDeferredTreeContentManager(ITreeContentProvider provider,
AbstractTreeViewer viewer) AbstractTreeViewer viewer)
{ {
super(provider, viewer); super(provider, viewer);
// TODO Auto-generated constructor stub _pendingQueries = new ArrayList();
} }
/** /**
@ -47,4 +54,36 @@ public class SystemDeferredTreeContentManager extends
return super.getAdapter(element); return super.getAdapter(element);
} }
/**
* Returns the child elements of the given element, or in the case of a
* deferred element, returns a placeholder. If a deferred element is used, a
* job is created to fetch the children in the background.
*
* @param parent
* The parent object.
* @return Object[] or <code>null</code> if parent is not an instance of
* IDeferredWorkbenchAdapter.
*/
public Object[] getChildren(final Object parent) {
IDeferredWorkbenchAdapter element = getAdapter(parent);
if (element == null) {
return null;
}
PendingUpdateAdapter placeholder = createPendingUpdateAdapter();
if (!_pendingQueries.contains(parent))
{
startFetchingDeferredChildren(parent, element, placeholder);
_pendingQueries.add(parent);
return new Object[] { placeholder };
}
return null;
}
protected void addChildren(final Object parent, final Object[] children,
IProgressMonitor monitor)
{
super.addChildren(parent, children, monitor);
_pendingQueries.remove(parent);
}
} }