package rhogenwizard.sdk.task;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
public abstract class RunTask implements IRunTask
{
public static class StoppedException extends RuntimeException
{
private static final long serialVersionUID = -4702661222816646561L;
public StoppedException()
{
}
public StoppedException(Throwable e)
{
super(e);
}
}
public void run()
{
run(new NullProgressMonitor());
}
/**
* @param name
* @return associate Job object with task
*/
public Job makeJob(String name)
{
return new Job(name)
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
try
{
RunTask.this.run(monitor);
}
catch (StoppedException e)
{
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}
};
}
/**
* @param name
* @return associate Job object with task
*/
public Job makeJob(String name, final JobNotificationMonitor jobMonitor)
{
return new Job(name)
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
jobMonitor.onJobStart();
try
{
RunTask.this.run(monitor);
}
catch (StoppedException e)
{
jobMonitor.onJobStop();
return Status.CANCEL_STATUS;
}
jobMonitor.onJobFinished();
return Status.OK_STATUS;
}
};
}
public void runAndWaitJob(String name) throws InterruptedException
{
Job theJob = makeJob(name);
theJob.schedule();
theJob.join();
}
}