blob: 6690c45aaef90f7b51dfb73421b1e23e1fee60ae [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.examples.jobs.views;
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;
public class SlowElementAdapter implements IDeferredWorkbenchAdapter {
private static boolean serializeFetching = false;
private static boolean batchFetchedChildren = false;
final ISchedulingRule mutexRule = new ISchedulingRule() {
@Override
public boolean isConflicting(ISchedulingRule rule) {
return rule == mutexRule;
}
@Override
public boolean contains(ISchedulingRule rule) {
return rule == mutexRule;
}
};
@Override
public void fetchDeferredChildren(Object object, IElementCollector collector, IProgressMonitor monitor) {
if (object instanceof SlowElement) {
Object[] children = ((SlowElement) object).getChildren();
if (isBatchFetchedChildren()) {
sleep(4000);
collector.add(children, monitor);
} else {
for (int i = 0; i < children.length; i++) {
if (monitor.isCanceled()) {
return;
}
collector.add(children[i], monitor);
sleep(4000);
}
}
}
}
private void sleep(long mills) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//ignore
}
}
@Override
public boolean isContainer() {
return true;
}
@Override
public ISchedulingRule getRule(final Object object) {
if (isSerializeFetching())
return mutexRule;
// Allow several SlowElement parents to fetch children concurrently
return null;
}
@Override
public Object[] getChildren(Object object) {
if (object instanceof SlowElement) {
return ((SlowElement) object).getChildren();
}
return new Object[0];
}
@Override
public ImageDescriptor getImageDescriptor(Object object) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getLabel(Object o) {
if (o instanceof SlowElement) {
return ((SlowElement) o).getName();
}
return "unknown"; //$NON-NLS-1$
}
@Override
public Object getParent(Object o) {
if (o instanceof SlowElement) {
return ((SlowElement) o).getParent();
}
return null;
}
/**
* @return Returns the batchFetchedChildren.
*/
public static boolean isBatchFetchedChildren() {
return batchFetchedChildren;
}
/**
* @param batchFetchedChildren
* The batchFetchedChildren to set.
*/
public static void setBatchFetchedChildren(boolean batchFetchedChildren) {
SlowElementAdapter.batchFetchedChildren = batchFetchedChildren;
}
/**
* @return Returns the serializeFetching.
*/
public static boolean isSerializeFetching() {
return serializeFetching;
}
/**
* @param serializeFetching
* The serializeFetching to set.
*/
public static void setSerializeFetching(boolean serializeFetching) {
SlowElementAdapter.serializeFetching = serializeFetching;
}
}