package com.intellij.lang.javascript.flex.projectStructure.detection;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.lang.javascript.flex.FlexBundle;
import com.intellij.lang.javascript.flex.FlexModuleType;
import com.intellij.lang.javascript.flex.projectStructure.FlexBuildConfigurationsExtension;
import com.intellij.lang.javascript.flex.projectStructure.model.FlexBuildConfiguration;
import com.intellij.lang.javascript.flex.projectStructure.model.FlexBuildConfigurationManager;
import com.intellij.lang.javascript.flex.projectStructure.model.ModifiableFlexBuildConfiguration;
import com.intellij.lang.javascript.flex.projectStructure.model.SdkEntry;
import com.intellij.lang.javascript.flex.projectStructure.model.impl.FlexProjectConfigurationEditor;
import com.intellij.lang.javascript.flex.sdk.FlexSdkComboBoxWithBrowseButton;
import com.intellij.lang.javascript.flex.sdk.FlexSdkType2;
import com.intellij.lang.javascript.flex.sdk.FlexSdkUtils;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class FlexSdkStep extends ModuleWizardStep {
private JPanel myContentPane;
private FlexSdkComboBoxWithBrowseButton mySdkCombo;
private JLabel mySdkLabel;
private WizardContext myContext;
public FlexSdkStep(WizardContext context) {
myContext = context;
selectSdkUsedByOtherModules(myContext.getProject(), mySdkCombo);
}
public JComponent getComponent() {
mySdkLabel.setLabelFor(mySdkCombo.getChildComponent());
final String text = FlexBundle.message(myContext.getProject() != null ? "module.sdk.label" : "project.sdk.label");
mySdkLabel.setText(UIUtil.removeMnemonic(text));
mySdkLabel.setDisplayedMnemonicIndex(UIUtil.getDisplayMnemonicIndex(text));
mySdkCombo.setButtonEnabled(FlexBuildConfigurationsExtension.getInstance().getConfigurator().getConfigEditor() == null);
return myContentPane;
}
public void updateDataModel() {
myContext.setProjectJdk(mySdkCombo.getSelectedSdk());
}
private static void selectSdkUsedByOtherModules(final @Nullable Project project, final FlexSdkComboBoxWithBrowseButton combo) {
if (project == null) {
return;
}
final FlexProjectConfigurationEditor currentEditor = FlexBuildConfigurationsExtension.getInstance().getConfigurator().getConfigEditor();
if (currentEditor != null) {
final Module[] modules = ModuleStructureConfigurable.getInstance(project).getModules();
for (Module module : modules) {
if (ModuleType.get(module) != FlexModuleType.getInstance()) {
continue;
}
for (ModifiableFlexBuildConfiguration c : currentEditor.getConfigurations(module)) {
SdkEntry sdkEntry = c.getDependencies().getSdkEntry();
Sdk sdk;
if (sdkEntry != null &&
(sdk = FlexSdkUtils.findFlexOrFlexmojosSdk(sdkEntry.getName())) != null &&
sdk.getSdkType() == FlexSdkType2.getInstance()) {
combo.setSelectedSdkRaw(sdk.getName());
return;
}
}
}
}
else {
for (final Module module : ModuleManager.getInstance(project).getModules()) {
if (ModuleType.get(module) == FlexModuleType.getInstance()) {
for (FlexBuildConfiguration bc : FlexBuildConfigurationManager.getInstance(module).getBuildConfigurations()) {
Sdk sdk = bc.getSdk();
if (sdk != null) {
combo.setSelectedSdkRaw(sdk.getName());
return;
}
}
}
}
}
}
}