/** * Copyright (c) 2010, 2013 Darmstadt University of Technology. * 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: * Marcel Bruch - initial API and implementation. */ package org.eclipse.recommenders.rcp.utils; import static com.google.common.collect.Iterables.size; import static java.util.Arrays.asList; import java.util.Arrays; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; public final class Jobs { public static final ISchedulingRule EXCLUSIVE = new SequentialSchedulingRule(); private Jobs() { // Not meant to be instantiated } public static IProgressMonitor getProgressGroup() { return Job.getJobManager().createProgressGroup(); } public static void parallel(String task, Job... jobs) { parallel(task, asList(jobs)); } public static void parallel(String task, Iterable<Job> jobs) { IProgressMonitor group = getProgressGroup(); group.beginTask(task, size(jobs)); for (Job job : jobs) { job.setProgressGroup(group, 1); job.schedule(); } } public static void sequential(String task, Job... jobs) { sequential(task, Arrays.asList(jobs)); } public static void sequential(String task, Iterable<Job> jobs) { ISchedulingRule rule = new SequentialSchedulingRule(); IProgressMonitor group = getProgressGroup(); group.beginTask(task, size(jobs)); for (Job job : jobs) { job.setRule(rule); job.setProgressGroup(group, 1); job.schedule(); } } public static final class SequentialSchedulingRule implements ISchedulingRule { @Override public boolean isConflicting(ISchedulingRule rule) { return rule == this; } @Override public boolean contains(ISchedulingRule rule) { return rule == this; } } }