blob: 987be2acd0624d0442fe26701d1f19b99238daff [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Zend Technologies
*******************************************************************************/
package org.eclipse.dltk.internal.core.index2;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.dltk.internal.core.search.processing.JobManager;
import org.eclipse.dltk.internal.core.util.Messages;
public class ProgressJob extends Job {
private JobManager jobManager;
private IProgressMonitor monitor;
private transient boolean running;
public ProgressJob(JobManager jobManager) {
super(Messages.manager_indexingInProgress);
this.jobManager = jobManager;
}
@Override
protected IStatus run(IProgressMonitor monitor) {
running = true;
try {
this.monitor = monitor;
monitor.beginTask(Messages.manager_indexingTask,
IProgressMonitor.UNKNOWN);
while (!monitor.isCanceled()
&& (jobManager.awaitingJobsCount()) > 0) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// ignore
}
}
if (monitor.isCanceled()) {
jobManager.discardJobs(null);
}
monitor.done();
return Status.OK_STATUS;
} finally {
running = false;
this.monitor = null;
}
}
public void subTask(String message) {
if (!running) {
schedule();
}
if (monitor != null) {
monitor.subTask(message);
}
}
}