package rocks.inspectit.ui.rcp.editor.tree.input; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; import org.eclipse.ui.progress.IElementCollector; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; /** * This class is used to create the UI elements of tree-based views only if the parent element is * said to be opened. * * @author Patrice Bouillet * */ public class DeferredInvoc implements IDeferredWorkbenchAdapter { /** * Defines the items per loop. */ public static final int ITEMS_PER_LOOP = 50; /** * {@inheritDoc} */ @Override public void fetchDeferredChildren(Object object, IElementCollector collector, IProgressMonitor monitor) { InvocationSequenceData parentData = (InvocationSequenceData) object; List<InvocationSequenceData> nestedSequences = parentData.getNestedSequences(); monitor.beginTask("Loading of Invocation Sequence Data Objects...", nestedSequences.size()); for (int i = 0; i < nestedSequences.size(); i = i + ITEMS_PER_LOOP) { List<InvocationSequenceData> subList; if ((i + ITEMS_PER_LOOP) > nestedSequences.size()) { subList = nestedSequences.subList(i, nestedSequences.size()); } else { subList = nestedSequences.subList(i, i + ITEMS_PER_LOOP); } monitor.worked(subList.size()); collector.add(subList.toArray(), monitor); if (monitor.isCanceled()) { break; } } monitor.done(); } /** * {@inheritDoc} */ @Override public ISchedulingRule getRule(Object object) { return null; } /** * {@inheritDoc} */ @Override public boolean isContainer() { return true; } /** * {@inheritDoc} */ @Override public Object[] getChildren(Object o) { InvocationSequenceData invocationSequenceData = (InvocationSequenceData) o; List<InvocationSequenceData> nestedSequences = invocationSequenceData.getNestedSequences(); return nestedSequences.toArray(); } /** * {@inheritDoc} */ @Override public ImageDescriptor getImageDescriptor(Object object) { return null; } /** * {@inheritDoc} */ @Override public String getLabel(Object o) { return null; } /** * {@inheritDoc} */ @Override public Object getParent(Object o) { InvocationSequenceData invocationSequenceData = (InvocationSequenceData) o; return invocationSequenceData.getParentSequence(); } }