package de.janthomae.leiningenplugin.run;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.TextFieldWithAutoCompletion;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import de.janthomae.leiningenplugin.LeiningenConstants;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.Arrays;
/**
* @author <a href="janthomae@janthomae.de">Jan Thomä</a>
* @version $Id:$
*/
public class LeiningenRunConfigurationSettings extends SettingsEditor<LeiningenRunConfiguration> {
private final Project myProject;
private TextFieldWithBrowseButton wdSelector;
private TextFieldWithAutoCompletion<String> goals;
public LeiningenRunConfigurationSettings(final Project p) {
myProject = p;
}
protected void resetEditorFrom(LeiningenRunConfiguration configuration) {
wdSelector.setText(configuration.getRunnerParams().getWorkingDirectory());
goals.setText(StringUtil.join(configuration.getRunnerParams().getGoals(), " "));
}
protected void applyEditorTo(LeiningenRunConfiguration configuration) throws ConfigurationException {
LeiningenRunnerParameters runnerParams =
new LeiningenRunnerParameters(StringUtil.split(goals.getText(), " "), wdSelector.getText());
configuration.setRunnerParams(runnerParams);
}
@NotNull
protected JComponent createEditor() {
JPanel configurationPanel = new JPanel(new FormLayout("fill:50dlu:grow", "p,p,5dlu,p,p,fill:50dlu:grow"));
CellConstraints c = new CellConstraints();
configurationPanel.add(new JLabel("Working directory"), c.xy(1, 1));
this.wdSelector = new TextFieldWithBrowseButton();
this.wdSelector
.addBrowseFolderListener("Select working directory", "This directory must contain a project.clj file. ",
null, new FileChooserDescriptor(false, true, false, false, false, false));
configurationPanel.add(this.wdSelector, c.xy(1, 2));
configurationPanel.add(new JLabel("Goals to run (separate with space)"), c.xy(1, 4));
this.goals = new TextFieldWithAutoCompletion<String>(myProject, new TextFieldWithAutoCompletion.StringsCompletionProvider(Arrays.asList(LeiningenConstants.GOALS),null), true,null );
configurationPanel.add(this.goals, c.xy(1, 5));
return configurationPanel;
}
protected void disposeEditor() {
}
}