IDEA-120518 Cannot create new Ruby on Rails application

This commit is contained in:
Dmitry Avdeev
2014-02-17 16:26:37 +04:00
parent d475a7863f
commit 5e00ccf842
7 changed files with 102 additions and 70 deletions
@@ -397,7 +397,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
private boolean showCustomOptions(@NotNull ModuleBuilder builder) {
String card = builder.getBuilderId();
if (!myCustomSteps.containsKey(card)) {
ModuleWizardStep step = builder.getCustomOptionsStep(this);
ModuleWizardStep step = builder.getCustomOptionsStep(myContext, this);
if (step == null) return false;
step.updateStep();
myCustomSteps.put(card, step);
@@ -180,17 +180,12 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple
}
public void onFrameworkSelectionChanged(FrameworkSupportNode node) {
final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster();
final FrameworkSupportInModuleProvider provider = node.getUserObject();
//todo[nik]
boolean checked = node.isChecked();
if (provider instanceof OldFrameworkSupportProviderWrapper) {
final FrameworkSupportProvider oldProvider = ((OldFrameworkSupportProviderWrapper) provider).getProvider();
if (node.isChecked()) {
multicaster.frameworkSelected(oldProvider);
}
else {
multicaster.frameworkUnselected(oldProvider);
}
selectFramework(oldProvider, checked);
}
for (FrameworkSupportInModuleProvider.FrameworkDependency dependency : provider.getDependenciesFrameworkIds()) {
if (!dependency.isOptional()) {
@@ -200,6 +195,16 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple
}
}
public void selectFramework(FrameworkSupportProvider provider, boolean checked) {
final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster();
if (checked) {
multicaster.frameworkSelected(provider);
}
else {
multicaster.frameworkUnselected(provider);
}
}
public void fireWizardStepUpdated() {
myDispatcher.getMulticaster().wizardStepUpdated();
}
@@ -17,12 +17,8 @@ package com.intellij.ide.util.projectWizard;
import com.intellij.CommonBundle;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.roots.ProjectRootManager;
@@ -35,8 +31,6 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Dmitry Avdeev
@@ -47,64 +41,29 @@ public class SdkSettingsStep extends ModuleWizardStep {
protected final WizardContext myWizardContext;
protected final ProjectSdksModel myModel;
private final ModuleBuilder myModuleBuilder;
private final JPanel myJdkPanel;
public SdkSettingsStep(@NotNull SettingsStep settingsStep, @NotNull ModuleBuilder moduleBuilder, @NotNull Condition<SdkTypeId> sdkFilter) {
public SdkSettingsStep(SettingsStep settingsStep, @NotNull ModuleBuilder moduleBuilder,
@NotNull Condition<SdkTypeId> sdkFilter) {
this(settingsStep.getContext(), moduleBuilder, sdkFilter);
settingsStep.addSettingsField(getSdkFieldLabel(settingsStep.getContext().getProject()), myJdkPanel);
}
public SdkSettingsStep(WizardContext context,
@NotNull ModuleBuilder moduleBuilder,
@NotNull Condition<SdkTypeId> sdkFilter) {
myModuleBuilder = moduleBuilder;
myWizardContext = settingsStep.getContext();
myWizardContext = context;
myModel = new ProjectSdksModel();
Project project = myWizardContext.getProject();
myModel.reset(project);
myJdkComboBox = new JdkComboBox(myModel, sdkFilter);
final PropertiesComponent component = project == null ? PropertiesComponent.getInstance() : PropertiesComponent.getInstance(project);
ModuleType moduleType = moduleBuilder.getModuleType();
final String selectedJdkProperty = "jdk.selected." + (moduleType == null ? "" : moduleType.getId());
myJdkComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Sdk jdk = myJdkComboBox.getSelectedJdk();
if (jdk != null) {
component.setValue(selectedJdkProperty, jdk.getName());
}
}
});
if (project != null) {
Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
if (sdk != null && moduleBuilder.isSuitableSdkType(sdk.getSdkType())) {
// use project SDK
return;
}
}
else {
// set default project SDK
Project defaultProject = ProjectManager.getInstance().getDefaultProject();
Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk();
if (sdk != null && sdkFilter.value(sdk.getSdkType())) {
myJdkComboBox.setSelectedJdk(sdk);
}
}
String value = component.getValue(selectedJdkProperty);
if (value != null) {
Sdk jdk = ProjectJdkTable.getInstance().findJdk(value);
if (jdk != null) {
myJdkComboBox.setSelectedJdk(jdk);
}
}
JButton button = new JButton("Ne\u001Bw...");
myJdkComboBox.setSetupButton(button, project, myModel,
project == null ? new JdkComboBox.NoneJdkComboBoxItem() : new JdkComboBox.ProjectJdkComboBoxItem(),
null,
false);
JPanel jdkPanel = new JPanel(new BorderLayout(4, 0));
jdkPanel.add(myJdkComboBox);
jdkPanel.add(button, BorderLayout.EAST);
settingsStep.addSettingsField(getSdkFieldLabel(project), jdkPanel);
myJdkComboBox = JdkComboBox.createSdkComboBox(moduleBuilder, sdkFilter, project, myModel);
myJdkPanel = new JPanel(new BorderLayout(4, 0));
myJdkPanel.add(myJdkComboBox);
myJdkPanel.add(myJdkComboBox.getSetUpButton(), BorderLayout.EAST);
}
@NotNull
@@ -112,9 +71,13 @@ public class SdkSettingsStep extends ModuleWizardStep {
return (project == null ? "Project" : "Module") + " \u001BSDK:";
}
public JdkComboBox getJdkComboBox() {
return myJdkComboBox;
}
@Override
public JComponent getComponent() {
return null;
return myJdkPanel;
}
@Override
@@ -16,13 +16,19 @@
package com.intellij.openapi.roots.ui.configuration;
import com.intellij.ide.DataManager;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.ide.util.projectWizard.ProjectJdkListRenderer;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkType;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
import com.intellij.openapi.ui.ComboBoxWithWidePopup;
@@ -57,6 +63,7 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
private final Condition<SdkTypeId> myFilter;
@Nullable
private final Condition<SdkTypeId> myCreationFilter;
private JButton mySetUpButton;
public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) {
this(jdkModel, null);
@@ -103,6 +110,57 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
});
}
public static JdkComboBox createSdkComboBox(ModuleBuilder moduleBuilder,
Condition<SdkTypeId> sdkFilter,
Project project,
ProjectSdksModel model) {
final JdkComboBox comboBox = new JdkComboBox(model, sdkFilter);
final PropertiesComponent component = project == null ? PropertiesComponent.getInstance() : PropertiesComponent.getInstance(project);
ModuleType moduleType = moduleBuilder.getModuleType();
final String selectedJdkProperty = "jdk.selected." + (moduleType == null ? "" : moduleType.getId());
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Sdk jdk = comboBox.getSelectedJdk();
if (jdk != null) {
component.setValue(selectedJdkProperty, jdk.getName());
}
}
});
if (project != null) {
Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
if (sdk != null && moduleBuilder.isSuitableSdkType(sdk.getSdkType())) {
// use project SDK
return null;
}
}
else {
// set default project SDK
Project defaultProject = ProjectManager.getInstance().getDefaultProject();
Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk();
if (sdk != null && sdkFilter.value(sdk.getSdkType())) {
comboBox.setSelectedJdk(sdk);
}
}
String value = component.getValue(selectedJdkProperty);
if (value != null) {
Sdk jdk = ProjectJdkTable.getInstance().findJdk(value);
if (jdk != null) {
comboBox.setSelectedJdk(jdk);
}
}
JButton button = new JButton("Ne\u001Bw...");
comboBox.setSetupButton(button, project, model,
project == null ? new NoneJdkComboBoxItem() : new ProjectJdkComboBoxItem(),
null,
false);
return comboBox;
}
@Override
public Dimension getPreferredSize() {
final Rectangle rec = ScreenUtil.getScreenRectangle(0, 0);
@@ -140,7 +198,9 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
final JdkComboBoxItem firstItem,
@Nullable final Condition<Sdk> additionalSetup,
final String actionGroupTitle) {
setUpButton.addActionListener(new ActionListener() {
mySetUpButton = setUpButton;
mySetUpButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DefaultActionGroup group = new DefaultActionGroup();
@@ -199,6 +259,10 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
});
}
public JButton getSetUpButton() {
return mySetUpButton;
}
@Override
public JdkComboBoxItem getSelectedItem() {
return (JdkComboBoxItem)super.getSelectedItem();
@@ -43,7 +43,7 @@ public abstract class AbstractModuleBuilder extends ProjectBuilder {
* Custom UI to be shown on the first wizard page
*/
@Nullable
public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) {
public ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) {
return null;
}
@@ -121,7 +121,7 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder<GradlePro
@Nullable
@Override
public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) {
public ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) {
if (!myWizardContext.isCreatingNewProject()) return null;
final GradleProjectSettingsControl settingsControl = new GradleProjectSettingsControl(getExternalProjectSettings());
return new ExternalModuleSettingsStep<GradleProjectSettings>(this, settingsControl);
@@ -218,7 +218,7 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil
@Nullable
@Override
public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) {
public ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) {
MavenArchetypesStep step = new MavenArchetypesStep(this, null);
Disposer.register(parentDisposable, step);
return step;