package org.erlide.ui.util; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.window.Window; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.progress.UIJob; import org.erlide.runtime.events.NoRuntimeEvent; import org.erlide.util.ErlLogger; import org.erlide.util.MessageReporter; import com.google.common.eventbus.Subscribe; public class NoRuntimeHandler implements Runnable { private static boolean running = false; private static boolean reported = false; @Override public void run() { final UIJob job = new UIJob("erlide set runtime") { @Override public IStatus runInUIThread(final IProgressMonitor monitor) { if (running) { return Status.OK_STATUS; } running = true; if (reported) { MessageReporter .showError("Erlang support requires an Erlang installation. " + "Did you configure it?"); } else { MessageReporter .showError("Erlang support requires an Erlang installation. " + "Please configure it. " + "Eclipse will restart afterwards."); } reported = true; final PreferenceDialog pref = PreferencesUtil.createPreferenceDialogOn( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "org.erlide.ui.preferences.runtimes", null, null); if (pref != null) { if (pref.open() == Window.OK) { ErlLogger.info( "Restarting workbench after initial runtime configuration..."); PlatformUI.getWorkbench().restart(); } } running = false; return Status.OK_STATUS; } }; job.schedule(); } @Subscribe public void handle(final NoRuntimeEvent event) { run(); } }