package com.intellij.lang.javascript.flex.run; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.configuration.EmptyRunProfileState; import com.intellij.execution.configurations.*; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.lang.javascript.flex.FlexModuleType; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleType; 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.openapi.util.text.StringUtil; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NotNull; public class RemoteFlashRunConfiguration extends LocatableConfigurationBase { private static final String DEFAULT_NAME = "Remote debug"; private RemoteFlashRunnerParameters myRunnerParameters = new RemoteFlashRunnerParameters(); public RemoteFlashRunConfiguration(final Project project, final ConfigurationFactory factory, final String name) { super(project, factory, name); } @Override public RemoteFlashRunConfiguration clone() { final RemoteFlashRunConfiguration clone = (RemoteFlashRunConfiguration)super.clone(); clone.myRunnerParameters = myRunnerParameters.clone(); return clone; } @NotNull @Override public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() { return new RemoteFlashRunConfigurationForm(getProject()); } @Override public void readExternal(final Element element) throws InvalidDataException { super.readExternal(element); myRunnerParameters = new RemoteFlashRunnerParameters(); XmlSerializer.deserializeInto(myRunnerParameters, element); } @Override public void writeExternal(final Element element) throws WriteExternalException { super.writeExternal(element); XmlSerializer.serializeInto(myRunnerParameters, element); } @Override public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException { try { myRunnerParameters.checkAndGetModuleAndBC(getProject()); } catch (RuntimeConfigurationError e) { throw new ExecutionException(e.getMessage()); } return EmptyRunProfileState.INSTANCE; } @Override public void checkConfiguration() throws RuntimeConfigurationException { myRunnerParameters.checkAndGetModuleAndBC(getProject()); } @NotNull public RemoteFlashRunnerParameters getRunnerParameters() { return myRunnerParameters; } @NotNull public Module[] getModules() { final Module module = ModuleManager.getInstance(getProject()).findModuleByName(myRunnerParameters.getModuleName()); if (module != null && ModuleType.get(module) instanceof FlexModuleType) { return new Module[]{module}; } else { return Module.EMPTY_ARRAY; } } @Override public String suggestedName() { final String bcName = myRunnerParameters.getBCName(); return StringUtil.isEmptyOrSpaces(bcName) ? DEFAULT_NAME : (DEFAULT_NAME + " (" + bcName + ")"); } }