package com.intellij.flex.uiDesigner.testAssistant.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.icons.AllIcons; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.util.SystemProperties; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class AnyApplication implements ConfigurationType { private final ConfigurationFactory factory; AnyApplication() { factory = new ConfigurationFactory(this) { @NotNull @Override public RunConfiguration createTemplateConfiguration(@NotNull Project project) { return new AnyApplicationConfiguration(project, this, ""); } }; } @Override public String getDisplayName() { return "AnyApplication"; } @Override public String getConfigurationTypeDescription() { return "AnyApplication"; } @Override public Icon getIcon() { return AllIcons.RunConfigurations.Application; } @NotNull @Override public String getId() { return "com.intellij.flex.uiDesigner.testAssistant.run.AnyApplication"; } @Override public ConfigurationFactory[] getConfigurationFactories() { return new ConfigurationFactory[]{factory}; } private static class AnyApplicationConfiguration extends RunConfigurationBase implements ModuleRunProfile { protected AnyApplicationConfiguration(final Project project, final ConfigurationFactory factory, final String name) { super(project, factory, name); } @NotNull @Override public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() { return new UnknownSettingsEditor(); } @Override public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException { return new JavaCommandLineState(env) { @Override protected JavaParameters createJavaParameters() throws ExecutionException { final JavaParameters params = new JavaParameters(); params.setJdk(JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk()); params.setMainClass("com.intellij.idea.Main"); params.setWorkingDirectory(SystemProperties.getUserHome() + "/Documents/idea/bin/"); try { final BufferedReader reader = new BufferedReader(new FileReader(new File(SystemProperties.getUserHome() + "/astella.run"))); try { params.getVMParametersList().addParametersString(reader.readLine()); reader.readLine(); params.getClassPath().add(reader.readLine()); } finally { reader.close(); } } catch (IOException e) { throw new ExecutionException("Cannot run", e); } return params; } }; } } private static class UnknownSettingsEditor extends SettingsEditor<AnyApplicationConfiguration> { private final JPanel myPanel; private UnknownSettingsEditor() { myPanel = new JPanel(); myPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 50, 0)); } @Override protected void resetEditorFrom(@NotNull final AnyApplicationConfiguration s) { } @Override protected void applyEditorTo(@NotNull final AnyApplicationConfiguration s) throws ConfigurationException { } @Override @NotNull protected JComponent createEditor() { return myPanel; } } }