/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.jstestdriver.idea; import com.google.jstestdriver.idea.ui.ConfigurationForm; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RunConfigurationModule; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.configurations.RuntimeConfigurationException; 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.JDOMExternalizer; import com.intellij.openapi.util.WriteExternalException; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; /** * One configured instance of the Run Configuration. The user can create several different configs * and save them all. * @author alexeagle@google.com (Alex Eagle) */ public class JSTestDriverConfiguration extends ModuleBasedConfiguration<RunConfigurationModule> { protected final ConfigurationFactory jsTestDriverConfigurationFactory; public String settingsFile; private String serverAddress; private ServerType serverType; public JSTestDriverConfiguration(Project project, ConfigurationFactory jsTestDriverConfigurationFactory, String pluginName) { super(pluginName, new RunConfigurationModule(project), jsTestDriverConfigurationFactory); this.jsTestDriverConfigurationFactory = jsTestDriverConfigurationFactory; } public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() { return new ConfigurationForm(); } public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException { return new TestRunnerState(this, getProject(), env); } @Override public void checkConfiguration() throws RuntimeConfigurationException { if (settingsFile == null) { throw new RuntimeConfigurationException("Settings file is required"); } if (!new File(settingsFile).exists()) { throw new RuntimeConfigurationException("Settings file does not exist: " + settingsFile); } } public Collection<Module> getValidModules() { List<Module> modules = new ArrayList<Module>(); Module[] allModules = ModuleManager.getInstance(getProject()).getModules(); modules.addAll(Arrays.asList(allModules)); return modules; } protected ModuleBasedConfiguration createInstance() { return new JSTestDriverConfiguration(getConfigurationModule().getProject(), jsTestDriverConfigurationFactory, getName()); } @Override public void readExternal(Element element) throws InvalidDataException { super.readExternal(element); readModule(element); settingsFile = JDOMExternalizer.readString(element, "settingsFile"); serverAddress = JDOMExternalizer.readString(element, "serverAddress"); String serverTypeStr = JDOMExternalizer.readString(element, "serverType"); if (serverTypeStr != null) { serverType = ServerType.valueOf(serverTypeStr); } } @Override public void writeExternal(Element element) throws WriteExternalException { super.writeExternal(element); writeModule(element); JDOMExternalizer.write(element, "settingsFile", settingsFile); JDOMExternalizer.write(element, "serverAddress", serverAddress); if (serverType != null) { JDOMExternalizer.write(element, "serverType", serverType.name()); } } public String getSettingsFile() { return settingsFile; } public void setSettingsFile(String settingsFile) { this.settingsFile = settingsFile; } public String getServerAddress() { return serverAddress; } public void setServerAddress(String serverAddress) { this.serverAddress = serverAddress; } public void setServerType(ServerType serverType) { this.serverType = serverType; } public ServerType getServerType() { return serverType; } }