Package de.janthomae.leiningenplugin.run

Source Code of de.janthomae.leiningenplugin.run.LeiningenRunConfigurationType

package de.janthomae.leiningenplugin.run;

import com.intellij.compiler.options.CompileStepBeforeRun;
import com.intellij.execution.*;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.LocalFileSystem;
import de.janthomae.leiningenplugin.LeiningenIcons;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

/**
* @author <a href="janthomae@janthomae.de">Jan Thom&auml;</a>
* @version $Id:$
*/
public class LeiningenRunConfigurationType implements ConfigurationType {
    private ConfigurationFactory myFactory;

    LeiningenRunConfigurationType() {
        myFactory = new ConfigurationFactory(this) {
            public RunConfiguration createTemplateConfiguration(Project project) {
                throw new UnsupportedOperationException();
            }

            public RunConfiguration createTemplateConfiguration(Project project, RunManager runManager) {
                return new LeiningenRunConfiguration(project, this, "");
            }

            @Override
            public void configureBeforeRunTaskDefaults(Key<? extends BeforeRunTask> providerID, BeforeRunTask task) {
                if (providerID == CompileStepBeforeRun.ID) {
                    task.setEnabled(false);
                }
            }
        };
    }

    public RunnerAndConfigurationSettings createConfigurationByLocation(Location location) {
        return null;
    }


    public boolean isConfigurationByLocation(RunConfiguration runConfiguration, Location location) {
        return false;
    }

    public String getDisplayName() {
        return "Leiningen";
    }

    public String getConfigurationTypeDescription() {
        return "Leiningen Build";
    }

    public Icon getIcon() {
        return LeiningenIcons.GOAL_ICON;
    }

    @NotNull
    public String getId() {
        return "LeiningenRunConfiguration";
    }

    public ConfigurationFactory[] getConfigurationFactories() {
        return new ConfigurationFactory[]{myFactory};
    }

    public static void runConfiguration(Project project,
                                        LeiningenRunnerParameters params,
                                        DataContext context) {
        RunnerAndConfigurationSettings configSettings = createRunnerAndConfigurationSettings(
                params,
                project);

        ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(DefaultRunExecutor.EXECUTOR_ID);
    Executor executor = DefaultRunExecutor.getRunExecutorInstance();
    ExecutionEnvironment env = new ExecutionEnvironment(executor, runner, configSettings, project);


        try {
            runner.execute(env, new ProgramRunner.Callback() {
                public void processStarted(RunContentDescriptor runContentDescriptor) {
                    final ProcessHandler runContentDescriptorProcessHandler = runContentDescriptor.getProcessHandler();
                    if (runContentDescriptorProcessHandler != null) {
                        runContentDescriptorProcessHandler.addProcessListener(new ProcessAdapter() {
                            @Override
                            public void processTerminated(ProcessEvent event) {
                                LocalFileSystem.getInstance().refreshWithoutFileWatcher(true);
                            }
                        });
                    }
                }
            });
        } catch (ExecutionException e) {
        }
    }

    private static RunnerAndConfigurationSettings createRunnerAndConfigurationSettings(
            LeiningenRunnerParameters params, Project project) {
        LeiningenRunConfigurationType type =
                ConfigurationTypeUtil.findConfigurationType(LeiningenRunConfigurationType.class);

        final RunnerAndConfigurationSettings settings =
                RunManagerEx.getInstanceEx(project).createConfiguration("Leiningen", type.myFactory);
        LeiningenRunConfiguration configuration = (LeiningenRunConfiguration) settings.getConfiguration();
        configuration.setRunnerParams(params);
        return settings;
    }
}
TOP

Related Classes of de.janthomae.leiningenplugin.run.LeiningenRunConfigurationType

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.