content: package com.antfortune.freeline.idea.configuration;
  
  import com.intellij.execution.CantRunException;
  import com.intellij.execution.ExecutionException;
  import com.intellij.execution.Executor;
  import com.intellij.execution.configurations.*;
  import com.intellij.execution.process.OSProcessHandler;
  import com.intellij.execution.process.ProcessHandler;
  import com.intellij.execution.runners.ExecutionEnvironment;
  import com.intellij.execution.ui.ConsoleView;
  import com.intellij.openapi.options.SettingsEditor;
  import com.intellij.openapi.project.Project;
  import org.jetbrains.annotations.NotNull;
  import org.jetbrains.annotations.Nullable;
  import com.antfortune.freeline.idea.utils.FreelineUtil;
  
  /**
   * Freeline run configuration implementation
   *
   * @author act262@gmail.com
   */
  class FreeRunConfiguration extends RunConfigurationBase {
  
      FreeRunConfiguration(@NotNull Project project, @NotNull ConfigurationFactory factory, String name) {
          super(project, factory, name);
      }
  
      @NotNull
      @Override
      public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
          // setting editor ui
          return new FreeSettingEditor();
      }
  
      @Override
      public void checkConfiguration() throws RuntimeConfigurationException {
          if (!FreelineUtil.hadInitFreeline(getProject())) {
              throw new RuntimeConfigurationException("Not yet initialize freeline code", "Warning");
          }
      }
  
      @Nullable
      @Override
      public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment executionEnvironment) throws ExecutionException {
          return new FreeRunState(executionEnvironment);
      }
  
  
      /**
       * RunState
       */
      private class FreeRunState extends CommandLineState {
  
          FreeRunState(ExecutionEnvironment environment) {
              super(environment);
          }
  
          @NotNull
          @Override
          protected ProcessHandler startProcess() throws ExecutionException {
              if (!FreelineUtil.hadInitFreeline(getProject())) {
                  throw new CantRunException("Not yet initialized freeline code");
              }
              // here just run one command: python freeline.py
              GeneralCommandLine commandLine = new GeneralCommandLine();
              ExecutionEnvironment environment = getEnvironment();
              commandLine.setWorkDirectory(environment.getProject().getBasePath());
              commandLine.setExePath("python");
              commandLine.addParameters("freeline.py");
              return new OSProcessHandler(commandLine);
          }
  
          @Nullable
          @Override
          protected ConsoleView createConsole(@NotNull Executor executor) throws ExecutionException {
              ConsoleView console = super.createConsole(executor);
              // before run new task,clean log
              if (console != null) {
                  console.clear();
              }
              return console;
          }
      }
  }
  