package sk.stuba.fiit.perconik.eclipse.ui; import com.google.common.base.Supplier; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import sk.stuba.fiit.perconik.eclipse.core.runtime.PluginConsoles; import sk.stuba.fiit.perconik.environment.plugin.Activator; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly; /** * Static utility methods pertaining to Eclipse workbench. * * @author Pavol Zbell * @since 1.0 */ public final class Workbenches { private Workbenches() {} public static Supplier<IWorkbench> workbenchSupplier() { return new Supplier<IWorkbench>() { public IWorkbench get() { return getWorkbench(); } }; } /** * Gets the workbench. * @return the workbench or {@code null} if it has not been created yet */ public static IWorkbench getWorkbench() { try { return PlatformUI.getWorkbench(); } catch (IllegalStateException e) { PluginConsoles.create(Activator.defaultInstance()).error("Workbench has not been created yet", e); return null; } } /** * Waits for the workbench. * This method blocks until there is an available workbench. * @see #getWorkbench() */ public static IWorkbench waitForWorkbench() { IWorkbench workbench; while ((workbench = getWorkbench()) == null) { sleepUninterruptibly(20, MILLISECONDS); } return workbench; } }