package com.github.jknack.antlr4ide.generator; import static com.google.common.base.Preconditions.checkNotNull; 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.xtext.xbase.lib.Procedures.Procedure1; import com.google.common.base.Function; /** * Statics method for creating {@link Job}. * * @author edgar */ public class Jobs { /** * Creates a new job. * * @param name The job name. * @param fn The job execution body. * @return A new job. */ public static Job job(final String name, final Function<IProgressMonitor, IStatus> fn) { checkNotNull(name); checkNotNull(fn); return new Job(name) { @Override protected IStatus run(final IProgressMonitor monitor) { return fn.apply(monitor); } @Override public String toString() { return name; } }; } /** * Creates a new job. * * @param name The job name. * @param fn The job execution body. * @return A new job. */ public static Job job(final String name, final Procedure1<IProgressMonitor> fn) { checkNotNull(name); checkNotNull(fn); return new Job(name) { @Override protected IStatus run(final IProgressMonitor monitor) { fn.apply(monitor); return Status.OK_STATUS; } @Override public String toString() { return name; } }; } /** * Schedule a new job. * * @param name The job's name. * @param fn The job's execution body. * @return A new job. */ public static Job schedule(final String name, final Function<IProgressMonitor, IStatus> fn) { Job job = job(name, fn); job.schedule(); return job; } /** * Creates a new system job. * * @param name The job's name. * @param fn The job's execution body. * @return A new job. */ public static Job system(final String name, final Procedure1<IProgressMonitor> fn) { Job job = job(name, fn); job.setSystem(true); return job; } }