package org.dlangplugin.run; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.configurations.*; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class DLangRunDubConfiguration extends ModuleBasedConfiguration<RunConfigurationModule> implements RunConfiguration { //DUB properties private String workingDir; private boolean runAfterBuild = true; private boolean quiet = false; private boolean verbose = false; private String additionalParams; private Map<String, String> envVars; public DLangRunDubConfiguration(String name, Project project, ConfigurationFactory factory) { super(name, new RunConfigurationModule(project), factory); Collection<Module> modules = this.getValidModules(); if(!modules.isEmpty()) { //Get first valid module and use it this.setModule(modules.iterator().next()); } envVars = new HashMap<String, String>(); } @Override public Collection<Module> getValidModules() { Module[] modules = ModuleManager.getInstance(getProject()).getModules(); final DMDRunner appRunner = new DMDRunner(); ArrayList<Module> res = new ArrayList<Module>(); for (Module module : modules) { if (appRunner.isValidModule(module)) { res.add(module); } } return res; } @Override protected ModuleBasedConfiguration createInstance() { return new DLangRunDubConfiguration(getName(), getProject(), getFactory()); } @Override public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() { return new DLangRunDubConfigurationEditor(); } @Nullable @Override public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException { return new DLangRunDubState(env, this); } @Override public void writeExternal(@NotNull Element element) throws WriteExternalException { if(envVars == null) { envVars = new HashMap<String, String>(); } super.writeExternal(element); writeModule(element); XmlSerializer.serializeInto(this, element); } @Override public void readExternal(@NotNull Element element) throws InvalidDataException { super.readExternal(element); readModule(element); XmlSerializer.deserializeInto(this, element); } /** Getters and Setters. Autogenerated by IntelliJ IDEA **/ public String getWorkingDir() { return workingDir; } public void setWorkingDir(String workingDir) { this.workingDir = workingDir; } public boolean isRunAfterBuild() { return runAfterBuild; } public void setRunAfterBuild(boolean runAfterBuild) { this.runAfterBuild = runAfterBuild; } public boolean isQuiet() { return quiet; } public void setQuiet(boolean quiet) { this.quiet = quiet; } public boolean isVerbose() { return verbose; } public void setVerbose(boolean verbose) { this.verbose = verbose; } public String getAdditionalParams() { return additionalParams; } public void setAdditionalParams(String additionalParams) { this.additionalParams = additionalParams; } public Map<String, String> getEnvVars() { return envVars; } public void setEnvVars(Map<String, String> envVars) { this.envVars = envVars; } }