Search in sources :

Example 1 with DeviceChooserDialog

use of org.moe.idea.ui.DeviceChooserDialog in project moe-ide-integration by multi-os-engine.

the class MOECompileTask method execute.

@Override
public boolean execute(CompileContext context) {
    RunConfiguration c = context.getCompileScope().getUserData(CompileStepBeforeRun.RUN_CONFIGURATION);
    if (!(c instanceof MOERunConfiguration)) {
        return true;
    }
    final MOERunConfiguration runConfig = (MOERunConfiguration) c;
    isOpenDialog = runConfig.getOpenDeploymentTargetDialog();
    canceled = false;
    runConfig.setCanceled(canceled);
    final MOEToolWindow toolWindow = MOEToolWindow.getInstance(runConfig.getProject());
    UIUtil.invokeAndWaitIfNeeded(new Runnable() {

        @Override
        public void run() {
            toolWindow.clear();
            if (isOpenDialog) {
                DeviceChooserDialog dialog = new DeviceChooserDialog(runConfig.module(), runConfig);
                dialog.show();
                if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) {
                    canceled = true;
                    runConfig.setCanceled(canceled);
                }
                isOpenDialog = false;
            }
        }
    });
    try {
        while (isOpenDialog) {
            Thread.sleep(100);
        }
        boolean isMaven = ModuleUtils.isMOEMavenModule(runConfig.module());
        // Start progress
        ProgressIndicator progress = context.getProgressIndicator();
        context.getProgressIndicator().pushState();
        progress.setText("Building MOE application");
        if (canceled) {
            toolWindow.balloon(MessageType.INFO, "BUILD CANCELED");
            return true;
        }
        if (!isMaven) {
            final CompileThread compileThread = new CompileThread(runConfig, context);
            compileThread.start();
            context.addMessage(CompilerMessageCategory.INFORMATION, "Building " + runConfig.moduleName(), null, -1, -1);
            // Wait for completion
            while (compileThread.isAlive() && !progress.isCanceled()) {
                compileThread.join(1000);
            }
            if (compileThread.isAlive() && progress.isCanceled()) {
                compileThread.interrupt();
                compileThread.join(1000);
            }
            // Re-throw error
            if (compileThread.throwable != null) {
                throw compileThread.throwable;
            }
            // Show on failure
            if (compileThread.returnCode != 0) {
                if (!compileThread.canceled) {
                    toolWindow.balloon(MessageType.ERROR, "BUILD FAILED");
                    context.addMessage(CompilerMessageCategory.ERROR, "Multi-OS Engine module build failed", null, -1, -1, toolWindow.getNavigatable());
                } else {
                    toolWindow.balloon(MessageType.INFO, "BUILD CANCELED");
                }
                return false;
            }
        } else {
            MOEMavenBuildTask mavenTask = new MOEMavenBuildTask(runConfig, "Building " + runConfig.moduleName(), true);
            boolean result = mavenTask.runTask();
            if (!result) {
                toolWindow.balloon(MessageType.ERROR, "BUILD FAILED");
                context.addMessage(CompilerMessageCategory.ERROR, "Multi-OS Engine module build failed", null, -1, -1, toolWindow.getNavigatable());
                return false;
            }
        }
    } catch (Throwable t) {
        toolWindow.balloon(MessageType.ERROR, "BUILD FAILED");
        LOG.error("Failed to compile module", t);
        context.addMessage(CompilerMessageCategory.ERROR, "Multi-OS Engine module build failed, an internal error occurred", null, -1, -1);
        return false;
    } finally {
        context.getProgressIndicator().popState();
    }
    return true;
}
Also used : DeviceChooserDialog(org.moe.idea.ui.DeviceChooserDialog) MOERunConfiguration(org.moe.idea.runconfig.configuration.MOERunConfiguration) MOEToolWindow(org.moe.idea.ui.MOEToolWindow) RunConfiguration(com.intellij.execution.configurations.RunConfiguration) MOERunConfiguration(org.moe.idea.runconfig.configuration.MOERunConfiguration) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) MOEMavenBuildTask(org.moe.idea.maven.MOEMavenBuildTask)

Aggregations

RunConfiguration (com.intellij.execution.configurations.RunConfiguration)1 ProgressIndicator (com.intellij.openapi.progress.ProgressIndicator)1 MOEMavenBuildTask (org.moe.idea.maven.MOEMavenBuildTask)1 MOERunConfiguration (org.moe.idea.runconfig.configuration.MOERunConfiguration)1 DeviceChooserDialog (org.moe.idea.ui.DeviceChooserDialog)1 MOEToolWindow (org.moe.idea.ui.MOEToolWindow)1