package org.jactr.eclipse.ui.concurrent;
/*
* default logging
*/
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.ui.progress.UIJob;
import org.jactr.eclipse.core.CorePlugin;
import org.jactr.eclipse.core.concurrent.JobExecutor;
public class UIJobExecutor extends JobExecutor
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(UIJobExecutor.class);
public UIJobExecutor(String name)
{
super(name);
}
@Override
protected Job createJob(String name, Runnable command)
{
return new ExecutorJob(name, command);
}
private class ExecutorJob extends UIJob
{
private Runnable _runner;
public ExecutorJob(String name, Runnable runner)
{
super(name);
_runner = runner;
setSystem(false);
setPriority(Job.SHORT);
}
@Override
public IStatus runInUIThread(IProgressMonitor monitor)
{
// TODO Auto-generated method stub
try
{
_runner.run();
return Status.OK_STATUS;
}
catch(Exception e)
{
return new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,getName()+" failed to execute runnable "+_runner, e);
}
}
}
}