package com.atsebak.embeddedlinuxjvm.utils; import com.atsebak.embeddedlinuxjvm.localization.EmbeddedLinuxJVMBundle; import com.atsebak.embeddedlinuxjvm.runner.conf.EmbeddedLinuxJVMConfigurationType; import com.atsebak.embeddedlinuxjvm.runner.conf.EmbeddedLinuxJVMRunConfiguration; import com.intellij.execution.RunManager; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; import com.intellij.util.DisposeAwareRunnable; public class ProjectUtils { /** * Runs a thread when initialized * * @param project * @param r */ public static void runWhenInitialized(final Project project, final Runnable r) { if (project.isDisposed()) return; if (isNoBackgroundMode()) { r.run(); return; } if (!project.isInitialized()) { StartupManager.getInstance(project).registerPostStartupActivity(DisposeAwareRunnable.create(r, project)); return; } runDumbAware(project, r); } /** * Runs the DumbService * @param project * @param r */ public static void runDumbAware(final Project project, final Runnable r) { if (DumbService.isDumbAware(r)) { r.run(); } else { DumbService.getInstance(project).runWhenSmart(DisposeAwareRunnable.create(r, project)); } } /** * Checks if there is no background mode * @return */ public static boolean isNoBackgroundMode() { return (ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().isHeadlessEnvironment()); } /** * adds run configuration dynamically * @param module * @param mainClass * @param boardName */ public static void addProjectConfiguration(final Module module, final String mainClass, final String boardName) { final Runnable r = new Runnable() { @Override public void run() { final RunManager runManager = RunManager.getInstance(module.getProject()); final RunnerAndConfigurationSettings settings = runManager. createRunConfiguration(module.getName(), EmbeddedLinuxJVMConfigurationType.getInstance().getFactory()); final EmbeddedLinuxJVMRunConfiguration configuration = (EmbeddedLinuxJVMRunConfiguration) settings.getConfiguration(); configuration.setName(EmbeddedLinuxJVMBundle.message("runner.name", boardName)); configuration.getRunnerParameters().setRunAsRoot(true); configuration.getRunnerParameters().setMainclass(mainClass); runManager.addConfiguration(settings, false); runManager.setSelectedConfiguration(settings); final Notification notification = new Notification( Notifications.GROUPDISPLAY_ID, EmbeddedLinuxJVMBundle.getString("pi.connection.required"), EmbeddedLinuxJVMBundle.message("pi.connection.notsetup", boardName), NotificationType.INFORMATION); com.intellij.notification.Notifications.Bus.notify(notification); } }; r.run(); } }