package com.redhat.ceylon.eclipse.code.modulesearch; 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.swt.widgets.Display; import com.redhat.ceylon.eclipse.ui.CeylonPlugin; public abstract class ModuleSearchJobTemplate extends Job { public ModuleSearchJobTemplate(String name) { super(name); setUser(false); } @Override protected final IStatus run(IProgressMonitor monitor) { try { onRun(); } catch (Exception e) { return new Status(Status.ERROR, CeylonPlugin.PLUGIN_ID, getName() + " failed", e); } finally { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { onFinish(); } }); } return Status.OK_STATUS; } protected abstract void onRun(); protected abstract void onFinish(); }